GPIO 输入的延长脉冲 C# UWP

prolonged impulse for GPIO input C# UWP

我的树莓派连接了一个数字声学传感器。
每次检测到声音时,它都会将输入设置为高电平。 但它似乎只激活了几毫秒。
我怎样才能延长我程序中的信号,它会保持 500 毫秒?
这是我从 PLC 控制器中了解到的功能。


开始:传感器输入
问:信号延长


,

这里是我对 Michael 的回答的处理方法:
但是,它仍然不适用于 Task.Delay。它直接熄灭。

    public MainPage()
    {
        this.InitializeComponent();
        GPIOinit();
        Serial();
    }


    private void GPIOinit()
    {
        const int PIN_AKUSTIK = 19;

        GpioController gpio = GpioController.GetDefault();  //GPIO-Controller mit Default belegen
        pin_akustik = gpio.OpenPin(PIN_AKUSTIK);
    }


    public async void Serial() 
    {
      //serial configuration

        while (true)
        {
            //frequency of constant while loop 300ms
            Sensor_Akustik();
        }
    } 




    public void Sensor_Akustik()
    {
        pin_akustik.ValueChanged += Pin_ValueChanged;
        pin_akustik.SetDriveMode(GpioPinDriveMode.Input);

         status_akustik = pin_akustik.Read().ToString();
        textblock_DebugAkustik_live.Text = status_akustik;
        Messenger.Default.Send<string, Page_Akustik>(status_akustik);
    }

    private void Pin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args)
    {
        if (args.Edge == GpioPinEdge.RisingEdge)
        {
            sender.Write(GpioPinValue.High);

            Task.Delay(3000).Wait();
        }
    }

您可以参考以下代码。如果引脚配置为输入,您可以尝试更新引脚的锁存输出值。

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

        // Show an error if there is no GPIO controller
        if (gpio == null)
        {
            pin = null;
            GpioStatus.Text = "There is no GPIO controller on this device.";
            return;
        }

        pin = gpio.OpenPin(LED_PIN);
        pin.ValueChanged += Pin_ValueChanged;
        pin.SetDriveMode(GpioPinDriveMode.Input);

    }


    private void Pin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args)
    {
        if(args.Edge == GpioPinEdge.RisingEdge)
        {
            sender.Write(GpioPinValue.High);
            Task.Delay(500).Wait();
        }
    }