code.py
 1  # SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries
 2  # SPDX-License-Identifier: MIT
 3  
 4  import time
 5  import board
 6  import adafruit_lis3dh
 7  import simpleio
 8  import adafruit_ble
 9  from adafruit_ble.advertising import Advertisement
10  from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
11  from adafruit_ble.services.standard.hid import HIDService
12  from adafruit_hid.keyboard import Keyboard
13  from adafruit_hid.keycode import Keycode
14  
15  #  I2C setup
16  i2c = board.I2C()
17  lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c)
18  
19  #  range of LIS3DH
20  lis3dh.range = adafruit_lis3dh.RANGE_2_G
21  
22  #  BLE HID setup
23  hid = HIDService()
24  
25  advertisement = ProvideServicesAdvertisement(hid)
26  advertisement.appearance = 961
27  scan_response = Advertisement()
28  scan_response.complete_name = "CircuitPython HID"
29  
30  #  BLE instance
31  ble = adafruit_ble.BLERadio()
32  
33  #  keyboard HID setup
34  keyboard = Keyboard(hid.devices)
35  
36  #  BLE advertisement
37  if not ble.connected:
38      print("advertising")
39      ble.start_advertising(advertisement, scan_response)
40  else:
41      print("connected")
42      print(ble.connections)
43  
44  while True:
45      while not ble.connected:
46          pass
47  	#  while BLE connected
48      while ble.connected:
49          #  read LIS3DH
50          x, y, z = [
51              value / adafruit_lis3dh.STANDARD_GRAVITY for value in lis3dh.acceleration
52          ]
53          #  map Y coordinate of LIS3DH
54          mapped_y = simpleio.map_range(y, -1.1, 1.1, 0, 3)
55          #  convert mapped value to an integer
56          plane = int(mapped_y)
57  
58          #  if you're tilting down...
59          if plane == 0:
60              #  send R, glider moves right
61              keyboard.press(Keycode.R)
62              #  debug
63              #  print("right")
64          #  if there's no tilt...
65          if plane == 1:
66              #  release all keys, send nothing to glider
67              keyboard.release_all()
68              #  debug
69              #  print("none")
70          #  if you're tilting up...
71          if plane == 2:
72              #  send L, glider moves left
73              keyboard.press(Keycode.L)
74              #  debug
75              #  print("left")
76          time.sleep(0.01)
77      #  if BLE disconnects, begin advertising again
78      ble.start_advertising(advertisement)