Sommario:
Video: Gioco per indovinare i colori a distanza IR: 3 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
In questo tutorial, ti mostrerò come controllare un led RGB usando un telecomando IR e farne un gioco divertente!
Passaggio 1: 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
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:
Octarine: un gioco di abbinamento dei colori con LED RGB WS2812: 6 passaggi
Octarine: un gioco di abbinamento di colori con LED RGB WS2812: Octarine, il colore della magia. Era vivo e splendente di un vibrante ed era il pigmento indiscusso dell'immaginazione, perché ovunque apparisse era segno che la semplice materia era serva dei poteri della mente magica. Erano incantatori
Semplice gioco di indovinare i numeri di Python: 11 passaggi
Simple Python Number Guessing Game: In questo tutorial insegneremo come creare un semplice gioco di indovinare numeri Python nell'applicazione Pycharm. Python è un linguaggio di scripting ottimo sia per i principianti che per gli esperti. Lo stile di codifica in Python è facile da leggere e seguire
Gioco di indovinare Python: 9 passaggi
Python Guessing Game: Le seguenti istruzioni forniscono una guida passo passo su come scrivere un programma utilizzando il modulo random e creare un indovinello che interagisce con l'utente. Per iniziare dovresti avere python installato sul tuo computer e anche op
Gioco di prevenzione degli ostacoli con sensore di distanza: 5 passaggi
Gioco di evitamento degli ostacoli con sensore di distanza: gioco di evitamento degli ostacoli come Flappy Bird. Muovi la mano per evitare la collisione. È facile da realizzare e divertente da giocare
Gioco di reazione rapida: versione a distanza: 5 passaggi (con immagini)
Gioco di reazione rapida: Versione a distanza: Ciao. Questo è un Instructable su come creare un gioco che metta alla prova sia il tuo tempo di reazione che il senso della distanza. Questo progetto si basa su un vecchio progetto che ho realizzato coinvolgendo due giocatori in competizione per vedere chi ha avuto un tempo di reazione più rapido facendo clic su un pulsante w