Inhaltsverzeichnis:
Video: IR-Remote-Farbschätzspiel - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
In diesem anweisbaren zeige ich Ihnen, wie Sie eine RGB-LED mit einer IR-Fernbedienung steuern und ein lustiges Spiel daraus machen!
Schritt 1: Benötigte Teile
Die Teile, die Sie für dieses Projekt benötigen, sind:
- arduino one- RGB Led- IR-Sensor
(LED-Anzahl hängt vom Spiel, der Anzahl der Leben ab oder) - 2 grüne LEDs - 1 gelbe LED - 1 orangefarbene LED - 3 rote LEDs
Schritt 2: Code
#enthalten
int redPin = 10;
int grünPin = 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); decode_results-Ergebnisse;
// Farben eingeben
int input = {-1, -1, -1}; int color = {-1, -1, -1};
int indexNumber = 0;
int indexColor = 0;
int waarde = 0;
int rood = 0;
int grün = 0; int blauw = 0;
// Farben generieren
int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;
// Spielvariablen
int diff = 200;
int levelNumber = 1;
int level = {-1, -1, -1, -1};
intt = 0;
int level1 = 255;
int level2 = 0; int level3 = 0; int level4 = 0;
int Leben = 3;
int Ebenen1 = 255; int Ebenen2 = 255; int Ebenen3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
Leere Einrichtung () {
Serial.begin (9600); irrecv.enableIRIn(); // Starte den Empfänger pinMode (redPin, OUTPUT); PinMode (grünPin, AUSGANG); pinMode (bluePin, AUSGANG);
pinMode (levensPin1, AUSGANG);
pinMode (levensPin2, AUSGANG); pinMode (levensPin3, AUSGANG);
}
Leere Schleife () {
if (irrecv.decode (&results)) // Empfangen Sie die Signale von der Fernbedienung { Serial.println (results.value, DEC); // Zeigen Sie die Signale an, die von jeder gedrückten Taste empfangen wurden irrecv.resume (); // den nächsten Signalschalter empfangen (results.value) {// die Signale in die Zahlen auf den Schaltflächen umwandeln und den Schaltflächen Aktionen zuweisen
Fall 109562864:
addWaarde(1); brechen;
Fall 109562824:
addWaarde(2); brechen;
Fall 109562856:
addWaarde(3); brechen;
Fall 109562872:
addWaarde(4); brechen;
Fall 109562820:
addWaarde(5); brechen;
Fall 109562852:
addWaarde(6); brechen;
Fall 109562868:
addWaarde(7); brechen;
Fall 109562828:
addWaarde(8); brechen;
Fall 109562860:
addWaarde(9); brechen;
Fall 109562876:
addWaarde(0); brechen;
Fall 109562818: //oud ding enter/R CLK
handleInput(); brechen;
Fall 109562816: // laute Leistung
handleColor(); brechen; Fall 109562878: // Oud-Ding-Abbruch/L CLK resetColor (); brechen;
Fall 109562866: //lege knop midden
zufällige Farbe(); brechen;
Fall 109562830: // pijltje naar rechts
alles anzeigen(); brechen; case 109562838: // esc case 109562822: // AV-Quelle resetEverything(); brechen; }
// Tasten auf der Fernbedienung zur Steuerung der Farbe zuweisen: Auf diese Weise können die Spieler sehen, wie die Farben aussehen und wie sie kombiniert werden, // bevor ein Spiel gestartet wird. switch (results.value) {Fall 109562840: rood = 255; brechen;
Fall 109562844:
grün = 255; brechen;
Fall 109562850:
blauw = 255; brechen;
Fall 109562836:
Stamm = 0; grün = 0; blauw = 0; brechen; }
}
analogWrite (redPin, abs (255 - rood)); // RGB-LED steuern: umgekehrt, weil meine umgekehrt verdrahtet ist.
analogWrite(greenPin, abs(255 - grün)); analogWrite(bluePin, abs(255 - blauw));
// Live-LEDs steuern
wenn (lebt == 2) {levens1 = 0; aufrechtzuerhalten. Wenn (lebt == 1) {levens2 = 0; aufrechtzuerhalten. Wenn (lebt == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);
// Kontrollieren der Level-LEDs
if (levelNumber == 1) { level1 = 255; aufrechtzuerhalten. Wenn (levelNumber == 2){level1 = 255; Stufe2 = 255; aufrechtzuerhalten. Wenn (levelNumber == 3) {level1 = 255; Stufe2 = 255; Stufe3 = 255; aufrechtzuerhalten. Wenn (levelNumber == 4) {level1 = 255; Stufe2 = 255; Stufe3 = 255; Stufe4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);
}
Void addWaarde (int value) {// füge den gedrückten Wert zur Liste hinzu
if (indexNummer == 3) {
Rückkehr; }
if (input[indexnummer] == -1){
input[indexNumber] = Wert; Indexnummer++; } }
void handleInput() { // mach einen 'waarde'(value) aus der Liste
waarde = abs(input[0] * 100 + input[1] * 10 + input[2]); Eingabe[0] = -1; // de signalen zurücksetzen input[1] = -1; Eingabe[2] = -1;
Indexnummer = 0;
Serial.print ("waarde opgeslagen: "); Serial.println (waarde); addColor(waarde); }
void addColor(int waarde) {// füge die 3-stellige 'waarde' zu einer Liste hinzu
if (indexFarbe == 3) {
Rückkehr; }
if (Farbe[indexFarbe] == -1){
color[indexColor] = waarde; if (color[indexColor] > 255){ color[indexColor] = 255; } indexColor++; }
}
void randomColor () {// das Licht eine zufällige Farbe annehmen lassen und in Variablen speichern
roodRandom = random (0, 255);
groenRandom = random(0, 255);
blauwRandom = random(0, 255);
rood = roodRandom;
groen = groenZufällig; blauw = blauwRandom; Serial.print ("roodRandom = "); Serial.println (roodRandom); Serial.print ("groenRandom = "); Serial.println (groenRandom); Serial.print ("blauwRandom = "); Serial.println (blauwRandom);
}
void handleColor() { // wandle 'waarde' aus der Liste in 'Gok' (rate) Variablen um
roodGok = color[0]; groenGok = Farbe[1]; blauwGok = Farbe[2]; // Überprüfen Sie, ob die Gok-Variablen zu stark von der echten Zufallsfarbe abweichen: Wenn ja, zeigen Sie die Schätzung für drei Sekunden an, blinken Sie grün und ändern Sie die Farbe erneut, fügen Sie eine Stufe hinzu und verringern Sie die zulässige Differenz // wenn nicht, zeigen Sie die. an drei Sekunden raten, rot blinken und ein Leben abziehen // wenn du keine Leben mehr hast, beginnt das Spiel von vorne if (abs((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff){ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); Verzögerung (3000); analogWrite (redPin, 255); analogWrite (grünPin, 0); analogWrite (bluePin, 255); Verzögerung (300); analogWrite (redPin, 255); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (300); analogWrite (redPin, 255); analogWrite (grünPin, 0); analogWrite (bluePin, 255); Verzögerung (300); analogWrite (redPin, 255); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (300);
Serial.print ("roodGok = ");
Serial.println (roodGok); Serial.print ("groenGok = "); Serial.println (groenGok); Serial.print ("blauwGok = "); Serial.println (blauwGok); resetColor(); zufällige Farbe(); levelNumber++; diff -= 50; aufrechtzuerhalten. Sonst { AnalogWrite (redPin, abs (255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); Verzögerung (3000); analogWrite (rotPin, 0); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (300); analogWrite (redPin, 255); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (300); analogWrite (rotPin, 0); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (300); analogWrite (redPin, 255); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (300); Serial.print ("roodGok = "); Serial.println (roodGok); Serial.print ("groenGok = "); Serial.println (groenGok); Serial.print ("blauwGok = "); Serial.println (blauwGok);
resetColor();
lebt--; aufrechtzuerhalten. Wenn (lebt == 0) {AnalogWrite (redPin, 0); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (100); analogWrite (redPin, 255); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (100); analogWrite (rotPin, 0); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (100); analogWrite (redPin, 255); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (100); analogWrite (rotPin, 0); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (100); analogWrite (redPin, 255); analogWrite (grünPin, 255); analogWrite (bluePin, 255); Verzögerung (100); resetAlles(); }
}
Void resetColor () {// verwenden für Reset-Werte, für ein falsches Drücken oder jede neue Vermutung (nur zur Sicherheit)
color[0] = -1; Farbe[1] = -1; Farbe [2] = -1;
Indexnummer=0;
indexColor=0; }
Void resetEverything () {// das Spiel neu starten
color[0] = -1; Farbe[1] = -1; Farbe [2] = -1;
Indexnummer=0;
indexColor=0;
Leben = 3;
Stamm = 0; grün = 0; blauw = 0;
roodRandom = 0;
groenRandom = 0; blauwRandom = 0;
Ebenen1 = 255;
Ebenen2 = 255; Ebenen3 = 255;
Stufe1 = 255;
Stufe2 = 0; Stufe3 = 0; Stufe4 = 0;
levelNumber = 1;
t = 0;
}
Void displayEverything () {// verwenden Sie dies, um wichtige Informationen auf dem seriellen Monitor anzuzeigen
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 (grün); Serial.print ("blauw = "); Serial.println (blauw);
Serial.print ("waarde opgeslagen: ");
Serial.println (waarde); }
Schritt 3: Erstellen
Sie wollen offensichtlich einen schönen Build für dieses Projekt. Dieser Teil ist ziemlich offen für Interpretationen, aber es gibt einige Dinge, die Sie dabei beachten sollten: - Halten Sie die Frontplatte dünn, damit Sie Ihre LEDs immer noch hindurchstecken können und der IR-Empfänger weiterhin funktioniert
- Halten Sie genügend Platz im Build für das Arduino und eine Lötplatine
- Stellen Sie sicher, dass sich auf der Rückseite ein Loch für die Kraft des Arduino befindet
Ich habe ein grobes Schema für die Verkabelung hinzugefügt.
Viel Glück und hab Spaß!