Код ИК-пульта не активирует состояния ВКЛ/ВЫКЛ

Приведенный ниже код предназначен для включения/выключения RGB-подсветки. Соединения соответствуют номерам контактов. Я нашел результирующее значение кнопок пульта дистанционного управления, но когда я использовал их в коде, он не показывает ВКЛ/ВЫКЛ.

Я предполагаю, что могут быть некоторые практические ошибки. Как избежать таких ошибок?

#include <IRremote.h>

int RECV_PIN = 3;
int red = 13;
int blue = 12;
int green = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Запускаем приемник
  pinMode(red, OUTPUT);
  pinMode(blue, OUTPUT);
  pinMode(green, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    long int getting = results.value;
    Serial.println(getting);
  }
  switch (results.value) {
    case 16582903:
      digitalWrite(red, HIGH);
      digitalWrite(blue, LOW);
      digitalWrite(green, LOW);
      break;
    case 16615543:
      digitalWrite(red, LOW);
      digitalWrite(blue, HIGH);
      digitalWrite(green, LOW);
      break;
    case 16599223:
      digitalWrite(red, LOW);
      digitalWrite(blue, LOW);
      digitalWrite(green, HIGH);
      break;
    default:
      Serial.println("Enter ;");
  }
  irrecv.resume(); // Получаем следующее значение
  delay(100);
}

, 👍2

Обсуждение

Попробуйте переместить «переключатель» внутрь блока «если»., @Johnny Mopp


2 ответа


3

Предполагая, что вы правильно подключили, единственная ошибка, которую я заметил, заключается в том, что ваша переменная с именем «получение», используемая в переключателе, находится внутри if и должна быть как минимум на том же уровне переключателя. Кроме того, ваше резюме должно быть внутри if.

#include <IRremote.h>

int RECV_PIN = 3;
int green = 11;
int blue = 12;
int red = 13;

#define code1  16582903 // Должен точно соответствовать коду, сгенерированному ИК-кнопкой, например, 0xFF906F
#define code2  16615543
#define code3  16599223

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Запускаем приемник
  pinMode(red, OUTPUT);
  pinMode(blue, OUTPUT);
  pinMode(green, OUTPUT);
}

void loop() {
  if(irrecv.decode(&results)) {
    //это проверяет, был ли получен код
    Serial.println(results.value, HEX);
    unsigned int getting = results.value;
    Serial.println(getting);
    switch (getting) {
      case code1:
        digitalWrite(red, HIGH);
        digitalWrite(blue, LOW);
        digitalWrite(green, LOW);
        break;
      case code2:
        digitalWrite(red, LOW);
        digitalWrite(blue, HIGH);
        digitalWrite(green, LOW);
        break;
      case code3:
        digitalWrite(red, LOW);
        digitalWrite(blue, LOW);
        digitalWrite(green, HIGH);
        break;
      default:
        Serial.println("Enter ;");
    }
    irrecv.resume(); //получаем следующее значение
  }
  delay(100);
}
,

Спасибо за задержку(100); Я комбинировал ИК-пульт дистанционного управления с HC-SR04 и звуковой платой adafuit. Я получал случайный ввод при использовании ИК-пульта дистанционного управления. Добавление задержки решено (через 3 дня). Спасибо. Спасибо., @Andres

@Андрес, здорово! Отличная работа., @Andrew Paes


1

Я бы изменил "unsigned int Getting = Results.value;" на "беззнаковое длинное получение = results.value;" в скетче Эндрю и используйте его. Я не знаю, какой «тип» Arduino вы используете, но я знаю, что на Uno и других платах на базе ATMEGA беззнаковые целые числа дают полезный диапазон от 0 до 65 535. Unsigned long даст вам диапазон от 0 до 4 294 967 295.

Если нажать ЛЮБУЮ кнопку и удерживать ее некоторое время на некоторых ИК-пультах, будет отправлен код 4294967295. Это верно для пультов «Автомобиль»: https://www.amazon.ca/dp/B00SMI1GZA/ref= pe_386430_126088100_TE_item, пульт дистанционного управления Apple TV (2-го поколения) и пульт дистанционного управления телевизора LG 50 дюймов.

Одна небольшая проблема, которую я обнаружил с обоими скетчами, заключается в том, что я не мог их скомпилировать. Мне пришлось удалить пробел между "#" и "include" и пробелы между "<" и ">" в "# include < IRremote.h >". Я использую более старую версию IDE, которая может объяснить это. Ардуино УНО. IDE версии 1.0.6.2, GCC 4.2.1 на OSX 10.6.8.

,