Привет народ! Написал программку отправления чисел с пк на ардуино и обратно. void setup() { Serial.begin(115200); } void loop() { // put your main code here, to run repeatedly: if (Serial.available() ) { //если есть доступные данные // считываем байт long val = Serial.parseInt(); if ( val < 300) { DDRB = B01100000; //устанавливаем 12 и 11 пин на выход PORTB = B00000000; // 12 и 11 мин устанавливаем в нулевой уровень (с подтягивающим резистром) } if ( val >= 300){ if ( val < 600){ DDRB = B01000000; //устанавливаем 12 на выход и 11 пин на вход PORTB = B00000000; //установка 11 пина в z состояние (без подтягивающего резитора) а 12 пин в нулевое состояние (с подтягивающим резистором) } } if ( val >= 600){ if ( val <800){ DDRB = B00100000; //устанавливаем 12 на выход и 11 пин на вход PORTB = B00000000;// установка 12 пина в z состояние (без подтягивающего резитора) а 11 пин в нулевое состояние (с подтягивающим резистором) } } if(val >= 800){ DDRB = B00000000; //устанавливаем 12 на вход и 11 пин на вход PORTB = B00000000; // установка 12 и 11 пина в z состояние (без подтягивающего резистора) } Serial.println(val); } } Вот через терминалку отправляю число 20, в этой же терминалке высвечивается принятое число 20 , но потом следом приходит еще 0. Получается при каждой посылке обратно приходит отправленное число и второй раз принимается 0. Я не могу понять где ошибка у меня в коде. Помогите разобраться)
Вы отправляет число и следом перенос строки, скорее всего. А функция parseInt по таймауту возвращает 0.
Код (C++): if (Serial.available() ) { if (Serial.peek() >= '0' && Serial.peek() <= '9') { // проверяем, что пришедший символ это цифра // дальше все то же самое } else { // если не цифра, то обрабатываем тут. В вашем случае достаточно пропустить. Serial.read(); }