Índice:

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

Vídeo: Jogo de adivinhação de cores remoto IR: 3 etapas

Vídeo: Jogo de adivinhação de cores remoto IR: 3 etapas
Vídeo: Tapete do Movimento 2024, Novembro
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!

Recomendado: