Përmbajtje:

Lojë IR-Remote Color Guessing: 3 hapa
Lojë IR-Remote Color Guessing: 3 hapa

Video: Lojë IR-Remote Color Guessing: 3 hapa

Video: Lojë IR-Remote Color Guessing: 3 hapa
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Nëntor
Anonim
Lojë IR-Remote Remote Color Guessing
Lojë IR-Remote Remote Color Guessing

Në këtë udhëzues, unë do t'ju tregoj se si të kontrolloni një led RGB duke përdorur një telekomandë IR dhe të bëni një lojë zbavitëse prej tij!

Hapi 1: Pjesët e nevojshme

Pjesët e nevojshme
Pjesët e nevojshme

Pjesët që do t'ju nevojiten për këtë projekt janë:

- arduino one- RGB Led- IR-Sensor

(numërimi i led varet nga loja, sasia e jetëve ose)- 2 led të gjelbër- 1 led të verdhë- 1 led portokalli- 3 led të kuq

Hapi 2: Kodi

#përfshi

int redPin = 10;

int greenPin = 6; int bluPin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

niveli intPin1 = 2;

niveli intPin2 = 3; niveli intPin3 = 4; niveli intPin4 = 7;

int RECV_PIN = 11;

IRrecv irrecv (RECV_PIN); rezultatet e deshifrimit të rezultateve;

// ngjyrat e hyrjes

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

int indexNumer = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// gjeneroni ngjyra

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

// variablat e lojës

int ndrysh = 200;

niveli int Numri = 1;

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

int t = 0;

niveli int1 = 255;

niveli int2 = 0; niveli int3 = 0; niveli int4 = 0;

int jetën = 3;

int levens1 = 255; int levens2 = 255; int levens3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

void setup () {

Serial.filloj (9600); irrecv.enableIRIn (); // filloni pinMode të marrësit (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluPin, OUTPUT);

pinMode (levensPin1, OUTPUT);

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

}

lak void () {

në qoftë se (irrecv.decode (& results)) // merr sinjale nga telekomanda {Serial.println (results.value, DEC); // shfaq sinjalet e marra nga secili buton i shtypur irrecv.resume (); // merrni çelësin tjetër të sinjalit (rezultatet.vlera) {// shndërroni sinjalet në numrat në butona dhe caktoni veprime butonave

rasti 109562864:

addWaarde (1); pushim;

rasti 109562824:

addWaarde (2); pushim;

rasti 109562856:

addWaarde (3); pushim;

rasti 109562872:

addWaarde (4); pushim;

rasti 109562820:

addWaarde (5); pushim;

rasti 109562852:

addWaarde (6); pushim;

rasti 109562868:

addWaarde (7); pushim;

rasti 109562828:

addWaarde (8); pushim;

rasti 109562860:

addWaarde (9); pushim;

rasti 109562876:

addWaarde (0); pushim;

rasti 109562818: // oud ding enter/R CLK

handleInput (); pushim;

rasti 109562816: // fuqia e dingut me oud

handleColor (); pushim; rast 109562878: // ud ding cancel/L CLK resetColor (); pushim;

rast 109562866: // lege knop midden

randomColor (); pushim;

rasti 109562830: // pijltje naar rechts

displayEverything (); pushim; rast 109562838: // esc case 109562822: // burimi AV resetEverything (); pushim; }

// caktoni butona në telekomandë për të kontrolluar ngjyrën: në këtë mënyrë, lojtarët mund të shohin se si ngjyrat duken dhe si t'i kombinojnë ato, // para fillimit të një loje. kaloni (results.value) {case 109562840: rood = 255; pushim;

rasti 109562844:

groen = 255; pushim;

rasti 109562850:

blauw = 255; pushim;

rasti 109562836:

rood = 0; groen = 0; blauw = 0; pushim; }

}

analogWrite (redPin, abs (255 - rood)); // kontrollimi i drejtimit të RGB: në të kundërt, sepse imi është i lidhur në të kundërt.

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

// kontrollimi i drejtimeve të drejtpërdrejta

