C# .NET 5 断光束传感器 Raspberry PI

C# .NET 5 Break beam sensor Raspberry PI

我已经开始了一个项目,使用带有 Raspberry Pi 和 Visual Studio 代码的断光束传感器来对付生产线上的物体。我有一个可用的 python 脚本,但我需要在 C# 中执行。目前我的代码如下所示:

using System;
using System.Device.Gpio;
using System.Threading;

Console.WriteLine("Break Beam. Press Ctrl+C to end.");
int pin = 17;
using var controller = new GpioController();
controller.OpenPin(pin, PinMode.Output);
bool BeamBroke = true;
while (true)
{
   controller.Write(pin, ((BeamBroke) ? PinValue.High : PinValue.Low));
   Thread.Sleep(1000);
   BeamBroke = !BeamBroke;
}

问题是,当我 运行 这个控制台应用程序时,没有任何关于光束被破坏的信息。没有任何错误。

您需要打开一个输入引脚。

controller.OpenPin(pin, PinMode.Input);

您还需要注册一个在 pin 值更改时触发的回调。

void BeamBreakCallback(object sender, PinValueChangedEventArgs pinValueChangedEventArgs)
{
    BeamBroke = pinValueChangedEventArgs.ChangeType == PinEventTypes.Falling;
}

然后注册当输入引脚上的输入值发生变化时调用的回调。

controller.RegisterCallbackForPinValueChangedEvent(
    pin,
    PinEventTypes.Falling | PinEventTypes.Rising, // trigger on both rising and falling edges
    BeamBreakCallback
);

如果您想向控制台写入任何内容,您需要向回调中添加一些内容

void BeamBreakCallback(object sender, PinValueChangedEventArgs pinValueChangedEventArgs)
{
    BeamBroke = pinValueChangedEventArgs.ChangeType == PinEventTypes.Falling;

    if (pinValueChangedEventArgs.ChangeType == PinEventTypes.Falling)
        Console.WriteLine("beam broken");
    else
        Console.WriteLine("beam unbroken");
}

注意事项我对下降沿或上升沿是否代表断梁做了一些假设。