我最近购买了Makey Makey(基于Arduino Leonardo / ATMega32u4),希望用一些金属零件构造一个完整的USB蒸汽朋克风格的键盘。在它到达之前,我重新阅读了细节,并意识到它只有18种可能的输入,因此85个以上的键将不起作用。有谁知道我如何用Raspberry Pi创建这样的野兽? (与以前的帖子很容易实现联系)

评论

太棒了。

据我所知,RPi的输入少于arduino,因此可以使用矩阵并使用18个输入处理81个键(9x9矩阵)来代替每个键的输入,因此我认为这不会有所帮助。 br />
@Craig,所以您的意思是组合这样的输入:arduino.cc/playground/Main/KeypadTutorial

@sventech是的。我不熟悉makey makey,所以不知道其高阻开关将如何与矩阵相互作用。

#1 楼

如果您只想制作键盘而不使用Makey Makey,则可以使用Raspberry Pi的GPIO功能来实现。但是像以前评论的那样,Raspberry Pi没有足够的可用引脚来使键盘真正有用。我的建议是将2个I2C IC连接到Raspberry Pi上的I2C总线,然后使用它们来创建自己的扫描矩阵。

如果使用一个PCF8574,则有8个I / O引脚;如果使用PCF8575,则甚至有16个I / O引脚。通过组合,可以得到以下扫描矩阵:


64个键:(2x PCF8574)
128个键:(1x PCF8574和1x PCF8575)

您必须始终将其中之一用作输出,并将其中之一用作输入。在输出上,您可以从第0位到第n位(7或15)“行走”,这些是矩阵的列。另一方面,您不断读取输入的值,这些是矩阵的行。按下的键是有效的输出位和有效的输入位“ 1”的组合。



实际上创建矩阵的工作量最大,并且在使用该二极管时,请不要忘记在矩阵中的每个开关之后都添加一个二极管,该二极管(正常的1N4148可以正常工作)需要放置在开关的阳极和阴极的行上。该二极管上的0.6V压降应该不是问题,其余(3.3V-0.6V)2.7V仍应为逻辑'1'。


/>之所以这样做,是因为它将防止鬼影和按键掩盖之类的事情。重影是一种效果,如果您同时按下三个以上的键,则可能会解释为完全不同的键,因为更多行将具有逻辑“ 1”。屏蔽的作用是,如果您按下多个键并释放一个键,则在某些情况下将不会检测到该效果,因为该键的行仍为逻辑'1'。



图中显示了重影的一个示例,按下了按钮A,B,D,并且在第1列处于活动状态时,除了第1行(对于按钮A)以外,第2行(对于按钮C)也很高。 ,这是不正确的。

在经历了整个硬件冒险之后,您需要编写或改编内核驱动程序才能在Linux下实际使用键盘。一个很好的起点可能是此链接:TCA6416 I2C IO扩展器上的按键驱动程序,这是一个类似的想法,但是仅使用16键键盘。

希望这对您有所帮助。 >

#2 楼

如果您想使一个完整的键盘能够真正打开,最好将USB键盘上的IC断开。要么将PCB本身保留在系统中无法看到的深处,要么将导线连接到交换机,或者使用相同的矩阵制作定制的东西。

如果您真的需要更改电气矩阵,那么您可能需要从头开始进行自己的设计,但实际上并没有必要。

即使有了定制板,您仍然可以得到枚举并可以用作USB键盘的东西,而无需定制驱动程序。