Serial.println(val)

Тема в разделе "Arduino & Shields", создана пользователем arcon, 22 дек 2016.

  1. arcon

    arcon Нуб

    Привет народ! Написал программку отправления чисел с пк на ардуино и обратно.
    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. Я не могу понять где ошибка у меня в коде. Помогите разобраться)
     
  2. rkit

    rkit Гуру

    Вы отправляет число и следом перенос строки, скорее всего. А функция parseInt по таймауту возвращает 0.
     
  3. arcon

    arcon Нуб

    А не подскажете как правильно тогда данные считывать с ардуино?
     
  4. rkit

    rkit Гуру

    Код (C++):
    if (Serial.available() ) {
    if (Serial.peek() >= '0' && Serial.peek() <= '9') {   // проверяем, что пришедший символ это цифра
       // дальше все то же самое
    }
    else {
      // если не цифра, то обрабатываем тут. В вашем случае достаточно пропустить.
      Serial.read();
    }