Acelerômetro

Tanto o Circuit Playground Express quanto o Bluefruit contêm um acelerômetro, permitindo que o dispositivo detecte seu movimento e sua orientação em três dimensões.

O programa a seguir lê a aceleração ao longo dos eixos x, y e z, exibe os valores no console serial e define os valores vermelho/verde/azul dos LEDs com base nas leituras x/y/z do acelerômetro.

from adafruit_circuitplayground import cp
import time

while True:
    if cp.switch:
        print("Interruptor desligado!")
        cp.pixels.fill((0, 0, 0))
        time.sleep(1)
    else:
        R = 0
        G = 0
        B = 0
        x, y, z = cp.acceleration

        print((x, y, z))

        R = R + abs(int(x))
        G = G + abs(int(y))
        B = B + abs(int(z))
        cp.pixels.fill((R, G, B))
        time.sleep(0.25)

Desafio

Com o programa acima rodando, incline o dispositivo de modo que o valor de x seja 0, enquanto os valores de y e z sejam aproximadamente iguais. Em que ângulo o dispositivo está sendo segurado?

Conexão Bluetooth

Nossos celulares também têm acelerômetros — vamos enviar as leituras do nosso celular para o dispositivo Bluefruit via Bluetooth. Este programa é quase idêntico ao exercício de Bluetooth anterior, exceto que agora o dispositivo Bluefruit receberá pacotes do tipo AccelerometerPacket em vez de ColorPacket.

from adafruit_circuitplayground import cp

from adafruit_bluefruit_connect.packet import Packet
from adafruit_bluefruit_connect.accelerometer_packet import AccelerometerPacket

from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
from adafruit_ble.services.nordic import UARTService

ble = BLERadio()
uart_service = UARTService()
advertisement = ProvideServicesAdvertisement(uart_service)

while True:
    # Continue anunciando até que outro dispositivo se conecte
    ble.start_advertising(advertisement)
    while not ble.connected:
        pass
    ble.stop_advertising()

    # Continue ouvindo por pacotes enquanto estiver conectado
    while ble.connected:
        if uart_service.in_waiting:
            packet = Packet.from_stream(uart_service)
            if isinstance(packet, AccelerometerPacket):
                x, y, z = packet.x, packet.y, packet.z
                print((x, y, z))
                R = abs(int(10 * x))
                G = abs(int(10 * y))
                B = abs(int(10 * z))
                cp.pixels.fill((R, G, B))

Referências

Thanks! We hope you found what you are looking for. Please feel free to contribute via Github.