Inhoudsopgave:

IR-afstandsbediening kleur raadspel - Ajarnpa
IR-afstandsbediening kleur raadspel - Ajarnpa

Video: IR-afstandsbediening kleur raadspel - Ajarnpa

Video: IR-afstandsbediening kleur raadspel - Ajarnpa
Video: Infrarood of radiofrequentie 2024, November
Anonim
IR-afstandsbediening kleur raadspel
IR-afstandsbediening kleur raadspel

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

Onderdelen nodig
Onderdelen nodig

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

Bouwen
Bouwen
Bouwen
Bouwen
Bouwen
Bouwen
Bouwen
Bouwen

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: