|
| 1 | +from adafruit_ble.uart_server import UARTServer |
| 2 | +from adafruit_bluefruit_connect.packet import Packet |
| 3 | +from adafruit_bluefruit_connect.button_packet import ButtonPacket |
| 4 | +from adafruit_bluefruit_connect.color_packet import ColorPacket |
| 5 | +from board import A0, D13 |
| 6 | +from analogio import AnalogIn |
| 7 | +from digitalio import DigitalInOut, Direction |
| 8 | +from time import sleep |
| 9 | + |
| 10 | +led = AnalogIn(A0) # Initialize blue LED light detector |
| 11 | + |
| 12 | +solenoid = DigitalInOut(D13) # Initialize solenoid |
| 13 | +solenoid.direction = Direction.OUTPUT |
| 14 | +solenoid.value = False |
| 15 | + |
| 16 | +uart_server = UARTServer() |
| 17 | + |
| 18 | +while True: |
| 19 | + uart_server.start_advertising() # Advertise when not connected. |
| 20 | + |
| 21 | + while not uart_server.connected: # Wait for connection |
| 22 | + pass |
| 23 | + |
| 24 | + while uart_server.connected: # Connected |
| 25 | + if uart_server.in_waiting: # Check BLE commands |
| 26 | + packet = Packet.from_stream(uart_server) |
| 27 | + if isinstance(packet, ButtonPacket): |
| 28 | + if packet.button == '1' and packet.pressed: |
| 29 | + solenoid.value = True # Activate solenoid for 1 second |
| 30 | + sleep(1) |
| 31 | + solenoid.value = False |
| 32 | + |
| 33 | + led_intensity = led.value # Check blue LED detector intensity |
| 34 | + led_on = led_intensity > 1000 |
| 35 | + # Color: red = off, green = on |
| 36 | + color_packet = ColorPacket((255 * int(not led_on), 255 * led_on, 0)) |
| 37 | + try: |
| 38 | + uart_server.write(color_packet.to_bytes()) # Transmit state color |
| 39 | + except OSError: |
| 40 | + pass |
| 41 | + |
| 42 | + sleep(.2) |
0 commit comments