【发布时间】: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