Jogo de adivinhação de cores remoto IR: 3 etapas
Jogo de adivinhação de cores remoto IR: 3 etapas
Anonim
Jogo de adivinhação de cores remoto IR
Jogo de adivinhação de cores remoto IR

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

Peças necessárias
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

Construir
Construir
Construir
Construir
Construir
Construir
Construir
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!