我正在使用Adafruit "BLE HID键盘按钮“教程:我想使用箭头在iPad上使用辅助功能->访问控制在窗口中导航,但一旦我连接到蓝牙,为五个按钮定义的字符就会以重复的顺序显示在我打开的任何文本字段中(浏览器,注意应用程序...etc。)。只有当我按下五个按钮中的任何一个按钮时,我如何才能停止这个重复的序列,以便使用这五个按钮?我在脚本中没有看到任何循环(我只是在摆弄编程)
#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)发布于 2021-03-26 05:20:02
USB HID键盘要求您释放您所按下的任何键,否则主机将(通常)对它看到的最后按下的键执行“类型自动”重复。
尝试在每次按键后调用release_all()。更多信息在源代码中:
发布于 2021-03-27 21:35:10
阿佳
感谢您的回复。问题是,序列是在没有按任何键的情况下开始的。最后(感谢戴夫)将每个按钮的pull属性设置为digitalio.Pull.UP就成功了。但是,我将尝试使用您的解决方案,因为我认为它在以后的项目中肯定会很有用。
问候
菲利普
https://stackoverflow.com/questions/66777919
复制相似问题