@Got_Oxidus
Учусь

Не открывается Serial на ардуино?

В arduino IDE, всё работает, а в моей программки нет. Светодиоды Tx и Rx не мигают.

Подключение Serial:
Структура
//Структура для передачи данных в поток
        public struct COMInfo
        {
            public readonly string Port;
            public readonly int Baud;
            public COMInfo(string port, int baud){ this.Port = port; this.Baud = baud; }
        }

Открытие потока и сам поток.
public void Create()
        {

            Thread Creator = new Thread(Conect); //Поток для создания Serial
            var TimeController = new System.Timers.Timer(2500.00); // Таймер для защиты от долгого создания
            //Событие, которое закрывает поток
            TimeController.Elapsed +=  delegate {if (Creator.IsAlive) Creator.IsBackground = false; };

            Creator.Start(Info);

            //Ожидание
            while (Creator.IsAlive) { }
            TimeController.Close();
                        
            if (Serial != null)
            {
                //Подписка на событие приёма данных
                Serial.DataReceived += Serial_DataReceived;

                Serial.WriteTimeout = 500;
                Serial.ReadTimeout = 500;
            }
        }


//Создание экземпляра, открытия Serial
        private void Conect(object info)
        { 
            //Получение данных о порте
            COMInfo cominfo = (COMInfo)info;
            int speed = cominfo.Baud;
            string port = cominfo.Port;
            lock (this)
            {
                try
                {
                    Serial = new SerialPort(port, speed);
                    Serial.Open();
                    Thread.Sleep(1000); //Ожидание, нужное для подключения к Serial
                    Serial.Write("Оpen");
                }
                catch(Exception e)
                {
                    //Вызов события при возникновении ошибки
                    if (CreatedExceptionEvent != null) CreatedExceptionEvent(this, e);
                    throw e;
                }
            }
        }


Реализация патерна MVC

Чтение:
Класс SerialReader (В нём же и создавался экземпляр)
//Эта строчка есть в потоке
//Serial.DataReceived += Serial_DataReceived;

private void Serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Thread.Sleep(500);
            if (InputData != null) InputData(this, Serial.ReadExisting());
        }

Presenter
private void Reader_InputData(object sender, string e)
        {
            MainForm.AddText(e);
        }

MainForm
public void AddText(string text) => tbSerial.Text = text;
  • Вопрос задан
  • 372 просмотра
Пригласить эксперта
Ответы на вопрос 2
A1ejandro
@A1ejandro
youtube блогер, ИТ-специалист
Какая хоть ардуина написал бы....
Ответ написан
@papkinv
Почему бы для начала не попробовать простой вариант подключения из C#? Без всякой многопоточности.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы