总结
树莓派 Pico 的宏键盘。使用 6 个按键和一个旋转编码器模块。我没有 Github 账号,所以代码可在下方找到,已去除注释,可能需要重构,因为这只是一个周末项目。命令是硬编码的,您应该能根据代码和帖子打印标签中的布线图推断出布线方式。最终组装时,可以采用压入式安装,或使用 4 个带防松螺母的 M2x19 螺栓进行固定。
导入电路板模块
导入 DigitalIO 库。
导入 time 模块
导入 usb_hid 模块
导入 adafruit_hid.keyboard 模块中的 Keyboard 类。
来自 adafruit_hid.keycode 模块的 Keycode 类。
导入 RotaryIO 库
导入电路板模块
键盘 = 键盘类(来自 usb_hid.devices 模块)
key1 = digitalio.DigitalInOut(board.GP2)
key1.switch_to_input(pull=digitalio.Pull.DOWN)
key2 = digitalio.DigitalInOut(board.GP3)
关键2.切换到输入模式(拉低引脚),使用的引脚为 digitalio 模块中的 PULL_DOWN 模式。
key3 = digitalio.DigitalInOut(board.GP4)
关键3.切换到输入模式(拉低引脚),引脚状态设为数字输入的下拉状态
key4 = digitalio.DigitalInOut(board.GP5)
关键4.切换至输入模式(拉低引脚),使用的引脚为 digitalio 模块中的 PULL_DOWN 模式。
key5 = digitalio.DigitalInOut(board.GP6)
key5.switch_to_input(pull=digitalio.Pull.DOWN)
key6 = digitalio.DigitalInOut(board.GP7)
key6.switch_to_input(pull=digitalio.Pull.DOWN)
rotK = digitalio.DigitalInOut(board.GP22)
rotK.switch_to_input(pull=digitalio.Pull.UP)
点击了 = 真
按下按钮 = 假
编码器 = rotaryio.IncrementalEncoder(板子上的GP26引脚,GP27引脚)
最后一个位置 = 无
只要条件成立,就一直循环执行下面的代码块。
若 (key1.value 不是空且 key2.value 不是空且 key3.value 不是空且 key4.value 不是空且 key5.value 不是空且 key6.value 不是空) 且 pressed 不为真:
若 key1.value 为真:
键盘.按下(键码.左移)
键盘.按下(键码.窗口键)
键盘.按键(键码.S)
键盘.释放(键码.S)
键盘.释放(键码.WINDOWS)
键盘.释放(键码.左移)
若 key2.value 的值不为空:
键盘.按下(键码.窗口键)
时间.睡眠(0.1)
键盘.按键(键码.S)
时间.睡眠(0.1)
键盘.释放(键码.S)
时间.睡眠(0.1)
键盘.释放(键码.WINDOWS)
时间.睡眠(0.1)
键盘.按下(P键)
时间.睡眠(0.1)
键盘.释放(键码.P)
时间.睡眠(0.1)
键盘.按下(键码.O)
时间.睡眠(0.1)
键盘.释放(键码.O)
时间.睡眠(0.1)
键盘.按下(键码.W)
时间.睡眠(0.1)
键盘.释放(键码.W)
时间.睡眠(0.1)
键盘.按下(键码.回车键)
时间.睡眠(0.1)
键盘.释放(键码.回车键)
若 key3.value 为真:
键盘.按下(键码.窗口键)
时间.睡眠(0.1)
键盘.按键(键码.S)
时间.睡眠(0.1)
键盘.释放(键码.S)
时间.睡眠(0.1)
键盘.释放(键码.WINDOWS)
时间.睡眠(0.1)
键盘.按键(键码T)
时间.睡眠(0.1)
键盘.释放(键码.T)
时间.睡眠(0.1)
键盘.按键(键码.I)
时间.睡眠(0.1)
键盘.释放(键码.I)
时间.睡眠(0.1)
键盘.按下(键码.N)
时间.睡眠(0.1)
键盘.释放(键码.N)
时间.睡眠(0.1)
键盘.按下(键码.回车键)
时间.睡眠(0.1)
键盘.释放(键码.回车键)
若 key4.value 的值不为空:
键盘.按下(键码.窗口键)
时间.睡眠(0.1)
键盘.按键(键码.E)
时间.睡眠(0.1)
键盘.释放(键码.E)
时间.睡眠(0.1)
键盘.释放(键码.WINDOWS)
若 key5.value 不为空:
键盘.按下(键码.窗口键)
时间.睡眠(0.1)
键盘.按键(键码.S)
时间.睡眠(0.1)
键盘.释放(键码.S)
时间.睡眠(0.1)
键盘.释放(键码.WINDOWS)
时间.睡眠(0.1)
键盘.按下(C键码)
时间.睡眠(0.1)
键盘.释放(键码.C)
时间.睡眠(0.1)
键盘.按下(键码.U)
时间.睡眠(0.1)
键盘.释放(键码.U)
时间.睡眠(0.1)
键盘.按下(键码.R)
时间.睡眠(0.1)
键盘.释放(键码.R)
时间.睡眠(0.1)
键盘.按下(键码.回车键)
时间.睡眠(0.1)
键盘.释放(键码.回车键)
if key6.value:
键盘.按下(键码.窗口键)
时间.睡眠(0.1)
键盘.按键(键码.S)
时间.睡眠(0.1)
键盘.释放(键码.S)
时间.睡眠(0.1)
键盘.释放(键码.WINDOWS)
时间.睡眠(0.1)
键盘.按键(键码T)
时间.睡眠(0.1)
键盘.释放(键码.T)
时间.睡眠(0.1)
键盘.按键(键码:H)
时间.睡眠(0.1)
键盘.释放(键码.H)
时间.睡眠(0.1)
键盘.按下(键码.O)
时间.睡眠(0.1)
键盘.释放(键码.O)
时间.睡眠(0.1)
键盘.按下(键码.回车键)
时间.睡眠(0.1)
键盘.释放(键码.回车键)
按下按钮 = 真
打印 "向下"
若 key1.value 为假、key2.value 为假、key3.value 为假、key4.value 为假、key5.value 为假、key6.value 为假,且按键被按下:
按下按钮 = 假
打印 "向上"
若(rotK的值)不等于0,且用户点击了按钮:
点击了 = 假
键盘.按下(键码.左边的ALT键)
打印 "向下"
若 rotK.value 为真且用户未点击按钮:
点击了 = 真
键盘.释放(键码.左边的ALT键)
打印 "向上"
位置 = 编码器的位置
若 last_position 为 None 或者 position 不等于 last_position:
若未点击:
若当前位置大于上次位置:
键盘.按键(键码.TAB)
键盘.释放(键码.TAB)
若当前位置小于上次位置:
键盘.按下(键码.左移)
键盘.按键(键码.TAB)
键盘.释放(键码.TAB)
键盘.释放(键码.左移)
若用户点击了该按钮,且 last_position 变量不为空:
若当前位置大于上次位置:
键盘.按键(键码.TAB)
键盘.释放(键码.TAB)
若当前位置小于上次位置:
键盘.按下(键码.左移)
键盘.按键(键码.TAB)
键盘.释放(键码.TAB)
键盘.释放(键码.左移)
最后的位置 = 当前位置
打印设置
打印机品牌:
极创智造
打印机:
终结者 3
木筏:
不要
支持者:
不要
分辨率:
200
填充部分:
38岁
印后加工
32924836
32924837
32924838
32924840
Fuente del modelo
