Sommario:

Gioco per indovinare i colori a distanza IR: 3 passaggi
Gioco per indovinare i colori a distanza IR: 3 passaggi

Video: Gioco per indovinare i colori a distanza IR: 3 passaggi

Video: Gioco per indovinare i colori a distanza IR: 3 passaggi
Video: Ingoiare il latte del trallalero fa bene? #shorts 2024, Luglio
Anonim
Gioco per indovinare i colori a distanza IR
Gioco per indovinare i colori a distanza IR

In questo tutorial, ti mostrerò come controllare un led RGB usando un telecomando IR e farne un gioco divertente!

Passaggio 1: parti necessarie

Parti necessarie
Parti necessarie

Le parti necessarie per questo progetto sono:

- arduino one- Led RGB- Sensore IR

(il conteggio dei led dipende dal gioco, dal numero di vite o)- 2 led verdi- 1 led giallo - 1 led arancio- 3 led rossi

Passaggio 2: codice

#includere

int pin rosso = 10;

int pin verde = 6; int bluePin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

livello intPin1 = 2;

livello intPin2 = 3; livello intPin3 = 4; livello intPin4 = 7;

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN); decode_results risultati;

// input colori

int input = {-1, -1, -1}; int color = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int strada = 0;

int verde = 0; int blu = 0;

// genera colori

int roodRandom = 0; int groenCasuale = 0; int blauwCasuale = 0;

// variabili di gioco

int diff = 200;

int levelNumber = 1;

int livello = {-1, -1, -1, -1};

int t = 0;

livello int1 = 255;

int livello2 = 0; int livello3 = 0; livello int4 = 0;

int vive = 3;

int livelli1 = 255; int livelli2 = 255; int livelli3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

void setup() {

Serial.begin(9600); irrecv.enableIRIn(); // avvia il ricevitore pinMode(redPin, OUTPUT); pinMode(GreenPin, OUTPUT); pinMode(bluePin, OUTPUT);

pinMode(levensPin1, OUTPUT);

pinMode(levensPin2, OUTPUT); pinMode(levensPin3, OUTPUT);

}

ciclo vuoto() {

if (irrecv.decode(&results)) // riceve i segnali dal telecomando { Serial.println(results.value, DEC); // visualizza i segnali ricevuti da ogni pulsante premuto irrecv.resume(); // riceve l'interruttore del segnale successivo (results.value){ // trasforma i segnali in numeri sui pulsanti e assegna azioni ai pulsanti

caso 109562864:

addWaarde(1); rottura;

caso 109562824:

addWaarde(2); rottura;

caso 109562856:

addWaarde(3); rottura;

caso 109562872:

addWaarde(4); rottura;

caso 109562820:

addWaarde(5); rottura;

caso 109562852:

addWaarde(6); rottura;

caso 109562868:

addWaarde(7); rottura;

caso 109562828:

addWaarde(8); rottura;

caso 109562860:

addWaarde(9); rottura;

caso 109562876:

addWaarde(0); rottura;

case 109562818: //oud ding enter/R CLK

handleInput(); rottura;

caso 109562816: //oud ding power

handleColor(); rottura; case 109562878: //oud ding cancel/L CLK resetColor(); rottura;

caso 109562866: //lege knop midden

colore casuale(); rottura;

caso 109562830: // pijltje naar rechts

displayEverything(); rottura; case 109562838: // esc case 109562822: // reset della sorgente AVEverything(); rottura; }

// assegna i pulsanti sul telecomando per controllare il colore: in questo modo, i giocatori possono vedere come sono i colori e come combinarli, // prima di iniziare una partita. switch(results.value){ case 109562840: rood = 255; rottura;

caso 109562844:

verde = 255; rottura;

caso 109562850:

blu = 255; rottura;

caso 109562836:

rosso = 0; verde = 0; blu = 0; rottura; }

}

analogWrite(redPin, abs(255 - rosso)); // controllo led RGB: al contrario, perché il mio è cablato al contrario.

analogWrite(greenPin, abs(255 - verde)); analogWrite(bluePin, abs(255 - blauw));

// controllo dei led attivi

if (vite == 2){ levens1 = 0; } if (vite == 1){ levens2 = 0; } if (vite == 0){ levens3 = 0; } analogWrite(levensPin1, levens1); analogWrite(levensPin2, levens2); analogWrite(levensPin3, levens3);

// controllo dei led di livello

if (levelNumber == 1){ level1 = 255; } if (levelNumber == 2){ level1 = 255; livello2 = 255; } if (levelNumber == 3){ level1 = 255; livello2 = 255; livello3 = 255; } if (levelNumber == 4){ level1 = 255; livello2 = 255; livello3 = 255; livello4 = 255; } analogWrite(levelPin1, level1); analogWrite(levelPin2, level2); analogWrite(levelPin3, level3); analogWrite(levelPin4, level4);

}

