К моей малине подключен цифровой акустический датчик.
Каждый раз, когда он обнаруживает звук, он устанавливает входной сигнал ВЫСОКИЙ. Но он, кажется, активен только в течение нескольких миллисекунд.
Как я могу продлить сигнал в моей программе, что он остается на 500 мс?
Это функциональность, которую я знаю из контроллеров ПЛК.
Диаграмма
Пуск: вход датчика
Q: длительный сигнал
![diagram](https://i.stack.imgur.com/oNLhd.png)
,
Вот мой подход с ответом Михаэля:
Но все-таки это не относится к 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();
}
}