INHOUDSOPGAWE:

IR-afstand kleur raaisel spel: 3 stappe
IR-afstand kleur raaisel spel: 3 stappe

Video: IR-afstand kleur raaisel spel: 3 stappe

Video: IR-afstand kleur raaisel spel: 3 stappe
Video: Hush | Critical Role: THE MIGHTY NEIN | Episode 7 2024, Junie
Anonim
IR-afstand kleur raaisel spel
IR-afstand kleur raaisel spel

In hierdie instruksies sal ek jou wys hoe om 'n RGB-LED met 'n IR-afstandsbediening te beheer en 'n prettige speletjie daarvan te maak!

Stap 1: Onderdele benodig

Onderdele benodig
Onderdele benodig

Die onderdele wat u benodig vir hierdie projek is:

- arduino one- RGB LED- IR-sensor

(led-telling hang af van die spel, die hoeveelheid lewens of)- 2 groen leds- 1 geel led- 1 oranje led- 3 rooi leds

Stap 2: Kode

#insluit

int redPin = 10;

int greenPin = 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); resultate van dekode_resultate;

// invoer kleure

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

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// genereer kleure

int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;

// spel veranderlikes

int diff = 200;

int levelNumber = 1;

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

int t = 0;

int vlak1 = 255;

int level2 = 0; int level3 = 0; int level4 = 0;

int lewens = 3;

int lewens1 = 255; int lewens2 = 255; int lewens3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

ongeldige opstelling () {

Serial.begin (9600); irrecv.enableIRIn (); // begin die ontvanger pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

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

}

leemte -lus () {

as (irrecv.decode (& resultate)) // die seine van die afgeleë {Serial.println (results.value, DEC) ontvang; // vertoon die seine wat ontvang word van elke ingedrukte knoppie irrecv.resume (); // ontvang die volgende seinskakelaar (results.value) {// verander die seine in die syfers op die knoppies en ken aksies toe aan knoppies

saak 109562864:

addWaarde (1); breek;

saak 109562824:

addWaarde (2); breek;

saak 109562856:

addWaarde (3); breek;

saak 109562872:

addWaarde (4); breek;

saak 109562820:

addWaarde (5); breek;

saak 109562852:

addWaarde (6); breek;

saak 109562868:

addWaarde (7); breek;

saak 109562828:

addWaarde (8); breek;

saak 109562860:

addWaarde (9); breek;

saak 109562876:

addWaarde (0); breek;

saak 109562818: // oud ding enter/R CLK

handleInput (); breek;

saak 109562816: // oud ding power

handleColor (); breek; saak 109562878: // oud ding kanselleer/L CLK resetColor (); breek;

saak 109562866: // lege knop midden

randomColor (); breek;

saak 109562830: // pijltje naar rechts

displayEverything (); breek; saak 109562838: // esc saak 109562822: // AV bron resetEverything (); breek; }

// knoppies op die afstandsbediening toewys om die kleur te beheer: op hierdie manier kan spelers sien hoe die kleure lyk en hoe hulle dit kan kombineer, // voordat u 'n wedstryd begin. skakelaar (result.value) {saak 109562840: rood = 255; breek;

saak 109562844:

groen = 255; breek;

saak 109562850:

blauw = 255; breek;

saak 109562836:

rood = 0; groen = 0; blauw = 0; breek; }

}

analogWrite (redPin, abs (255 - rood)); // die beheer van RGB LED: omgekeerd, want myne is omgekeerd bedraad.

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

// beheer van lewendige leds

as (lewe == 2) {levens1 = 0; } as (lewens == 1) {levens2 = 0; } as (lewens == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// die beheer van die vlak leds

as (levelNumber == 1) {level1 = 255; } as (levelNumber == 2) {level1 = 255; vlak2 = 255; } as (levelNumber == 3) {level1 = 255; vlak2 = 255; vlak3 = 255; } as (levelNumber == 4) {level1 = 255; vlak2 = 255; vlak3 = 255; vlak4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (int value) {// voeg gepersonaliseerde waarde by die lys

as (indexNumber == 3) {

terugkeer; }

as (invoer [indexNumber] == -1) {

invoer [indexNumber] = waarde; indexNumber ++; }}

void handleInput () {// maak 'n 'waarde' (waarde) uit die lys

waarde = abs (invoer [0] * 100 + invoer [1] * 10 + invoer [2]); invoer [0] = -1; // herstel die seininvoer [1] = -1; invoer [2] = -1;

indeksNommer = 0;

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

void addColor (int waarde) {// voeg die 3-syfer 'waarde' by 'n lys

as (indexColor == 3) {

terugkeer; }

as (kleur [indexColor] == -1) {

kleur [indexColor] = waarde; as (kleur [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// laat die lig 'n ewekansige kleur verander en stoor dit in veranderlikes

roodRandom = ewekansig (0, 255);

groenRandom = ewekansig (0, 255);

blauwRandom = ewekansig (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 die 'waarde' uit die lys in 'Gok' (raai) veranderlikes

roodGok = kleur [0]; groenGok = kleur [1]; blauwGok = kleur [2]; // kyk of die Gok -veranderlikes te veel verskil met die werklike ewekansige kleur: as dit die geval is, vertoon die raai vir drie sekondes, knip groen en verander die kleur weer, voeg 'n vlak by en maak die toegelate verskil kleiner // indien nie, vertoon die raai vir drie sekondes, knip rooi en trek 'n lewe af // as jy nie meer lewe nie, begin die spel weer as (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); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; ewenaar -= 50; } anders {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); vertraging (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

lewens--; } if (lives == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); vertraging (100); resetEverything (); }

}

void resetColor () {// gebruik vir die terugstel van waardes, vir 'n verkeerde pers of elke nuwe raaiskoot (net vir sekerheid)

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

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// begin die spel weer

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

indexNumber = 0;

indexColor = 0;

lewens = 3;

rood = 0; groen = 0; blauw = 0;

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

lewens1 = 255;

lewens2 = 255; lewens3 = 255;

vlak1 = 255;

vlak2 = 0; vlak3 = 0; vlak4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// gebruik dit om belangrike inligting op die seriële monitor te vertoon

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: Bou

Bou
Bou
Bou
Bou
Bou
Bou
Bou
Bou

U wil natuurlik 'n goeie bou vir hierdie projek hê. hierdie deel is redelik oop vir interpretasie, maar daar is 'n paar dinge om in gedagte te hou: - hou die voorpaneel dun, sodat u steeds u leds daardeur kan steek en die IR -ontvanger werk nog steeds

- Hou genoeg ruimte in die bou vir die arduino en 'n soldeerbord

- Maak seker dat daar 'n gat in die rug is vir die krag van die arduino

Ek het 'n rowwe skema vir die bedrading bygevoeg.

Sterkte, en om pret te hê!

Aanbeveel: