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;
                }
            }

У меня нет компилятора, поэтому, возможно, вам нужно что-то исправить. Если так - извините

Другие вопросы по тегам