функция Serial.available()

Вопросы программирования в системе Ардуино
Геннадий
Сообщения: 4
Зарегистрирован: 04 фев 2018, 16:35

функция Serial.available()

Сообщение Геннадий » 06 фев 2018, 16:13

Здравствуйте!
1. Я использую для приема-передачи канал 1 (RX1, TX1) Ардуино Мега 2560.
2. В моей тестовой программе, когда на Ардуино поступает строка, он ее принимает и затем правильно передает, но после передачи строки продолжает передавать без остановки разную чушь. Получается, что как бы нет признака строки, хотя я вставлял разные коды признака. Код - #13, код - '\n', код - '\0'.
Код программы:
char b1;
int k = 1000;
int ZapPin = 8;
//----------------------------------------------------------------------
void setup() {
pinMode(ZapPin, OUTPUT); // приём - LOW, передача - HIGH
Serial1.begin(19200);
}
//----------------------------------------------------------------------
void loop() {
if (Serial1.available() > 0) {
delay(k);
k = 0;
b1 = (char) Serial1.read();
if (b1 != '\0') {
digitalWrite(ZapPin, HIGH);
Serial1.print("Kod = ");
delay(2);
Serial1.println(b1);
delay(2);
digitalWrite(ZapPin, LOW);
delay(10);
}
if (b1 == '\0') {
Serial1.println("Konec");
delay(2);
digitalWrite(ZapPin, LOW);
delay(10);
}
}
}

Вопрос: подскажите, что не правильно я сделал?


Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: функция Serial.available()

Сообщение Эдуард » 06 фев 2018, 22:14

Здравствуйте!
Я заменил Serial1 на Serial, '\0' на '\n'. Попробовал на Ардуино Nano. Все работает как положено:
4.PNG

Геннадий
Сообщения: 4
Зарегистрирован: 04 фев 2018, 16:35

Re: функция Serial.available()

Сообщение Геннадий » 07 фев 2018, 11:03

Конец строки я получаю и вывожу, но функция (Serial1.available() > 0) не становится равной нулю при чтении байтов командой Serial1.read(), а почему это происходит я не понимаю. К порту RX1-TX1 подключен конвертер
RS-485 TTL. Связь с компьютером происходит по RS-485.

Геннадий
Сообщения: 4
Зарегистрирован: 04 фев 2018, 16:35

Re: функция Serial.available()

Сообщение Геннадий » 12 фев 2018, 11:00

Здравствуйте !
Проблема решена.
Закоротил на конвертере RS-485 TTL контакты DE, RE и подал на них управлене: HIGH - передача, LOW - прием.


Вернуться в «Программирование Ардуино»

Кто сейчас на конференции

Сейчас этот форум просматривают: MailRu [Bot] и 3 гостя