首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Adafruit nrf52840循环程序

Adafruit nrf52840循环程序
EN

Stack Overflow用户
提问于 2021-03-24 17:14:53
回答 2查看 76关注 0票数 0

我正在使用Adafruit "BLE HID键盘按钮“教程:我想使用箭头在iPad上使用辅助功能->访问控制在窗口中导航,但一旦我连接到蓝牙,为五个按钮定义的字符就会以重复的顺序显示在我打开的任何文本字段中(浏览器,注意应用程序...etc。)。只有当我按下五个按钮中的任何一个按钮时,我如何才能停止这个重复的序列,以便使用这五个按钮?我在脚本中没有看到任何循环(我只是在摆弄编程)

代码语言:javascript
运行
复制
#This example acts as a BLE HID keyboard to peer devices.
#Attach five buttons with pullup resistors to Feather nRF52840
#each button will send a configurable keycode to mobile device or computer

  import time
  import board
  from digitalio import DigitalInOut, Direction

  import adafruit_ble
  from adafruit_ble.advertising import Advertisement
  from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
  from adafruit_ble.services.standard.hid import HIDService
  from adafruit_ble.services.standard.device_info import DeviceInfoService
  from adafruit_hid.keyboard import Keyboard
  from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
  from adafruit_hid.keycode import Keycode

  button_1 = DigitalInOut(board.D11)
  button_2 = DigitalInOut(board.D10)
  button_3 = DigitalInOut(board.D9)
  button_4 = DigitalInOut(board.D6)
  button_5 = DigitalInOut(board.D5)

  button_1.direction = Direction.INPUT
  button_2.direction = Direction.INPUT
  button_3.direction = Direction.INPUT
  button_4.direction = Direction.INPUT
  button_5.direction = Direction.INPUT

  hid = HIDService()

  device_info = DeviceInfoService(software_revision=adafruit_ble.__version__,
                                  manufacturer="Adafruit Industries")
  advertisement = ProvideServicesAdvertisement(hid)
  advertisement.appearance = 961
  scan_response = Advertisement()
  scan_response.complete_name = "CircuitPython HID"

  ble = adafruit_ble.BLERadio()
  if not ble.connected:
      print("advertising")
      ble.start_advertising(advertisement, scan_response)
  else:
      print("already connected")
      print(ble.connections)

  k = Keyboard(hid.devices)
  kl = KeyboardLayoutUS(k)
  while True:
      while not ble.connected:
          pass
      print("Start typing:")

      while ble.connected:
          if not button_1.value:  # pull up logic means button low when pressed
              k.send(Keycode.DOWN_ARROW)
              time.sleep(0.4)

          if not button_2.value:
              k.send(Keycode.LEFT_ARROW)
              time.sleep(0.4)

          if not button_3.value:
              k.send(Keycode.UP_ARROW)
              time.sleep(0.4)

          if not button_4.value:
              k.send(Keycode.RIGHT_ARROW)
              time.sleep(0.4)

          if not button_5.value:
              k.send(Keycode.ENTER)
              time.sleep(0.4)

      ble.start_advertising(advertisement)
EN

回答 2

Stack Overflow用户

发布于 2021-03-26 05:20:02

USB HID键盘要求您释放您所按下的任何键,否则主机将(通常)对它看到的最后按下的键执行“类型自动”重复。

尝试在每次按键后调用release_all()。更多信息在源代码中:

https://circuitpython.readthedocs.io/projects/hid/en/latest/_modules/adafruit_hid/keyboard.html#Keyboard.release_all

票数 0
EN

Stack Overflow用户

发布于 2021-03-27 21:35:10

阿佳

感谢您的回复。问题是,序列是在没有按任何键的情况下开始的。最后(感谢戴夫)将每个按钮的pull属性设置为digitalio.Pull.UP就成功了。但是,我将尝试使用您的解决方案,因为我认为它在以后的项目中肯定会很有用。

问候

菲利普

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66777919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档