我最近购买了Makey Makey(基于Arduino Leonardo / ATMega32u4),希望用一些金属零件构造一个完整的USB蒸汽朋克风格的键盘。在它到达之前,我重新阅读了细节,并意识到它只有18种可能的输入,因此85个以上的键将不起作用。有没有人知道我如何用Raspberry Pi制作这样的野兽?(与以前的帖子联系起来非常容易)
我最近购买了Makey Makey(基于Arduino Leonardo / ATMega32u4),希望用一些金属零件构造一个完整的USB蒸汽朋克风格的键盘。在它到达之前,我重新阅读了细节,并意识到它只有18种可能的输入,因此85个以上的键将不起作用。有没有人知道我如何用Raspberry Pi制作这样的野兽?(与以前的帖子联系起来非常容易)
Answers:
如果您只想制作一个键盘而不使用Makey Makey,则可以使用Raspberry Pi的GPIO功能来实现。但是像以前评论的那样,Raspberry Pi没有足够的可用引脚来制作实际上有用的键盘。
但是,如果您愿意添加2个IC,则可以使自己成为一个具有如此多按键的键盘,以至于每个按键都需要一个功能!
我的建议是将2个I2C IC连接到Raspberry Pi上的I2C总线,然后使用它们来创建自己的扫描矩阵。
如果使用一个PCF8574,则有8个I / O引脚可用;如果使用PCF8575,则甚至有16个I / O引脚可用。通过合并,您可以得到以下扫描矩阵:
您必须始终将它们之一用作输出,并将之一用作输入。在输出上,您可以从第0位“ n”行到第n位(7或15),这些是矩阵的列。另一方面,您不断读取输入的值,这些是矩阵的行。按下的键是有效的输出位和有效的输入位“ 1”的组合。
实际上创建矩阵是最有效的方法,当您在矩阵上时,不要忘了在矩阵中进行每次开关后都添加一个二极管,该二极管(正常的1N4148可以正常工作)需要与阳极一起放置到开关,阴极到行线。该二极管上的0.6V压降应该不是问题,其余(3.3V-0.6V)2.7V仍应为逻辑“ 1”。
之所以这样做,是因为它将防止鬼影和按键掩盖之类的事情。重影是一种效果,如果您同时按下三个以上的键,则可能会被解释为完全不同的键,因为更多行将具有逻辑“ 1”。屏蔽的效果是,如果您按下多个键并释放一个键,则在某些情况下将不会检测到该值,因为该键的行仍为逻辑“ 1”。
图中显示了重影的一个示例,按下了按钮A,B,D,除了第1行(对于按钮A)之外,第2行(对于按钮C)也很高,此时第1列处于活动状态,这是不正确的。
在经历了整个硬件冒险之后,您需要编写或改编内核驱动程序以在Linux下实际使用键盘。一个很好的起点可能是此链接:TCA6416 I2C IO扩展器上的按键驱动程序,这是类似的想法,但仅使用16键键盘。
希望这对您有所帮助。