Общение Arduino с ПК через COM порт

Нет ответов
FuryaevStanislav
Offline
Зарегистрирован: 10.07.2014

Пишу проверку на подключение Arduino Mega2560 к компьютеру на C#. При нажатии на кнопку в программе, она получает список всех доступных COM портов и посылает на каждый запрос - строку "crfSPC". Arduino должна получить этот запрос и в ответ на него отправить согласие - "cfSPCa". Почему-то после того, как программа отправляет запрос и читает ответ, она зависает (на 32 строке).

Код программы:

//crfSPC    - Connection Request From Stanislav-PC
//cfSPCa    - Connection From Stanislav-PC Allowed

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Arduino
{
    public partial class Form1 : Form
    {
        private SerialPort  arduinoPort;

        public SerialPort SearchPort()
        {
            SerialPort __arduinoPort = new SerialPort();
            string[] __ports = SerialPort.GetPortNames();
            foreach (string __name in __ports)
            {
                __arduinoPort.PortName  = __name;
                __arduinoPort.BaudRate  = 9600;
                __arduinoPort.DtrEnable = true;
                __arduinoPort.Open();
                __arduinoPort.WriteLine("crfSPC");
                string DeviceAnswer = __arduinoPort.ReadLine();
                if (DeviceAnswer == "cfSPCa\r")
                {
                    __arduinoPort.Close();
                    return __arduinoPort;
                }
                __arduinoPort.Close();
            }

            return null;
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {
            arduinoPort = SearchPort();
            if (arduinoPort != null)
            {
                this.Text = "Arduino - Подключено к " + arduinoPort.PortName;
            }
            else
                this.Text = "Arduino - Нет подключения";
        }
    }
}

Код Arduino:

String serialReadLine(){
	String __line = "";
	while(Serial.available()){
		__line += (char)Serial.read();
	}
	return __line;
}

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

void    loop(){
	if(Serial.available()){
		if(serialReadLine() == "crfSPC")
			Serial.println("cfSPCa");
	}	
}