Код ИК-пульта не активирует состояния ВКЛ/ВЫКЛ
Приведенный ниже код предназначен для включения/выключения 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);
}
@PRATIK AHUJA , 👍2
Обсуждение2 ответа
Предполагая, что вы правильно подключили, единственная ошибка, которую я заметил, заключается в том, что ваша переменная с именем «получение», используемая в переключателе, находится внутри 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
Я бы изменил "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.
- Почему переменные PWM в этом фрагменте кода RC обрабатываются таким образом? Что такое магические числа?
- Использование VS1838B с Arduino
- Хочу создать Bluetooth audio control (увеличение/уменьшение громкости, воспроизведение, пауза и т.д.) для смартфона
- Радиочастотное дистанционное управление с использованием VirtualWire на ATtiny85, работающем на частоте 8 МГц на внутреннем генераторе
- Проблема с датчиком температуры и влажности DHT11
- Получение ошибки ets 8 января 2013,rst cause:4,boot mode(1,6) wdt reset
- Bluetooth-модуль HC-05 — команда INQ не работает
- Выводы прерываний Arduino Mega 2560 и отображение портов с помощью поворотного энкодера
Попробуйте переместить «переключатель» внутрь блока «если»., @Johnny Mopp