IRemote библиотека

Тема в разделе "Arduino & Shields", создана пользователем Vladyka1701, 24 янв 2014.

  1. Vladyka1701

    Vladyka1701 Нерд

    Написал скрипт для зажигания лампочки с пульта.
    Код (Text):
    #include <IRremote.h>

    #define RIGHT_IR FFC23D;
    #define LEFT_IR FF02FD;

    int RIGHT = 47;
    int LEFT = 46;
    int ir_code = 0;
    int RECV_PIN = 44;

    IRrecv irrecv(RECV_PIN);
    decode_results results;

    void setup()
    {
      pinMode (RIGHT, OUTPUT);
      pinMode (LEFT, OUTPUT);
      Serial.begin(9600);
      irrecv.enableIRIn();
    }

    void loop()
    {
      if (irrecv.decode(&results)) {
      ir_code = results.value;
     
      if (ir_code == RIGHT_IR)
      {
        digitalWrite(RIGHT, HIGH);
      }
      else
      {
        digitalWrite(RIGHT, LOW);
      }
      }
    }  
    При компиляции выдаёт:
    sketch_jan24a.ino: In function 'void loop()':
    sketch_jan24a:27: error: 'FFC23D' was not declared in this scope
    sketch_jan24a:27: error: expected `)' before ';' token
    sketch_jan24a:27: error: expected primary-expression before ')' token
    sketch_jan24a:27: error: expected `;' before ')' token
    sketch_jan24a:31: error: expected `}' before 'else'
    sketch_jan24a.ino: At global scope:
    sketch_jan24a:36: error: expected declaration before '}' token
    Где ошибся, и что поменять на что?
     
  2. swell{d}

    swell{d} Нерд

    ir_code у вас интовый, а сравниваете его с непонятно чем.
     
  3. Vladyka1701

    Vladyka1701 Нерд

    Можно подробней?
     
  4. swell{d}

    swell{d} Нерд

    почитайте про типы данных тут: http://arduino.cc/en/Reference/HomePage
    int (integer) - это целое число от -32,768 до 32,767.
    вы пытаетесь его сравнивать с FFC23D - предположу, что это тоже число, но в шестнадцатиричной системе счисления. надо это как-то причесать
     
  5. Vladyka1701

    Vladyka1701 Нерд

    Как это можно сделать? Я толком нигде не нашел.
     
  6. NR55RU

    NR55RU Гик

    Компилятор в процессе сборки у вас просто подставляет в код вместо RIGHT_IR набор символов FFC23D
    В итоге для компилятора ваше условие:
    if (ir_code == RIGHT_IR)
    Выглядит как если бы вы его написали так:
    if (ir_code == FFC23D)
    И он рассматривает FFC23D как переменную которая разумеется не определена о чем он вам и говорит:
    sketch_jan24a:27: error: 'FFC23D' was not declared in this scope
    Я не знаком с библиотекой ИК, так что если честно не знаю что это за магические символы FFC23D, если это шестнадцатеричное число тогда записать надо было так:
    #define RIGHT_IR 0xFFC23D
    #define LEFT_IR 0xFF02FD
     
    Последнее редактирование: 25 янв 2014
  7. Vladyka1701

    Vladyka1701 Нерд

    Первая ошибка исправлена. Теперь
    sketch_jan25a.ino: In function 'void loop()':
    sketch_jan25a:27: error: expected `)' before ';' token
    sketch_jan25a:27: error: expected primary-expression before ')' token
    sketch_jan25a:27: error: expected `;' before ')' token
    sketch_jan25a:31: error: expected `}' before 'else'
    sketch_jan25a.ino: At global scope:
    sketch_jan25a:36: error: expected declaration before '}' token
    Ставил, где только можно скобки, точки ничего. Можно ли отредактировать код?
     
  8. geher

    geher Гуру

    Если я правильно подсчитал строки в коде (в выдаче есть номер строки с ошибкой), то в 27-й строке мешается символ "точка с запятой".
    Отсюда вопрос на засыпку. В определениях #define точки с запятой в конце 3-й и 4-й строк остались? Если да, то их надо убрать, поскольку они также подставляются вместе с константой вместо заданных имен.
     
  9. Vladyka1701

    Vladyka1701 Нерд

    Отлично! Ошибок нет, но лампочка не хочет гореть:confused:.Светодиод минусом подключен к минуcу, а плюсом к пину 47 через резистор, в чём проблема?
     
  10. swell{d}

    swell{d} Нерд

    надо ещё добавить
    irrecv.resume();
    вот так:
    void loop() {
    if (irrecv.decode(&results)) {
    ...
    irrecv.resume(); // Receive the next value
    }
    }

    у меня встречный вопрос к сообществу. irsend по умолчанию шлёт всё на D13, хотя во вводной инфе написано, что должен слать на D3 (у меня Yun, если что). как явно указать пин, на который слать?
     
  11. Vladyka1701

    Vladyka1701 Нерд

    Код (Text):
    [quote="swell{d}, post: 18966, member: 3879"]надо ещё добавить
    irrecv.resume();
    вот так:
    void loop() {
      if (irrecv.decode(&results)) {
        ...
        irrecv.resume(); // Receive the next value
      }
    }

    у меня встречный вопрос к сообществу. irsend по умолчанию шлёт всё на D13, хотя во вводной инфе написано, что должен слать на D3 (у меня Yun, если что). как явно указать пин, на который слать?[/quote]
    #include <IRremote.h>

    #define RIGHT_IR 0xFFC23D
    #define LEFT_IR 0xFF02FD

    int RIGHT = 47;
    int LEFT = 46;
    int ir_code = 0;
    int RECV_PIN = 44;

    IRrecv irrecv(RECV_PIN);
    decode_results results;

    void setup()
    {
      pinMode (RIGHT, OUTPUT);
      pinMode (LEFT, OUTPUT);
      Serial.begin(9600);
      irrecv.enableIRIn();
    }

    void loop()
    {
      if (irrecv.decode(&results)) {
      ir_code = results.value;

      if (ir_code == RIGHT_IR)
      {
        digitalWrite(RIGHT, HIGH);
      }
      irrecv.resume();
      }
    }  
    Ничего не происходит:confused:.
    В чём проблема? (else стёр специально, чтобы светодиод не вырубался.)
    Если нужно, кину фото схемы.
     
  12. Vladyka1701

    Vladyka1701 Нерд

    Всё, проблема решена! Не там вставил одну строчку.