nëse (jeton == 2) {levens1 = 0; } nëse (jeton == 1) {levens2 = 0; } nëse (jeton == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// kontrollimi i niveleve led

nëse (niveliNumri == 1) {niveli1 = 255; } if (levelNumber == 2) {level1 = 255; niveli2 = 255; } if (levelNumber == 3) {level1 = 255; niveli2 = 255; niveli3 = 255; } if (levelNumber == 4) {level1 = 255; niveli2 = 255; niveli3 = 255; niveli4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

void addWaarde (vlera int) {// shtoni vlerë të shtypur në listë

nëse (indeksi Numri == 3) {

kthim; }

nëse (input [indexNumber] == -1) {

hyrja [Numri i indeksit] = vlera; indeksNumri ++; }}

void handleInput () {// bëni një 'waarde' (vlerë) nga lista

waarde = abs (hyrje [0] * 100 + hyrje [1] * 10 + hyrje [2]); hyrje [0] = -1; // rivendos hyrjen e sinjalit [1] = -1; hyrje [2] = -1;

indeksi Numri = 0;

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

void addColor (int waarde) {// shtoni 'waarde' 3-shifror në një listë

nëse (indexColor == 3) {

kthim; }

nëse (ngjyra [indexColor] == -1) {

ngjyra [indexColor] = vardis; nëse (ngjyra [indexColor]> 255) {ngjyra [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// bëni që drita të kthehet në një ngjyrë të rastësishme dhe ta ruani atë në ndryshore

roodRandom = e rastësishme (0, 255);

groenRandom = e rastit (0, 255);

blauwRandom = e rastësishme (0, 255);

rood = roodRandom;

groen = groenRandomte; blauw = blauwRandom; Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (i rastësishëm); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);

}

void handleColor () {// kthejeni 'waarde' nga lista në variabla 'Gok' (me mend)

roodGok = ngjyra [0]; groenGok = ngjyra [1]; blauwGok = ngjyra [2]; // kontrolloni nëse ndryshoret Gok ndryshojnë shumë me ngjyrën e rastësishme reale: nëse po, shfaqni supozimin për tre sekonda, vezulloni jeshile dhe ndryshoni përsëri ngjyrën, shtoni një nivel abd dhe bëni ndryshimin e lejuar më të vogël // nëse jo, shfaqni mendoni për tre sekonda, mbyllni sytë me të kuqe dhe zbritni një jetë // nëse jeni jashtë jetës, loja fillon përsëri nëse (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= ndrysh) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluPin, abs (255 - blauwGok)); vonesë (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluPin, 255); vonesë (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesë (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluPin, 255); vonesë (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesë (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); niveliNumri ++; ndryshim -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluPin, abs (255 - blauwGok)); vonesë (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesë (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesë (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesë (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesë (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

jeton--; } if (jeton == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesa (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesa (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesa (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesa (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesa (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluPin, 255); vonesa (100); resetEverything (); }

}

void resetColor () {// përdoret për vlerat e rivendosjes, për një shtypje të gabuar ose çdo supozim të ri (vetëm për siguri)

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

indeksiNumri = 0;

indexColor = 0; }

void resetEverything () {// rinis lojën

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

indeksiNumri = 0;

indexColor = 0;

jeton = 3;

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

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

niveli1 = 255;

niveli2 = 0; niveli3 = 0; niveli4 = 0;

niveliNumri = 1;

t = 0;

}

void displayEverything () {// përdorni këtë për të shfaqur informacione të rëndësishme në monitorin serik

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 (i rastësishëm); 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); }

Hapi 3: Ndërtoni

Ndërto
Ndërto
Ndërto
Ndërto
Ndërto
Ndërto
Ndërto
Ndërto

Ju padyshim doni një ndërtim të bukur për këtë projekt. kjo pjesë është goxha e hapur për interpretim, por ka disa gjëra që duhet të keni parasysh me këtë: - mbajeni panelin e përparmë të hollë, kështu që ju ende mund t'i mbani ledet tuaja përmes tij dhe marrësi IR akoma punon

- mbani hapësirë të mjaftueshme në ndërtesë për arduino dhe një dërrasë lidhëse

- sigurohuni që ka një vrimë në pjesën e pasme për fuqinë e arduino

Kam shtuar një skemë të përafërt për instalimet elektrike.

Fat i mirë, dhe argëtohuni!

Recommended: