From a774199262f694b59fe26ce41009bbc9f98b5a02 Mon Sep 17 00:00:00 2001 From: John Edgar Park Date: Tue, 5 Feb 2019 17:04:26 -0800 Subject: [PATCH 1/2] first commit of BLE Crickit Light Switch code --- .../ble_crickit_light_switch.py | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 BLE_Crickit_Light_Switch/ble_crickit_light_switch.py diff --git a/BLE_Crickit_Light_Switch/ble_crickit_light_switch.py b/BLE_Crickit_Light_Switch/ble_crickit_light_switch.py new file mode 100644 index 000000000..787ef1686 --- /dev/null +++ b/BLE_Crickit_Light_Switch/ble_crickit_light_switch.py @@ -0,0 +1,63 @@ +# BLE Crickit Light Switch +# Use with the Adafruit BlueFruit LE Connect app +# Works with CircuitPython 4.0.0-beta.1 and later +# running on an nRF52840 Feather board and Crickit FeatherWing +# micro servo, 3D printed switch actuator + +import board +import digitalio + +from adafruit_crickit import crickit +from adafruit_ble.uart import UARTServer + +from adafruit_bluefruit_connect.packet import Packet +# Only the packet classes that are imported will be known to Packet. +from adafruit_bluefruit_connect.button_packet import ButtonPacket + +# Prep the status LEDs on the Feather +blue_led = digitalio.DigitalInOut(board.BLUE_LED) +red_led = digitalio.DigitalInOut(board.RED_LED) +blue_led.direction = digitalio.Direction.OUTPUT +red_led.direction = digitalio.Direction.OUTPUT + +uart_server = UARTServer() + +UP_ANGLE = 180 +NEUTRAL_ANGLE = 120 +DOWN_ANGLE = 80 + +advertising_now = False +angle = NEUTRAL_ANGLE +crickit.servo_1.angle = NEUTRAL_ANGLE + +while True: + crickit.servo_1.angle = NEUTRAL_ANGLE + if not uart_server.connected: + if not advertising_now: + uart_server.start_advertising() + advertising_now = True + blue_led.value = False + continue + + # Connected, so no longer advertising. + advertising_now = False + blue_led.value = True + + if uart_server.in_waiting: + red_led.value = False + packet = Packet.from_stream(uart_server) + + if isinstance(packet, ButtonPacket): + if packet.pressed: + red_led.value = True + if packet.button == '5' and angle != UP_ANGLE: + # The Up button was pressed. + for a in range(angle, UP_ANGLE+1, 1): + crickit.servo_1.angle = a + angle = UP_ANGLE + + elif packet.button == '6' and angle != DOWN_ANGLE: + # The Down button was pressed. + for a in range(angle, DOWN_ANGLE-1, -1): + crickit.servo_1.angle = a + angle = DOWN_ANGLE From 192d61a289020f877acc1ca2b952d940b64f63d5 Mon Sep 17 00:00:00 2001 From: John Edgar Park Date: Tue, 5 Feb 2019 21:58:32 -0800 Subject: [PATCH 2/2] updated to use new descriptive button names --- BLE_Crickit_Light_Switch/ble_crickit_light_switch.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BLE_Crickit_Light_Switch/ble_crickit_light_switch.py b/BLE_Crickit_Light_Switch/ble_crickit_light_switch.py index 787ef1686..a17a72d10 100644 --- a/BLE_Crickit_Light_Switch/ble_crickit_light_switch.py +++ b/BLE_Crickit_Light_Switch/ble_crickit_light_switch.py @@ -50,13 +50,13 @@ while True: if isinstance(packet, ButtonPacket): if packet.pressed: red_led.value = True - if packet.button == '5' and angle != UP_ANGLE: + if packet.button == ButtonPacket.UP and angle != UP_ANGLE: # The Up button was pressed. for a in range(angle, UP_ANGLE+1, 1): crickit.servo_1.angle = a angle = UP_ANGLE - elif packet.button == '6' and angle != DOWN_ANGLE: + elif packet.button == ButtonPacket.DOWN and angle != DOWN_ANGLE: # The Down button was pressed. for a in range(angle, DOWN_ANGLE-1, -1): crickit.servo_1.angle = a