Windows 10 个物联网 Raspi 3 中断

Windows 10 iot Raspi 3 interrupt

每次霍尔传感器检测到磁铁但它不工作时,我都试图增加一个变量。我是这个领域的新手 windows iot c# with raspi 3.

所以我的代码看起来像:

public sealed partial class MainPage : Page
{


    private int count = 5;
    private const int SENSOR_PIN = 5; //SENSOR PIN
    private GpioPin sensorPin; 

    public MainPage()
    {

        this.InitializeComponent();
        InitGPIO(); 
    }


    private void InitGPIO()
    {
        var gpio = GpioController.GetDefault();

        if (gpio == null)
        {
            GpioStatus.Text = "No Gpio Pins!";
            return;
        }

        sensorPin = gpio.OpenPin(SENSOR_PIN);
        sensorPin.SetDriveMode(GpioPinDriveMode.Input);
        sensorPin.ValueChanged += sensorPin_ValueChanged;

        GpioStatus.Text = "GPIO pins initialized correctly.";

    }

    //INTERRUPT HANDLER
    private void sensorPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
    {
        // Increment 
        if (e.Edge == GpioPinEdge.FallingEdge)
        {
            count++;
        }
    }
} 

}

这里有一个简单的测试来缩小问题范围。

像这样连接 GPIO5 和 GPIO6:

这里我用GPIO6模拟霍尔传感器。每次单击按钮时,GPIO6 输出值都会改变。以下是您可以测试的代码示例,以查看是否可以触发 sensorPin_ValueChanged 处理程序。

public sealed partial class MainPage : Page
{
    private int count = 5;
    private const int SENSOR_PIN = 5; //SENSOR PIN
    private GpioPin sensorPin;

    private GpioPin OutputPin;
    private const int OPinNum = 6;

    public MainPage()
    {

        this.InitializeComponent();
        InitGPIO();
    }


    private void InitGPIO()
    {
        var gpio = GpioController.GetDefault();

        if (gpio == null)
        {
            GpioStatus.Text = "No Gpio Pins!";
            return;
        }

        sensorPin = gpio.OpenPin(SENSOR_PIN);
        sensorPin.SetDriveMode(GpioPinDriveMode.Input);
        sensorPin.ValueChanged += sensorPin_ValueChanged;

        GpioStatus.Text = "GPIO pins initialized correctly.";

        OutputPin = gpio.OpenPin(OPinNum);
        OutputPin.SetDriveMode(GpioPinDriveMode.Output);


    }

    //INTERRUPT HANDLER
    private void sensorPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
    {
        // Increment 
        if (e.Edge == GpioPinEdge.FallingEdge)
        {
            count++;
        }
    }

    // Simulate Hall Sensor
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        if(OutputPin.Read() == GpioPinValue.Low)
            OutputPin.Write( GpioPinValue.High);
        else
            OutputPin.Write(GpioPinValue.Low);
    }
}

XAML代码:

<StackPanel VerticalAlignment="Center" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <TextBlock Name="GpioStatus" />
    <Button Content="Change output value" Click="Button_Click"/>
</StackPanel>