如何解决尝试在 Orange Pi Zero 上使用 .Net Core 5 检测 GPIO 引脚的上升和下降引脚上升有时仅与引脚下降一起检测
我正在尝试检测 Orange Pi Zero(与 RaspBerry Pi 基本相同)的 GPIO 引脚的变化。它正在运行 Armbian Buster(即 Debian 10)
我创建了一个简单的 .Net Core 5 控制台应用程序,使用 .Net 的内置 System.Device.Gpio 库来检测:
public class GpioComms
{
GpioController _controller = new GpioController();
public GpioComms()
{
_controller.OpenPin(10,PinMode.Input);
_controller.RegisterCallbackForPinValueChangedEvent(10,PinEventTypes.Rising,onSignalPinRiseEvent);
_controller.RegisterCallbackForPinValueChangedEvent(10,PinEventTypes.Falling,onSignalPinFallEvent);
}
private void onSignalPinRiseEvent(object sender,PinValueChangedEventArgs args)
{
Console.WriteLine(DateTime.Now + " " + args.PinNumber + " pin up");
}
private void onSignalPinFallEvent(object sender,PinValueChangedEventArgs args)
{
Console.WriteLine(DateTime.Now + " " + args.PinNumber + " pin down");
}
}
然后我将一个按钮连接到 GPIO 引脚 10(Orange Pi Zero 上的物理引脚 26)并运行程序。当我按下按钮时,大约有一半的时间它会立即检测到这一点。当我松开按钮时,它总是立即检测到这一点。但大约有一半的时间,它没有检测到按下按钮,只有当我松开按钮时,onSignalPinRiseEvent 才会触发(与 onSignalPinFallEvent 事件一起)
也就是说,大约有一半的时间,按钮的按下(即GPIO引脚的上升)仅与按钮的释放(即GPIO引脚的下降)一起被检测到,而不是被检测到按下按钮时立即。
奇怪的是我包含了一个时间戳,而且大多数时候,即使我在释放前按住按钮 3 秒钟,上升和下降的时间戳是相同的(但并不总是 - 有有一些罕见的情况,即使上升和下降事件仅在我松开按钮时触发,显示的时间戳也相隔 3 秒)。
然后我尝试只注册一个事件处理程序用于上升和下降检测,而不是两个单独的处理程序:
_controller.RegisterCallbackForPinValueChangedEvent((int)Settings.GpioPin.Read,PinEventTypes.Rising | PinEventTypes.Falling,onSignalPinValueChangedEvent);
private void onSignalPinValueChangedEvent(object sender,PinValueChangedEventArgs args)
{
Console.WriteLine(DateTime.Now + " - Pin " + args.PinNumber + " is " + args.ChangeType);
}
但这没什么区别。
这是一个示例输出 - 我按下按钮大约 3 秒钟,然后松开大约 3 秒钟:
2/20/2021 9:36:25 AM - Pin 10 is Rising
2/20/2021 9:36:25 AM - Pin 10 is Falling
2/20/2021 9:36:31 AM - Pin 10 is Rising
2/20/2021 9:36:31 AM - Pin 10 is Falling
2/20/2021 9:36:37 AM - Pin 10 is Rising
2/20/2021 9:36:37 AM - Pin 10 is Falling
2/20/2021 9:36:40 AM - Pin 10 is Rising
2/20/2021 9:36:43 AM - Pin 10 is Falling
2/20/2021 9:36:49 AM - Pin 10 is Rising
2/20/2021 9:36:49 AM - Pin 10 is Falling
2/20/2021 9:36:52 AM - Pin 10 is Rising
2/20/2021 9:36:55 AM - Pin 10 is Falling
2/20/2021 9:37:01 AM - Pin 10 is Rising
2/20/2021 9:37:01 AM - Pin 10 is Falling
2/20/2021 9:37:07 AM - Pin 10 is Rising
2/20/2021 9:37:07 AM - Pin 10 is Falling
2/20/2021 9:37:10 AM - Pin 10 is Rising
2/20/2021 9:37:13 AM - Pin 10 is Falling
2/20/2021 9:37:16 AM - Pin 10 is Rising
2/20/2021 9:37:18 AM - Pin 10 is Falling
2/20/2021 9:37:22 AM - Pin 10 is Rising
2/20/2021 9:37:24 AM - Pin 10 is Falling
2/20/2021 9:37:30 AM - Pin 10 is Rising
2/20/2021 9:37:30 AM - Pin 10 is Falling
在上面,具有相同时间戳的对是问题对。那些是当我按下按钮时没有向控制台写入任何内容的那些,然后,三秒钟后当我释放按钮时,它同时用相同的时间戳写入了两行(上升和下降)。>
有什么想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。