Небольшие чудеса с if оператором, помогите.

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

  1. SAndrus

    SAndrus Нуб

    Доброго времени суток. Программирую arduino uno, использую последовательный порт в
    приведенном ниже фрагменте кода функция blinkCou(avByte, 50); мигает заданное в первом параметре
    число раз 2 выходом, далее по коду мигания выходами нигде нет, так вот при исполнении кода
    диод мигает 2 раза. Почему, помогите разобраться.
    Код (C++):
     
    avByte = 0;
      while (avByte <= 0) avByte = Serial.available();
      if (avByte == 1) {
        blinkCou(avByte, 50);
        if (Serial.read() == 255) {
          okProv = false;
          countPack = 0;
          Serial.write(255);
        }
        return;
      }
     
    Спасибо.
     
  2. AlexU

    AlexU Гуру

    Я так понимаю, что приведённый Вами код расположен в функции 'loop()'. Исходя из этого предположения получается следующее: Arduino UNO принимает последовательно два символа через Serial интерфейс, что приводит к миганию диода два раза.
    Каким образом отправляются данные в Serial интерфейс Arduino UNO?
     
  3. ostrov

    ostrov Гуру

    Serial.available() возвращает 1 если в порту появляются данные. Вероятно, приходит 2 байта вот он и мигает на каждый.
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Отправляете один символ из монитора порта, а к нему пристегивается символ конца строки.
    Похоже?
     
  5. Megakoteyka

    Megakoteyka Оракул Модератор

    Он возвращает не 1, а количество принятых байт. Если 2 байта придут до вызова Serial.available(), то вернется двойка и условие не сработает.
     
  6. ostrov

    ostrov Гуру

    Наверное, но я его всегда как триггер использую: есть-нет. Побайтно.
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    Это потому что не_ноль всегда равно true.
     
  8. SAndrus

    SAndrus Нуб

    Спасибо, сейчас проверю.
     
  9. ostrov

    ostrov Гуру

    Мне это и нужно.
     
  10. SAndrus

    SAndrus Нуб

    Спасибо всем,
    Теперь использую так, все работает.