Помогите разобраться с ИК плиз

Тема в разделе "Arduino & Shields", создана пользователем Lumin, 13 фев 2013.

  1. Lumin

    Lumin Нуб

    Недавно начал разбираться с ардуиной, т.е. новичок еще совсем. Вот возник вопрос:
    Есть вот такая конструкция:
    IMG069.jpg

    Есть вот такой скетч:

    #include <IRremote.h>
    int RECV_PIN = 11;
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    void setup()
    {
    Serial.begin(9600);
    irrecv.enableIRIn(); // Start the receiver
    }
    void loop() {
    if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
    }
    }

    Есть пульт, который пришел мне вместе с ардуиной, в общем после заливки скетча и включения монитора порта при нажатии кнопок получаю:

    0-FF6897
    1-FF30CF
    2-FF18E7
    3-FF7A85
    4-FF10EF
    5-FF38C7
    6-FF5AA5
    7-FF42BD
    8-FF4AB5
    9-FF52AD

    Ну и на другие кнопки другие сигналы соответственно, при долгом нажатии выдает FFFFFF вне зависимости от кнопки.

    Вопрос, как мне сделать так чтоб при получении сигнала с кнопки например 1, т.е. FF30CF мне включить лампочку, ну или сделать какое то действие. Понимаю что надо присвоить известные теперь мне значения каким-то переменным, и потом сравнивать полученные значения, но как сделатне догоняю.

    Надеюсь на помощь.
     
  2. Unixon

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

    Код (Text):

    switch (results.value)
    {
     case 0xff6897:
     {
      // turn lights on
      break;
     }
     case 0xff30cf:
     {
      // turn lights off
      break;
     }
     // etc
    }
     
  3. Lumin

    Lumin Нуб

    Долго не отвечал, времени не было, большое спасибо все заработало.

    Позвольте еще вопрос, у этого пульта сначала идет определенный сигнал, потом FFFFFF, как бы так сделать, чтоб например пока держишь кнопку свет горит, отпускаешь гаснет.

    на мониторе порта такое действие выглядит так:
    FF6897
    FFFFFF
    FFFFFF
    FFFFFF
    ...
     
  4. apomelov

    apomelov Нерд

    Можно запоминать последнее значение, отличное от FFFFFF, а FFFFFF трактовать как это записанное значение. Для того, чтобы по отсутствию сигнала выключаться, видимо, надо запоминать так же время последнего сигнала, а по прерыванию таймера сбрасывать состояние, если с момента последней команды прошло больше какого-то времени (например 50мс, ну или с какой скоростью пульт посылает сигналы?)