【问题标题】:Reading Serial Data读取串行数据
【发布时间】:2020-02-05 06:56:40
【问题描述】:

我正在尝试构建一个 WPF 应用程序,该应用程序将从 Arduino 接收串行数据。当用户转动编码器时,Arduino 将发送一个“1”,而 WPF 将接收这个并将音量调高 1 个滴答声。

public MainWindow()
    {
        InitializeComponent();

        string comPort = "COM6";
        SerialPort mySerialPort = SerialPortCommunications(comPort);
        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(OnDataRecieved);
        mySerialPort.Open();
        mySerialPort.DiscardInBuffer();

    }
private void OnDataRecieved(object sender, SerialDataReceivedEventArgs e)
    {
        var serialDevice = sender as SerialPort;
        string indata;
        indata = serialDevice.ReadExisting();
        MessageBox.Show(indata);
        MessageBox.Show("Fired");

    }
public SerialPort SerialPortCommunications(string comPort)
    {
        SerialPort mySerialPort = new SerialPort(comPort);
        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;
        //mySerialPort.DiscardNull = true;
        return mySerialPort;
    }

我遇到的问题是,除非 arduino 不断发送数据,否则我的事件将不会触发。这可以通过不断地从 arduino 发送 0 来解决,但是当我需要接收 1 来表示音量变化时,我无法整理输入缓冲区。我使用与上面相同的代码构建了一个控制台应用程序,该应用程序在存在问题的主程序中等待用户输入。 arduino 可以静音一个小时,当时间到时,发送的数据将显示在控制台上。理想情况下,在我的 WPF 中,通道将保持沉默,直到接收到信号更改的数据。

感谢您的帮助,谢谢。

【问题讨论】:

    标签: c# wpf arduino serial-port


    【解决方案1】:

    一种方法是等待接收数据并将其解析为 int,然后如果结果等于 1,则可以触发所需的函数

    private void OnDataRecieved(object sender, SerialDataReceivedEventArgs e)
        {
            var serialDevice = sender as SerialPort;
            var indata = serialDevice.ReadExisting();
            int DigitFromArduino = 0;
            if(int.TryParse(indata,out DigitFromArduino))
                if(DigitFromArduino == 1)
                {
                    // call your function to increase the volum
                }
        }
    

    【讨论】:

    • 感谢您的建议。我以这种方式处理过这个解码数据,但是事件本身没有触发的主要问题仍然存在。这意味着我从不打破这个逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多