树莓派+PCF8574驱动4x4矩阵键盘:单次按键触发多事件的问题及替代方案咨询
树莓派+PCF8574驱动4x4矩阵键盘:单次按键触发多事件的问题及替代方案咨询
我最近在尝试用PCF8574 I2C扩展板驱动4x4矩阵键盘,但遇到了一个头疼的问题——每次按键都会触发多次无关的事件,操作起来特别不实用。有没有大佬遇到过类似问题?或者有没有其他合适的扩展芯片可以替代?先谢过大家了!
我的实现代码
var settings = new System.Device.I2c.I2cConnectionSettings(1, Convert.ToInt32(_appSettings.KeyPad.i2cAddress, 16)); var i2cDevice = System.Device.I2c.I2cDevice.Create(settings); var pcf8574 = new Iot.Device.Pcx857x.Pcf8574(i2cDevice); GpioController gpio = new GpioController(PinNumberingScheme.Logical, pcf8574); IEnumerable<int> outputs = new int[] { 0, 1, 2, 3 }; IEnumerable<int> inputs = new int[] { 4, 5, 6, 7 }; KeyMatrix keyMatrix = new KeyMatrix(outputs, inputs, TimeSpan.FromMilliseconds(10), gpio, true); keyMatrix.KeyEvent += KeyMatrixEventReceived; keyMatrix.StartListeningKeyEvent(); void ShowKeyMatrixEvent(KeyMatrix sender, KeyMatrixEvent pinValueChangedEventArgs) { Console.WriteLine($"{DateTime.Now:yyyy/MM/dd HH:mm:ss.fff} {pinValueChangedEventArgs.Output}, {pinValueChangedEventArgs.Input}, {pinValueChangedEventArgs.EventType}"); Console.WriteLine(); }
异常现象
按一次键再松开,我会得到3个独立的事件,对应每一个未被选中的行。比如按住键1不松手,会收到3组Falling和Rising事件,每组对应一个无关行:
2023-11-21 19:53:37.3807|0|INFO|ShowKeyMatrixEvent|2023/11/21 19:53:37.380 2, 0, Falling 2023-11-21 19:53:37.7867|0|INFO|ShowKeyMatrixEvent|2023/11/21 19:53:37.786 3, 0, Falling 2023-11-21 19:53:38.3961|0|INFO|ShowKeyMatrixEvent|2023/11/21 19:53:38.396 1, 0, Falling 2023-11-21 19:53:39.6118|0|INFO|ShowKeyMatrixEvent|2023/11/21 19:53:39.611 2, 0, Rising 2023-11-21 19:53:40.0168|0|INFO|ShowKeyMatrixEvent|2023/11/21 19:53:40.016 3, 0, Rising 2023-11-21 19:53:40.6245|0|INFO|ShowKeyMatrixEvent|2023/11/21 19:53:40.624 1, 0, Rising
如果我增大延迟时间,又怕漏检真实的按键事件,这显然不是理想的解决方案。我本来期望能直接获取到被按下的单个按键,不用自己通过排除法去筛选。
备注:内容来源于stack exchange,提问作者peppeantonini
相关产品推荐
相关产品推荐

