C# последовательный порт не показывает вывод в текстовом поле
Привет всем, я довольно новичок в C# и Arduino. Когда я отправляю текст в мой Arduino, он не отправляет его обратно в текстовое поле в приложении. Я могу отправить его на свой Arduino, но я получаю сообщение об ошибке, когда отправляемое сообщение должно быть в текстовом поле приложения.
Вот часть, я получаю ошибку:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Output.Text = serialPort1.ReadExisting();
}
Вот мой код:
public partial class ArduinoSerial : Form
{
public ArduinoSerial()
{
InitializeComponent();
string[] serialPorts = System.IO.Ports.SerialPort.GetPortNames();
cboPorts.Items.AddRange(serialPorts);
cboBaud.Items.Add(2400);
cboBaud.Items.Add(4800);
cboBaud.Items.Add(9600);
cboBaud.Items.Add(14400);
cboBaud.Items.Add(19200);
cboBaud.Items.Add(28800);
cboBaud.Items.Add(38400);
cboBaud.Items.Add(57600);
cboBaud.Items.Add(115200);
cboPorts.SelectedIndex = 0;
cboBaud.SelectedIndex = 2;
}
private void cboPorts_SelectedIndexChanged(object sender, EventArgs e)
{
string[] serialPorts = System.IO.Ports.SerialPort.GetPortNames();
cboPorts.Items.AddRange(serialPorts);
}
private void cboBaud_SelectedIndexChanged(object sender, EventArgs e)
{
cboBaud.Items.Add(2400);
cboBaud.Items.Add(4800);
cboBaud.Items.Add(9600);
cboBaud.Items.Add(14400);
cboBaud.Items.Add(19200);
cboBaud.Items.Add(28800);
cboBaud.Items.Add(38400);
cboBaud.Items.Add(57600);
cboBaud.Items.Add(115200);
}
private void btnStart_Click(object sender, EventArgs e)
{
serialPort1.PortName = cboPorts.SelectedItem.ToString();
serialPort1.BaudRate = Convert.ToInt32(cboBaud.SelectedItem.ToString());
if (!serialPort1.IsOpen)
{
btnStart.Enabled = false;
btnStop.Enabled = true;
serialPort1.Open();
}
}
private void btnStop_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
btnStart.Enabled = true;
btnStop.Enabled = false;
serialPort1.Close();
}
}
private void btnSend_Click(object sender, EventArgs e)
{
if (!serialPort1.IsOpen) return;
serialPort1.Write(txtInput.Text + "\n");
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Output.Text = serialPort1.ReadExisting();
}
}
Мой файл Ино
/*
Name: LOOP_C.ino
Created: 9/8/2017 10:51:31 AM
Author: Jari
*/
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(9600);
}
// the loop function runs over and over again until power down or reset
void loop() {
while (Serial.available()) {
Serial.write(Serial.read());
}
}
Я уже пытаюсь более 2 часов, я нигде не могу найти ответ.
1 ответ
Попробуйте это, если вы столкнетесь с CrossThreadException:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
SetText(serialPort1.ReadExisting());
}
private void SetText(string text)
{
if (Output.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
Output.Text = text;
}
}
У меня нет компилятора, поэтому, возможно, вам нужно что-то исправить. Если так - извините