Inhoudsopgave:
Video: IR-afstandsbediening kleur raadspel - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
In deze instructable laat ik je zien hoe je een RGB-led bedient met een IR-afstandsbediening en er een leuk spel van maakt!
Stap 1: benodigde onderdelen
De onderdelen die je nodig hebt voor dit project zijn:
- arduino één- RGB Led- IR-sensor
(aantal leds hangt af van het spel, het aantal levens of) - 2 groene leds - 1 gele led - 1 oranje led - 3 rode leds
Stap 2: Coderen
#erbij betrekken
int redPin = 10;
int groenePin = 6; int blauwPin = 5;
int levensPin1 = 8;
int levensPin2 = 9; int levensPin3 = 12;
int niveauPin1 = 2;
int niveauPin2 = 3; int niveauPin3 = 4; int niveauPin4 = 7;
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN); decode_results resultaten;
// invoerkleuren
int invoer = {-1, -1, -1}; int-kleur = {-1, -1, -1};
int indexNummer = 0;
int indexColor = 0;
int waarde = 0;
int rood = 0;
int groen = 0; int blauw = 0;
// genereer kleuren
int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;
// spelvariabelen
int verschil = 200;
int levelNumber = 1;
int-niveau = {-1, -1, -1, -1};
int t = 0;
int-niveau1 = 255;
int-niveau2 = 0; int-niveau3 = 0; int-niveau4 = 0;
int levens = 3;
int levens1 = 255; int levens2 = 255; int levens3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
ongeldige setup() {
Serieel.begin(9600); onrecv.enableIRIn(); // start de ontvanger pinMode (redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode (bluePin, UITGANG);
pinMode (levensPin1, UITGANG);
pinMode (levensPin2, UITGANG); pinMode (levensPin3, UITGANG);
}
lege lus() {
if (irrecv.decode(&results)) // ontvang de signalen van de afstandsbediening {Serial.println(results.value, DEC); // toon de signalen die zijn ontvangen van elke ingedrukte knop irrecv.resume(); // ontvang volgende signaalschakelaar (results.value) { // zet de signalen om in de cijfers op de knoppen en wijs acties toe aan knoppen
zaak 109562864:
addWaarde(1); pauze;
zaak 109562824:
addWaarde(2); pauze;
zaak 109562856:
addWaarde(3); pauze;
zaak 109562872:
addWaarde(4); pauze;
zaak 109562820:
addWaarde(5); pauze;
zaak 109562852:
addWaarde(6); pauze;
zaak 109562868:
addWaarde(7); pauze;
zaak 109562828:
addWaarde(8); pauze;
zaak 109562860:
addWaarde(9); pauze;
zaak 109562876:
addWaarde(0); pauze;
zaak 109562818: //oud ding enter/R CLK
handvatInvoer(); pauze;
zaak 109562816: //oud ding power
handvatKleur(); pauze; case 109562878: //oud ding cancel/L CLK resetColor(); pauze;
zaak 109562866: //lege knop midden
willekeurige kleur(); pauze;
zaak 109562830: // pijltje naar rechts
toonAlles(); pauze; case 109562838: // esc case 109562822: // AV-bron resetEverything(); pauze; }
// ken knoppen op de afstandsbediening toe om de kleur te regelen: op deze manier kunnen spelers zien hoe de kleuren eruit zien en hoe ze te combineren, // voordat je een spel start. switch(results.value){ case 109562840: rood = 255; pauze;
zaak 109562844:
groen = 255; pauze;
koffer 109562850:
blauw = 255; pauze;
zaak 109562836:
rood = 0; groen = 0; blauw = 0; pauze; }
}
analogWrite(redPin, abs(255 - rood)); // RGB-led aansturen: omgekeerd, omdat de mijne omgekeerd is bedraad.
analogWrite(greenPin, abs(255 - groen)); analogWrite(bluePin, abs(255 - blauw));
// aansturen van live leds
if (leeft == 2){ levens1 = 0; } if (leeft == 1){ levens2 = 0; } if (leeft == 0){ levens3 = 0; } analogWrite(levensPin1, levens1); analoogWrite(levensPin2, levens2); analogWrite(levensPin3, levens3);
// aansturen van niveau-leds
if (levelNumber == 1){ level1 = 255; } if (levelNumber == 2){ level1 = 255; niveau2 = 255; } if (levelNumber == 3){ level1 = 255; niveau2 = 255; niveau3 = 255; } if (levelNumber == 4){ level1 = 255; niveau2 = 255; niveau3 = 255; niveau4 = 255; } analoogWrite(niveauPin1, niveau1); analoogWrite(niveauPin2, niveau2); analoogWrite(niveauPin3, niveau3); analoogWrite(niveauPin4, niveau4);
}
void addWaarde (int value) { // voeg ingedrukte waarde toe aan lijst
if (indexNummer == 3) {
opbrengst; }
if (invoer [indexnummer] == -1){
input[indexNumber] = waarde; indexNummer++; } }
void handleInput() { // maak een 'waarde'(waarde) uit de lijst
waarde = abs(invoer[0] * 100 + invoer[1] * 10 + invoer[2]); invoer[0] = -1; // reset de invoer [1] = -1; invoer [2] = -1;
indexNummer = 0;
Serial.print("waarde opgeslagen: "); Serial.println(waarde); addColor(waarde); }
void addColor(int waarde) { // voeg de 3-cijferige 'waarde' toe aan een lijst
if (indexColor == 3) {
opbrengst; }
if (kleur[indexKleur] == -1){
kleur[indexKleur] = waarde; if (kleur [indexKleur] > 255){ kleur [indexKleur] = 255; } indexColor++; }
}
void randomColor(){ // laat het licht een willekeurige kleur krijgen en sla het op in variabelen
roodRandom = willekeurig (0, 255);
groenRandom = willekeurig (0, 255);
blauwRandom = willekeurig (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() { // verander de 'waarde' uit de lijst in 'Gok' (gok) variabelen
roodGok = kleur[0]; groenGok = kleur[1]; blauwGok = kleur[2]; // controleer of de Gok-variabelen te veel verschillen met de echte willekeurige kleur: zo ja, geef de schatting drie seconden weer, knippert groen en verander de kleur opnieuw, voeg een niveau toe en maak het toegestane verschil kleiner // zo niet, toon de drie seconden raden, rood knipperen en een leven aftrekken // als je geen levens meer hebt, begint het spel opnieuw als (abs((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff){ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); vertraging (3000); analoogWrite(redPin, 255); analoogWrite(greenPin, 0); analoogWrite(bluePin, 255); vertraging (300); analoogWrite(redPin, 255); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (300); analoogWrite(redPin, 255); analoogWrite(greenPin, 0); analoogWrite(bluePin, 255); vertraging (300); analoogWrite(redPin, 255); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (300);
Serial.print("roodGok = ");
Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok); resetKleur(); willekeurige kleur(); niveauNummer++; verschil -= 50; } else{ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); vertraging (3000); analoogWrite(redPin, 0); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (300); analoogWrite(redPin, 255); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (300); analoogWrite(redPin, 0); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (300); analoogWrite(redPin, 255); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (300); Serial.print("roodGok = "); Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok);
resetKleur();
leeft--; } if (leeft == 0){ analogWrite(redPin, 0); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (100); analoogWrite(redPin, 255); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (100); analoogWrite(redPin, 0); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (100); analoogWrite(redPin, 255); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (100); analoogWrite(redPin, 0); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (100); analoogWrite(redPin, 255); analoogWrite(greenPin, 255); analoogWrite(bluePin, 255); vertraging (100); alles resetten(); }
}
void resetColor () { // gebruik voor reset-waarden, voor een verkeerde druk of elke nieuwe gok (alleen voor zekerheid)
kleur[0] = -1; kleur [1] = -1; kleur [2] = -1;
indexNummer=0;
indexKleur=0; }
void resetEverything(){ // herstart het spel
kleur[0] = -1; kleur [1] = -1; kleur [2] = -1;
indexNummer=0;
indexKleur=0;
levens = 3;
rood = 0; groen = 0; blauw = 0;
roodRandom = 0;
groenRandom = 0; blauwRandom = 0;
levens1 = 255;
levens2 = 255; levens3 = 255;
niveau1 = 255;
niveau2 = 0; niveau3 = 0; niveau4 = 0;
niveauNummer = 1;
t = 0;
}
void displayEverything(){ // gebruik dit om belangrijke informatie op de seriële monitor weer te geven
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); }
Stap 3: Bouw
U wilt natuurlijk een mooie build voor dit project. dit deel is vrij voor interpretatie vatbaar, maar er zijn wel wat dingen om rekening mee te houden: - houd het frontpaneel dun, zodat je er nog je leds doorheen kunt steken en de IR-ontvanger nog werkt
- houd voldoende ruimte in de build voor de arduino en een soldeerbord
- zorg dat er een gat in de achterkant zit voor de kracht van de arduino
Ik heb een ruw schema voor de bedrading toegevoegd.
Veel succes en veel plezier!
Aanbevolen:
Oh!! Kleur: 7 stappen
Oh!! Kleur: O!! Kleur is een eenvoudig spel om de kleur te raden. Het spel geeft je de meest elementaire drie primaire kleuren. Als u twee kleuren wilt combineren, drukt u gewoon op beide knoppen. Nadat de knop is ingedrukt, zal het spel Het oordeel is correct. Tot slot, pleidooi
Wandklok in kleur 7 stappen (met afbeeldingen)
Kleur wandklok: deze keer presenteer ik u een analoge wandklok in kleur voor kinderen met led-strips. De basis van de klok is om drie led-strips en verschillende kleuren te gebruiken om de tijd weer te geven: in de ronde led-strip is de groene kleur gebruikt om de uren te tonen, de
Beeldtesten voor kleur en helderheid: 8 stappen
Afbeelding testen voor kleur en duidelijkheid: ik heb dit Instructable voor mij gemaakt; om mijn Instructables te verbeteren, maar ik ben van plan te delen wat ik heb gevonden. Ik heb gemerkt dat sommige van de afbeeldingen die ik upload naar Instructabes er perfect uitzien en dat andere afbeeldingen minder helder zijn, een beetje verkleurd of wazig. Ik weet het niet
Python raadspel: 9 stappen
Python raadspel: de volgende instructies bieden stapsgewijze begeleiding bij het schrijven van een programma met behulp van de willekeurige module en het maken van een raadspel dat interactie heeft met de gebruiker. Om aan de slag te gaan, moet python op uw computer zijn geïnstalleerd en ook op
Wat denkt de Bit? Maak een eenvoudig raadspel met de BBC Microbit!: 10 stappen
Wat denkt de Bit? Maak een eenvoudig raadspel met de BBC Microbit!: Ik pakte een paar BBC Microbits nadat ik er positieve recensies over had gelezen in verschillende online artikelen. In een poging om vertrouwd te raken met de BIT, speelde ik met de online Microsoft Blocks Editor voor een paar uur en kwam op