2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Neste instrutível, vou mostrar como controlar um led RGB usando um remoto IR e fazer um jogo divertido com ele!
Etapa 1: peças necessárias
As peças de que você precisará para este projeto são:
- arduino one- RGB Led- IR-Sensor
(a contagem de leds depende do jogo, da quantidade de vidas ou) - 2 leds verdes- 1 led amarelo - 1 led laranja- 3 leds vermelhos
Etapa 2: Código
#incluir
redPin int = 10;
int greenPin = 6; int bluePin = 5;
int levensPin1 = 8;
int levensPin2 = 9; int levensPin3 = 12;
int levelPin1 = 2;
int levelPin2 = 3; int levelPin3 = 4; int levelPin4 = 7;
int RECV_PIN = 11;
IRrecv irrecv (RECV_PIN); resultados de decode_results;
// cores de entrada
entrada interna = {-1, -1, -1}; cor interna = {-1, -1, -1};
int indexNumber = 0;
int indexColor = 0;
int waarde = 0;
int rood = 0;
int groen = 0; int blauw = 0;
// gerar cores
int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;
// variáveis do jogo
dif int = 200;
Int levelNumber = 1;
nível interno = {-1, -1, -1, -1};
int t = 0;
nível interno 1 = 255;
nível interno 2 = 0; nível interno 3 = 0; nível interno 4 = 0;
vidas int = 3;
int levens1 = 255; int levens2 = 255; int levens3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
void setup () {
Serial.begin (9600); irrecv.enableIRIn (); // inicia o receptor pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);
pinMode (levensPin1, OUTPUT);
pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);
}
void loop () {
if (irrecv.decode (& results)) // recebe os sinais do remoto {Serial.println (results.value, DEC); // exibe os sinais recebidos de cada botão pressionado irrecv.resume (); // recebe a próxima troca de sinal (results.value) {// transforma os sinais em números nos botões e atribui ações aos botões
case 109562864:
addWaarde (1); pausa;
case 109562824:
addWaarde (2); pausa;
case 109562856:
addWaarde (3); pausa;
case 109562872:
addWaarde (4); pausa;
case 109562820:
addWaarde (5); pausa;
case 109562852:
addWaarde (6); pausa;
case 109562868:
addWaarde (7); pausa;
case 109562828:
addWaarde (8); pausa;
case 109562860:
addWaarde (9); pausa;
case 109562876:
addWaarde (0); pausa;
case 109562818: // oud ding enter / R CLK
handleInput (); pausa;
case 109562816: // oud ding power
handleColor (); pausa; case 109562878: // oud ding cancel / L CLK resetColor (); pausa;
case 109562866: // lege knop midden
cor aleatória(); pausa;
case 109562830: // pijltje naar rechts
displayEverything (); pausa; case 109562838: // esc case 109562822: // AV source resetEverything (); pausa; }
// atribua botões no controle remoto para controlar a cor: desta forma, os jogadores podem ver como são as cores e como combiná-las, // antes de iniciar um jogo. switch (results.value) {case 109562840: rood = 255; pausa;
case 109562844:
groen = 255; pausa;
case 109562850:
blauw = 255; pausa;
case 109562836:
rood = 0; groen = 0; blauw = 0; pausa; }
}
analogWrite (redPin, abs (255 - rood)); // controlando o led RGB: no reverso, porque o meu está conectado ao reverso.
analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - blauw));
// controlando leds vivos
if (vive == 2) {níveis1 = 0; } if (vive == 1) {levens2 = 0; } if (vive == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);
// leds de nível de controle
if (levelNumber == 1) {level1 = 255; } if (levelNumber == 2) {level1 = 255; nível2 = 255; } if (levelNumber == 3) {level1 = 255; nível2 = 255; nível3 = 255; } if (levelNumber == 4) {level1 = 255; nível2 = 255; nível3 = 255; nível4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);
}
void addWaarde (int value) {// adiciona o valor pressionado à lista
if (indexNumber == 3) {
Retorna; }
if (insira [indexNumber] == -1) {
input [indexNumber] = valor; indexNumber ++; }}
void handleInput () {// faz um 'waarde' (valor) fora da lista
waarde = abs (entrada [0] * 100 + entrada [1] * 10 + entrada [2]); entrada [0] = -1; // redefine o sinal de entrada [1] = -1; entrada [2] = -1;
indexNumber = 0;
Serial.print ("waarde opgeslagen:"); Serial.println (waarde); addColor (waarde); }
void addColor (int waarde) {// adiciona o 'waarde' de 3 dígitos a uma lista
if (indexColor == 3) {
Retorna; }
if (color [indexColor] == -1) {
cor [indexColor] = waarde; if (cor [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }
}
void randomColor () {// faz a luz mudar para uma cor aleatória e salvá-la em variáveis
roodRandom = aleatório (0, 255);
groenRandom = aleatório (0, 255);
blauwRandom = aleatório (0, 255);
rood = roodRandom;
groen = groenRandom; blauw = blauwRandom; Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);
}
void handleColor () {// transforma o 'waarde' da lista em variáveis 'Gok' (estimativa)
roodGok = cor [0]; groenGok = cor [1]; blauwGok = cor [2]; // verifique se as variáveis do Gok diferem muito da cor real aleatória: em caso afirmativo, exiba a estimativa por três segundos, pisque em verde e mude a cor novamente, adicione um nível e torne a diferença permitida menor // se não, exiba o adivinhe por três segundos, pisque em vermelho e deduza uma vida // se você não tiver mais vidas, o jogo começa novamente se (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); atraso (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); atraso (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); atraso (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (300);
Serial.print ("roodGok =");
Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); cor aleatória(); levelNumber ++; diff - = 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); atraso (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);
resetColor ();
vidas--; } if (vive == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); atraso (100); resetEverything (); }
}
void resetColor () {// use para redefinir valores, para um pressionamento errado ou cada nova estimativa (apenas para ter certeza)
cor [0] = -1; cor [1] = -1; cor [2] = -1;
indexNumber = 0;
indexColor = 0; }
void resetEverything () {// reiniciar o jogo
cor [0] = -1; cor [1] = -1; cor [2] = -1;
indexNumber = 0;
indexColor = 0;
vidas = 3;
rood = 0; groen = 0; blauw = 0;
roodRandom = 0;
groenRandom = 0; blauwRandom = 0;
levens1 = 255;
levens2 = 255; levens3 = 255;
nível1 = 255;
nível2 = 0; nível3 = 0; nível4 = 0;
levelNumber = 1;
t = 0;
}
void displayEverything () {// use isso para exibir informações importantes no monitor serial
Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);
Serial.print ("rood =");
Serial.println (rood); Serial.print ("groen ="); Serial.println (groen); Serial.print ("blauw ="); Serial.println (blauw);
Serial.print ("waarde opgeslagen:");
Serial.println (waarde); }
Etapa 3: construir
Obviamente, você quer uma boa construção para este projeto. esta parte é bastante aberta para interpretação, mas há algumas coisas a se ter em mente: - mantenha o painel frontal fino, para que você ainda possa inserir seus leds nele e o receptor IR ainda funcione
- mantenha espaço suficiente na construção para o arduino e uma placa de solda
- certifique-se de que há um orifício na parte de trás para a força do arduino
Eu adicionei um esquema básico para a fiação.
Boa sorte e divirta-se!