Использование ИК-пульта с Arduino

Я хотел бы использовать ИК-пульт с Arduino для включения светодиода и выключения этого же светодиода при нажатии на пульт.

То есть:

  • Если я нажму на 1, я захочу, чтобы светодиод включился
  • Если я нажму на 2, я захочу, чтобы светодиод выключился

Вот мой код:

#include <IRremote.h>

const int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;

const int L1 = 13;

void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();
  irrecv.blink13(true);
  pinMode(L1, OUTPUT);
}

void loop(){
  if (irrecv.decode(&results)){
        unsigned int value = results.value;
        Serial.println(value);
        irrecv.resume();
        if(value == 12495){
        digitalWrite(L1, HIGH);
        delay(1000);
        } 
        else if(value == 6375){
        digitalWrite(L1, LOW);
        delay(1000);  
      }

  }
}

Но проблема в том, что когда я нажимаю кнопку 1, я вижу, как загорается светодиод, но затем он очень быстро гаснет, хотя я не нажимаю кнопку 2.

Не могли бы вы мне помочь?

, 👍1

Обсуждение

Не имеет отношения к делу; нет необходимости добавлять delay(1000); после включения/выключения светодиода., @Gerben


1 ответ


1

Эта строка вашего скетча irrecv.blink13(true); сообщает объекту IRrecv о необходимости мигать светодиодом при получении ИК-сигнала. В boarddefs.h в папке IRremote вывод 13 определен как BLINKLED по умолчанию. Код, который вы написали в loop(), пытается сделать что-то другое с тем же светодиодом. Я бы удалил эту строку irrecv.blink13(true);, а затем снова попробовал бы ваш скетч. Как только светодиод заработает правильно, попробуйте удалить обе эти строки delay(1000);.

,