繁体   English   中英

尝试使用 Orange Pi Zero 上的 .Net Core 5 检测 GPIO 引脚的上升和下降。 引脚上升有时仅与引脚下降一起检测

[英]Trying to detect GPIO pin rise and falls using .Net Core 5 on Orange Pi Zero. Pin rise sometimes only detected together with Pin fall

我正在尝试检测 Orange Pi Zero 的 GPIO 引脚的变化(基本上与 Raspberry Pi 相同)。 它正在运行 Armbian Buster(即 Debian 10)

我使用.Net 的内置System.Device.Gpio库创建了一个简单的.Net Core 5 控制台应用程序来检测:

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);
}

但这并没有什么不同。

这是一个示例 output - 我按下按钮约 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

在上面,具有相同时间戳的对是有问题的对。 那些是当我按下按钮时没有写入控制台的那些,然后,三秒钟后,当我释放按钮时,它同时写了两行(上升和下降)具有相同的时间戳。

有任何想法吗?

我会尝试将 PinMode 设置为“PinMode.InputPullUp”,因为我在这方面取得了更好的成功

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM