Использование инфракрасного детектора в системе

Довольно часто микроконтроллеры используются в больших системах. И для удобного управления всеми функциями можно пульт управления и инфракрасный сенсор. В данной системе мы будет управлять включением/выключением свотодида, регулировать его яркость, а также регулировать грумкость динамика. Поехали!

Что требуется:
1. Arduino UNO или любой другой аналог
2. Макетная плата
3. TSOP4836 - инфракрасный детектор
4. Светодиод
5. Зуммер

Первым шагом является подключение всех модулей. Светодиод подключаем к цифровому пину 6. Разъемы GND и VCC ИК-модуля и зуммера подключаем к рельсе земли и питания соответственно. Разъем IN зуммера подключаем к цифровому пину 9. Разъем D0 ИК-сенсора подключаем к цифровому пину 11. 
Далее представлена схема подключения.
 
Следующим шагом выполняем следующий код:

 

#include <IRremote.h>

int RECV_PIN = 11;
int stat = 0;
int brightness = 0;
int volume = 0;
int BUZZER = 9;
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
 Serial.begin(9600);
 irrecv.enableIRIn(); // Запуск приемника

 pinMode(6, OUTPUT); //настройка пина в режим выхода
 pinMode(BUZZER, OUTPUT); //настройка пина в режим выхода
}

void loop() {
 if (irrecv.decode(&results)) {
 Serial.println(results.value);

 if (results.value==0xFF30CF && stat==0) { //поменять на свой код
  brightness = 128;
  analogWrite(6,brightness); // включение светодиода
  stat = 1;
 } else{
  if (results.value==0xFF30CF && stat==1){ //поменять на свой код
   brightness = 0;
   analogWrite(6,brightness); //выключение светодиода
   stat = 0;
  }
 }

 //увеличение яркости светодиода
 if(results.value==0xFFA857){ //поменять на свой код
  brightness += 20;
  stat = 1;
  //задан верхний предел
  if(brightness > 255){
    brightness = 255; 
  }
  analogWrite(6,brightness);
 }

 //уменьшение яркости светодиода
 if(results.value==0xFFE01F){ //поменять на свой код
  brightness -= 20; 
  //задан нижний предел
  if(brightness <= 0){
    brightness = 0;
    stat = 0;
  }
  analogWrite(6,brightness);
 }

 //увеличение громкости звука
 if(results.value==0xFF02FD){ //поменять на свой код
  volume += 20;
  //задан верхний предел
  if(volume > 255){
   volume = 255; 
  }
  analogWrite(9, volume);
 }
  
  //уменьшение громкости
 if(results.value==0xFF22DD){
  volume -= 20;
  //задан нижний предел
  if(volume < 0){
   volume = 0; 
  }
  analogWrite(9, volume);
 }
  
 irrecv.resume(); // Получить следующее значение
 }
}