![](/img/trans.png)
[英].Net Core seems to max out reading GPIO pin at about 1000 / second. How to go faster?
[英]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.