Привет! Сегодня доработаем программу для обработки сигналов с ИК пульта. Подключим rgb светодиод к схеме и будем управлять Ардуино ДУ пультом.
Содержание
1 Для выполнения этого урока нам понадобятся
2 Принципиальная схема
3 Программа
4 Полный текст программы
5 Заключение
6 Где купить
7 Похожее
В прошлый раз мы делали обзор на приемник ик сигналов для Ардуино. В этом проекте мы будем его использовать, поэтому посмотрите тот пост, если пропустили.
Для выполнения этого урока нам понадобятся
- Ардуино UNO
- Макетная плата
- Перемычки
- IR модуль KY-022
- RGB светодиод
- 3 резистора 220 Ом
- Пульт ДУ
- Кабель USB
Принципиальная схема
Соберем схему с приемником ИК сигналов и RGB светодиодом.
Программа
А чтобы управлять светодиодом нам понадобиться доработать стандартную программу приема ИК сигнала.
Заведем нужные переменные для контактов rgb светодиода и для состояние каждого цвета. А так же, нам будет нужна переменная для сохранения состояние нажатой на пульте кнопки.
int RLED = 3;
int GLED = 5;
int BLED = 6;
int red = 0;
int green = 0;
int blue = 0;
int oldCode = 0;
В функции setup() настроим контакты на вывод
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(RLED, OUTPUT);
pinMode(GLED, OUTPUT);
pinMode(BLED, OUTPUT);
Serial.begin(115200);
IrReceiver.enableIRIn(); // Start the receiver
}
В функции loop() будем считывать сигналы от пульта. И передавать в нашу функцию принятое значение.
void loop() {
if (IrReceiver.decode()) {
Serial.println();
SetLED( IrReceiver.results.value );
IrReceiver.resume(); // Receive the next value
}
}
И теперь осталось написать функцию для обработки кодов.
Во-первых, выведем все коды, которые принимает модуль. Таким образом мы узнаем код, соответствующий нажатию каждой кнопки. Чтобы использовать его в программе.
Во-вторых, код -1 отвечает за повтор предыдущего кода. То есть, если нажать на кнопку и удерживать ее, то код будет -1. Нам понадобиться этот код, чтобы запрограммировать кнопки уменьшения и увеличения яркости на пульте.
Так же, в этом случае, нам нужно сохранить состояние нажатой кнопки до повтора, сохраним ее в конце функции в переменную oldCode.
И наконец, запрограммируем каждый код от пульта для включения своего цвета на RGB светодоиде.
Полный текст программы
#include <IRremote.h>
int RLED = 3;
int GLED = 5;
int BLED = 6;
int red = 0;
int green = 0;
int blue = 0;
int oldCode = 0;
#if defined(ESP32)
int IR_RECEIVE_PIN = 15;
#else
int IR_RECEIVE_PIN = 11;
#endif
IRrecv IrReceiver(IR_RECEIVE_PIN);
// On the Zero and others we switch explicitly to SerialUSB
#if defined(ARDUINO_ARCH_SAMD)
#define Serial SerialUSB
#endif
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(RLED, OUTPUT);
pinMode(GLED, OUTPUT);
pinMode(BLED, OUTPUT);
Serial.begin(115200);
#if defined(__AVR_ATmega32U4__) || defined(SERIAL_USB) || defined(SERIAL_PORT_USBVIRTUAL)
delay(2000); // To be able to connect Serial monitor after reset and before first printout
#endif
// Just to know which program is running on my Arduino
IrReceiver.enableIRIn(); // Start the receiver
}
void SetLED( int code ) {
Serial.print("CODE: \t");Serial.println(code);
switch (code) {
case -1:
SetLED(oldCode);
break;
case -16321:
red = 255; green = 255; blue = 255;
break;
case 16575:
red = 0; green = 0; blue = 0;
break;
case 8415:
red = 255; green = 0; blue = 0;
break;
case -24481:
red = 0; green = 255; blue = 0;
break;
case 24735:
red = 0; green = 0; blue = 255;
break;
case 10455:
red = 127; green = 127; blue = 0;
break;
case -22441:
red = 0; green = 127; blue = 127;
break;
case 26775:
red = 127; green = 0; blue = 127;
break;
case -32641:
red--;green--;blue--;
break;
case 255:
red++;green++;blue++;
break;
}
if( code != -1 ){oldCode = code;}
analogWrite(RLED, red = constrain(red, 0, 255));
analogWrite(GLED, green = constrain(green, 0, 255));
analogWrite(BLED, blue = constrain(blue, 0, 255));
Serial.print("RED: \t");Serial.println(red);
Serial.print("GREEN: \t");Serial.println(green);
Serial.print("BLUE: \t");Serial.println(blue);
}
void loop() {
if (IrReceiver.decode()) {
Serial.println();
SetLED( IrReceiver.results.value );
IrReceiver.resume(); // Receive the next value
}
}
Заключение
Таким образом мы написали программу для обработки ИК сигналов от пульта ДУ. Естественно, вместо rgb светодиода мы можем управлять любым другим оборудованием, с помощью управляющих сигналов от пульта. Хотя для света нужна прямая видимость между приемником и источником. Поэтому, возможно, использование беспроводной радио связи, например bluetooth, будет более предпочтительнее.
Спасибо, что дочитали статью до конца.
Пожалуйста, подписывайтесь на блог в яндекс дзен, ставьте лайки и пишите комментарии.
Посмотрите больше уроков и проектов на сайте arcadepub.ru
И подписывайтесь на соц. сети.
Спасибо за внимание, скоро увидимся.
Другие интересные статьи
Инфракрасный пульт для Ардуино
Ардуино. Урок 11. Включаем свет через интернет
Ардуино. Урок 10. Bluetooth модуль
Ардуино. Урок 9. Бумажное пианино