/******************************************************************************* * * I13 - Usando o controle remoto IR com leds * Autor: Angelo Luis Ferreira * 29/07/2021 * http://squids.com.br/arduino * *******************************************************************************/ // inclui bibliotecas #include #include "control.h" // controle remoto - cria objeto e variável resultado IRrecv receptor(2); // pino 2 do Arduino decode_results resultado; //declaração variável resultado // conexões leds pinos Arduino const byte led[] = {8,9,10,11,12,13}; // variáveis leds (1 - ligado ou 0 - desligado); boolean onOff[] = {0,0,0,0,0,0}; // variável espera (delay) int espera = 800; // 800 milissegundos void setup() { // inicialização Serial.begin(9600); receptor.enableIRIn(); // define pinMode leds (saída do Arduino) for (byte i=0;i<6;i++) { pinMode(led[i], OUTPUT); } // acende todos leds allLedsOn(); delay(espera); // apaga todos leds allLedsOff(); } void loop() { // menu controle remoto if (receptor.decode(&resultado)) { switch (resultado.value) { case (tk1): Serial.println("Tecla 1"); ledOnOff(0); break; case (tk2): Serial.println("Tecla 2"); ledOnOff(1); break; case (tk3): Serial.println("Tecla 3"); ledOnOff(2); break; case (tk4): Serial.println("Tecla 4"); ledOnOff(3); break; case (tk5): Serial.println("Tecla 5"); ledOnOff(4); break; case (tk6): Serial.println("Tecla 6"); ledOnOff(5); break; case (tk7): Serial.println("Tecla 7"); doubleLedsOnOff(0,1); break; case (tk8): Serial.println("Tecla 8"); doubleLedsOnOff(2,3); break; case (tk9): Serial.println("Tecla 9"); doubleLedsOnOff(4,5); break; case (tk0): Serial.println("Tecla 0"); allLedsOff(); break; case (tk_ast): Serial.println("Tecla *"); threeLedsOnOff(0,1,2); break; case (tk_hash): Serial.println("Tecla #"); threeLedsOnOff(3,4,5); break; case (tk_up): Serial.println("Tecla seta para cima"); threeBlinkLeds(0,1,2); break; case (tk_left): Serial.println("Tecla seta esquerda"); rightLeftLeds(5); break; case (tk_right): Serial.println("Tecla seta direita"); rightLeftLeds(0); break; case (tk_ok): Serial.println("Tecla OK"); allLedsOn(); break; case (tk_down): Serial.println("Tecla para baixo"); threeBlinkLeds(3,4,5); break; } receptor.resume(); } delay(100); } // função para acender/apagar led único void ledOnOff(byte index) { onOff[index] = !onOff[index]; digitalWrite(led[index], onOff[index]); } // função para acender/apagar 2 leds únicos void doubleLedsOnOff(byte index1, byte index2) { if (!digitalRead(led[index1]) || !digitalRead(led[index2])) { onOff[index1] = 1; onOff[index2] = 1; } else { onOff[index1] = 0; onOff[index2] = 0; } digitalWrite(led[index1], onOff[index1]); digitalWrite(led[index2], onOff[index2]); } // função para acender/apagar 3 leds únicos void threeLedsOnOff(byte index1, byte index2, byte index3) { if (!digitalRead(led[index1]) || !digitalRead(led[index2]) || !digitalRead(led[index2])) { onOff[index1] = 1; onOff[index2] = 1; onOff[index3] = 1; } else { onOff[index1] = 0; onOff[index2] = 0; onOff[index3] = 0; } digitalWrite(led[index1], onOff[index1]); digitalWrite(led[index2], onOff[index2]); digitalWrite(led[index3], onOff[index3]); } // função acender todos leds void allLedsOn() { for (byte i=0; i<6; i++) { onOff[i] = 1; digitalWrite(led[i], HIGH); } } // função apagar todos leds void allLedsOff() { for (byte i=0; i<6; i++) { onOff[i] = 0; digitalWrite(led[i], LOW); } } // função sequência right ou left void rightLeftLeds(const byte j) { allLedsOff(); delay(espera); for (byte i=0;i<=6;i++) { onOff[abs(j-i)] = 1; digitalWrite(led[abs(j-i)], HIGH); delay(espera); } } // função piscar 3 leds void threeBlinkLeds(byte index1, byte index2, byte index3) { allLedsOff(); for(byte i=0;i<3;i++) { digitalWrite(led[index1], HIGH); digitalWrite(led[index2], HIGH); digitalWrite(led[index3], HIGH); delay(espera); digitalWrite(led[index1], LOW); digitalWrite(led[index2], LOW); digitalWrite(led[index3], LOW); delay(espera); } digitalWrite(led[index1], HIGH); digitalWrite(led[index2], HIGH); digitalWrite(led[index3], HIGH); onOff[index1] = 1; onOff[index2] = 1; onOff[index3] = 1; }