Замораживание портов ввода-вывода в цикле в C # с использованием Arduino Uno - PullRequest
0 голосов
/ 05 ноября 2019

В моей программе я использую wpf и arduino uno. Я должен создать программу, которая воспроизводит звук с увеличивающейся громкостью, но когда я нажимаю кнопку на контактной пластине, которая подключена к Arduino, звук должен остановиться. Для воспроизведения звука я использую библиотеку NAudio. Вход кнопки подключен к 5В, выход подключен к цифровому входу 2 в Arduino, а также к входу диода. Выход диода подключен к GND. Моя проблема в том, что, когда работает цикл, я не могу как будто получать данные от Arduino. Когда я нажимаю кнопку до начала цикла, все в порядке. Ниже код от visual studio и arduino.

public partial class MainWindow : Window
{
    public string data;
    SerialPort port = new SerialPort();
    public MainWindow()
    {
        InitializeComponent();
        port.BaudRate = 9600;
        port.PortName = "COM4";
        port.DtrEnable = true;
        port.RtsEnable = true;
    }

    private async void Button_Click(object sender, RoutedEventArgs e)
    {


        port.Open();
        float volume = 0.000001f;
        string filename = "1.mp3";
        string source = System.IO.Path.Combine(Environment.CurrentDirectory, @"Sound\", filename);
        var reader = new Mp3FileReader(source);
        var waveOut = new WaveOut(); // or WaveOutEvent()
        waveOut.Init(reader);
        waveOut.Play();
        waveOut.Volume = (float)volume;

        try
        {
            for (; ; )
            {                   
                volume += 0.1f;
                data = port.ReadLine();
                if (data == "1\r")
                {
                    break;
                }
                waveOut.Volume = volume;
                await Task.Delay(3000);
            }
            waveOut.Stop();
        }
        catch
        {
            MessageBox.Show("it's end");
        }          
        port.Close();
    }
}

Arduino:

    void setup() 
{
  Serial.begin(9600); 
}

void loop() 
{
int sensorD = digitalRead(2);
Serial.println(sensorD);
delay(100);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...