void addWaarde(int value) { // aggiungi il valore premuto alla lista

if (numeroindice == 3) {

Restituzione; }

if (input[numeroindice] == -1){

input[numeroindice] = valore; indiceNumero++; } }

void handleInput() { // crea un 'waarde' (valore) dalla lista

waarde = abs(ingresso[0] * 100 + ingresso[1] * 10 + ingresso[2]); ingresso[0] = -1; // reset del segnale input[1] = -1; ingresso[2] = -1;

indiceNumero = 0;

Serial.print("waarde opgeslagen: "); Serial.println(waarde); addColor(waarde); }

void addColor(int waarde) { // aggiungi le 3 cifre 'waarde' a una lista

if (indexColor == 3) {

Restituzione; }

if (colore[indexColor] == -1){

color[indexColor] = waarde; if (colore[coloreindice] > 255){ colore[coloreindice] = 255; } indexColor++; }

}

void randomColor(){ // trasforma la luce in un colore casuale e salvala in variabili

roodRandom = random(0, 255);

groenRandom = random(0, 255);

blauwRandom = random(0, 255);

rood = roodRandom;

groen = groenRandom; blauw = blauwCasuale; Serial.print("roodRandom = "); Serial.println(roodRandom); Serial.print("groenRandom = "); Serial.println(groenRandom); Serial.print("blauwRandom = "); Serial.println(blauwRandom);

}

void handleColor() { // trasforma 'waarde' dall'elenco in variabili 'Gok' (indovinate)

roodGok = color[0]; groenGok = color[1]; blauwGok = color[2]; // controlla se le variabili Gok differiscono troppo dal colore casuale reale: in tal caso, visualizza l'ipotesi per tre secondi, lampeggia in verde e cambia di nuovo il colore, aggiungi un livello e riduci la differenza consentita // in caso contrario, visualizza il indovina per tre secondi, lampeggia in rosso e sottrai una vita // se sei senza vite, il gioco ricomincia if (abs((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff){ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); ritardo (3000); analogWrite(redPin, 255); analogWrite(greenPin, 0); analogWrite(bluePin, 255); ritardo(300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(300); analogWrite(redPin, 255); analogWrite(greenPin, 0); analogWrite(bluePin, 255); ritardo(300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(300);

Serial.print("roodGok = ");

Serial.println(roodGok); Serial.print("GroenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok); resetColor(); colore casuale(); livelloNumero++; differenza -= 50; } else{ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); ritardo (3000); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(300); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(300); Serial.print("roodGok = "); Serial.println(roodGok); Serial.print("GroenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok);

resetColor();

vive--; } if (vive == 0){ analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(100); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(100); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(100); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(100); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(100); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); ritardo(100); resetEverything(); }

}

void resetColor(){ // usa per ripristinare i valori, per una stampa sbagliata o ogni nuova ipotesi (solo per certezza)

colore[0] = -1; colore[1] = -1; colore[2] = -1;

indiceNumero=0;

indexColor=0; }

void resetEverything(){ // riavvia il gioco

colore[0] = -1; colore[1] = -1; colore[2] = -1;

indiceNumero=0;

indexColor=0;

vite = 3;

rosso = 0; verde = 0; blu = 0;

roodRandom = 0;

groenRandom = 0; blauwCasuale = 0;

livelli1 = 255;

leve2 = 255; levens3 = 255;

livello1 = 255;

livello2 = 0; livello3 = 0; livello4 = 0;

numerolivello = 1;

t = 0;

}

void displayEverything(){ // usa questo per visualizzare informazioni importanti sul monitor seriale

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("verde = "); Serial.println(groen); Serial.print("blauw = "); Serial.println(blauw);

Serial.print("waarde opgeslagen: ");

Serial.println(waarde); }

Passaggio 3: costruire

Costruire
Costruire
Costruire
Costruire
Costruire
Costruire
Costruire
Costruire

Ovviamente vuoi una bella build per questo progetto. questa parte è abbastanza aperta all'interpretazione, ma ci sono alcune cose da tenere a mente con questo: - mantieni il pannello frontale sottile, così puoi ancora attaccare i tuoi led attraverso di esso e il ricevitore IR funziona ancora

- mantieni abbastanza spazio nella build per l'arduino e una scheda di saldatura

- assicurati che ci sia un foro nella parte posteriore per l'alimentazione dell'arduino

Ho aggiunto uno schema approssimativo per il cablaggio.

Buona fortuna e buon divertimento!

Consigliato: