IRremote обмен данными между ардуинами

Тема в разделе "Arduino & Shields", создана пользователем volk, 22 янв 2018.

  1. volk

    volk Нуб

    Всем привет!

    Есть две ардуины, на одной передатчик, на другой приемник. С передатчика пока нажата кнопка идет сигнал, с кодом 0x110, приемник его считывает и выводит значение переменной статуса.Как только сигнал пропадает или изменяется - переменная меняет свое значение. У меня почему то постоянно переменная равна 0.

    Передатчик работает, выдает такой код 0x84619D06. Проверял.

    Передатчик
    Код (C++):
    #include <IRremote.h>
    IRsend irsend;

    void setup()
    {
      Serial.begin(9600);
      irsend.enableIROut(38);
    }

    void loop()
    {
        irsend.sendNEC(110, 9);
        Serial.println("OK!");
        delay(500);
    }
    Приемник:
    Код (C++):
    #include <IRremote.h>

    int RECV_PIN = 11;

    IRrecv irrecv(RECV_PIN);

    decode_results results;

    void setup()
    {
      Serial.begin(9600);
      irrecv.enableIRIn();
    }

    int i = 0;
    volatile uint8_t flag = 0;

    #define S 0x84619D06

    void loop() {
      if (irrecv.decode(&results)) {
        Serial.println(results.value, HEX);
        switch (results.value) {
          case(S):
            i = 1;
            break;
          default:
            i = 0;
            break;
        }
        irrecv.resume();      
      }
      Serial.println(flag);
    }
     
  2. DIYMan

    DIYMan Guest

    Код (C++):
    irsend.sendNEC(110, 9);
    Вопрос: какой код здесь посылается?
    Код (C++):
    case(S):
    Второй вопрос: какой код здесь проверяется? И после этого вы хотите, чтобы переменная i меняла значение?
     
  3. volk

    volk Нуб

    Код принимается такой:
    Код (C++):
    #define S 0x84619D06
    Отправляется такой - 110:
    Код (C++):
    irsend.sendNEC(110, 9);
     
  4. DetSimen

    DetSimen Guest

    тоись, 0x84619D06 == 110?
     
    b707 нравится это.
  5. DIYMan

    DIYMan Guest

    И вас ничего не смущает? Не закрадывается сомнений, почему переменная i не меняет значения?
     
    b707 нравится это.
  6. volk

    volk Нуб

    Поменял, не работает.
     
  7. DIYMan

    DIYMan Guest

    Лампочку в коридоре поменяли? Поменяйте на другую, рабочую.

    Код где?
     
    b707 нравится это.
  8. b707

    b707 Гуру

    Чемпион по краткости
    Что поменял? На что поменял?
     
  9. volk

    volk Нуб

    Отправляю 0x110

    Код (C++):
    #include <IRremote.h>
    IRsend irsend;

    void setup()
    {
      Serial.begin(9600);
      irsend.enableIROut(38);
    }

    void loop()
    {
        irsend.sendNEC(110, 9);
        Serial.println("OK!");
        delay(500);
    }
    И сравниваю с этим значением

    Код (C++):
    #include <IRremote.h>

    int RECV_PIN = 11;

    IRrecv irrecv(RECV_PIN);

    decode_results results;

    void setup()
    {
      Serial.begin(9600);
      irrecv.enableIRIn();
    }

    int i = 0;
    volatile uint8_t flag = 0;

    #define S 0x110

    void loop() {
      if (irrecv.decode(&results)) {
        Serial.println(results.value, HEX);
        switch (results.value) {
          case(S):
            i = 1;
            break;
          default:
            i = 0;
            break;
        }
        irrecv.resume();    
      }
     
  10. DetSimen

    DetSimen Guest

    Ну, а в сериал что пишет? что реально принимаеца-то? Чо из тебя всё под пытками вытягивать приходится?
     
  11. DIYMan

    DIYMan Guest

    Обращаю внимание, что 110 и 0x110 - это разные числа. Вы отправляете 110, а сравниваете с 0x110, т.е., в десятичной системе - с 272.

    Ну самые основы же ж, блин.
     
    DetSimen нравится это.
  12. volk

    volk Нуб

    Отправляю 0х110, сравниваю с 272.
    Так же не работает условие if. Вывожу принятые данные в терминал - пишет большое число.
    Снимок.JPG
     
  13. DIYMan

    DIYMan Guest

    Ну так и сравнивайте с этим числом - в чём проблема-то?
     
  14. volk

    volk Нуб

    Проблема в том, что не работает.
     
  15. DIYMan

    DIYMan Guest

    Тогда забейте, раз не способны разобраться в простейшем сравнении двух чисел. У вас есть код, который пришёл (вы его выводите в Serial) - достаточно сравнить с ним:
    Код (C++):
    #include <IRremote.h>

    int RECV_PIN = 11;

    IRrecv irrecv(RECV_PIN);

    decode_results results;

    void setup()
    {
      Serial.begin(9600);
      irrecv.enableIRIn();
    }

    int i = 0;
    volatile uint8_t flag = 0;

    #define S 0x925426D3 //2454988499

    void loop() {
      if (irrecv.decode(&results)) {
        Serial.println(results.value, HEX);
        switch (results.value) {
          case(S):
            i = 1;
            break;
          default:
            i = 0;
            break;
        }
        irrecv.resume();    
      }
     
    volk нравится это.
  16. volk

    volk Нуб

    Благодарю. Извините что я тупой..