簡體   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