Talaan ng mga Nilalaman:

Laro sa Hulaan ng Kulay ng IR-Remote na Kulay: 3 Mga Hakbang
Laro sa Hulaan ng Kulay ng IR-Remote na Kulay: 3 Mga Hakbang

Video: Laro sa Hulaan ng Kulay ng IR-Remote na Kulay: 3 Mga Hakbang

Video: Laro sa Hulaan ng Kulay ng IR-Remote na Kulay: 3 Mga Hakbang
Video: Nagtatrabaho ako sa Private Museum for the Rich and Famous. Mga kwentong katatakutan. Horror. 2024, Hulyo
Anonim
Laro sa Hulaan ng Kulay ng IR-Remote na Kulay
Laro sa Hulaan ng Kulay ng IR-Remote na Kulay

Sa itinuturo na ito, ipapakita ko sa iyo kung paano makontrol ang isang RGB na humantong gamit ang isang IR-remote, at gumawa ng isang masayang laro dito!

Hakbang 1: Kailangan ng Mga Bahagi

Mga Bahaging Kailangan
Mga Bahaging Kailangan

Ang mga bahagi na kakailanganin mo para sa proyektong ito ay:

- Arduino isa- RGB Led- IR-Sensor

(ang led count ay depende sa laro, ang dami ng buhay o) - 2 green leds- 1 dilaw na led - 1 orange led- 3 red leds

Hakbang 2: Code

# isama

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); mga resulta sa pag-decode_resulta;

// mga kulay ng pag-input

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

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int gren = 0; int blauw = 0;

// makabuo ng mga kulay

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

// variable ng laro

int diff = 200;

int levelNumber = 1;

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

int t = 0;

int antas1 = 255;

int antas2 = 0; int antas3 = 0; int antas4 = 0;

int buhay = 3;

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

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

walang bisa ang pag-setup () {

Serial.begin (9600); irrecv.enableIRIn (); // simulan ang receiver pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

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

}

void loop () {

kung (irrecv.decode (& mga resulta)) // makatanggap ng mga signal mula sa remote na {Serial.println (results.value, DEC); // ipakita ang mga signal na natanggap mula sa bawat pinindot na pindutan na irrecv.resume (); // makatanggap ng susunod na switch ng signal (results.value) {// buksan ang mga signal sa mga numero sa mga pindutan, at magtalaga ng mga pagkilos sa mga pindutan

kaso 109562864:

addWaarde (1); pahinga;

kaso 109562824:

addWaarde (2); pahinga;

kaso 109562856:

addWaarde (3); pahinga;

kaso 109562872:

addWaarde (4); pahinga;

kaso 109562820:

addWaarde (5); pahinga;

kaso 109562852:

addWaarde (6); pahinga;

kaso 109562868:

addWaarde (7); pahinga;

kaso 109562828:

addWaarde (8); pahinga;

kaso 109562860:

addWaarde (9); pahinga;

kaso 109562876:

addWaarde (0); pahinga;

kaso 109562818: // oud ding enter / R CLK

hawakanInput (); pahinga;

kaso 109562816: // oud ding power

hawakanColor (); pahinga; kaso 109562878: // oud ding cancel / L CLK resetColor (); pahinga;

kaso 109562866: // lege knop midden

randomColor (); pahinga;

kaso 109562830: // pijltje naar rechts

displayEverything (); pahinga; case 109562838: // esc case 109562822: // AV source resetEverything (); pahinga; }

// magtalaga ng mga pindutan sa remote para sa pagkontrol sa kulay: sa ganitong paraan, makikita ng mga manlalaro kung ano ang hitsura ng mga kulay at kung paano pagsamahin ang mga ito, // bago simulan ang isang laro. switch (results.value) {case 109562840: rood = 255; pahinga;

kaso 109562844:

singit = 255; pahinga;

kaso 109562850:

blauw = 255; pahinga;

kaso 109562836:

rood = 0; singit = 0; blauw = 0; pahinga; }

}

analogWrite (redPin, abs (255 - rood)); // pagkontrol sa RGB na humantong: sa kabaligtaran, dahil ang minahan ay wired sa kabaligtaran.

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

// pagkontrol sa live leds

kung (nabubuhay == 2) {levens1 = 0; } kung (nabubuhay == 1) {levens2 = 0; } kung (nabubuhay == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// pagkontrol sa antas ng mga leds

kung (levelNumber == 1) {level1 = 255; } kung (levelNumber == 2) {level1 = 255; antas2 = 255; } kung (levelNumber == 3) {level1 = 255; antas2 = 255; antas3 = 255; } kung (levelNumber == 4) {level1 = 255; antas2 = 255; antas3 = 255; antas4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

walang bisa ang addWaarde (int halaga) {// magdagdag ng pinindot na halaga sa listahan

kung (indexNumber == 3) {

bumalik; }

kung (input [indexNumber] == -1) {

input [indexNumber] = halaga; indexNumber ++; }}

void handleInput () {// gumawa ng 'waarde' (halaga) sa listahan

waarde = abs (input [0] * 100 + input [1] * 10 + input [2]); input [0] = -1; // reset de signalen input [1] = -1; input [2] = -1;

indexNumber = 0;

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

void addColor (int waarde) {// idagdag ang 3-digit na 'waarde' sa isang listahan

kung (indexColor == 3) {

bumalik; }

kung (kulay [indexColor] == -1) {

kulay [indexColor] = waarde; kung (kulay [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// gawin ang ilaw na isang random na kulay at i-save ito sa mga variable

roodRandom = random (0, 255);

groenRandom = random (0, 255);

blauwRandom = random (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 () {// turn the 'waarde' from the list into 'Gok' (hulaan) variable

roodGok = kulay [0]; groenGok = kulay [1]; blauwGok = kulay [2]; // suriin kung ang mga variable ng Gok ay naiiba nang magkakaiba sa tunay na random na kulay: kung gayon, ipakita ang hulaan sa loob ng tatlong segundo, kumurap berde at baguhin ulit ang kulay, magdagdag ng isang antas na abd gawing mas maliit ang pinapayagan na pagkakaiba // kung hindi, ipakita ang hulaan sa loob ng tatlong segundo, blink red at ibawas ang isang buhay // kung wala ka sa buhay, magsisimula muli ang laro kung (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); pagkaantala (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); pagkaantala (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); pagkaantala (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (300);

Serial.print ("roodGok =");

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

resetColor ();

buhay--; } kung (nabubuhay == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); pagkaantala (100); i-reset ang Lahat (); }

}

void resetColor () {// gamitin para sa mga halaga ng pag-reset, para sa isang maling pindutin o bawat bagong hula (para lamang sa katiyakan)

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

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// i-restart ang laro

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

indexNumber = 0;

indexColor = 0;

nabubuhay = 3;

rood = 0; singit = 0; blauw = 0;

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

antas1 = 255;

antas2 = 0; antas3 = 0; antas4 = 0;

levelNumber = 1;

t = 0;

}

void displayEverything () {// gamitin ito upang maipakita ang mahalagang impormasyon sa serial monitor

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); }

Hakbang 3: Bumuo

Magtayo
Magtayo
Magtayo
Magtayo
Magtayo
Magtayo
Magtayo
Magtayo

Malinaw na nais mo ang isang magandang build para sa proyektong ito. ang bahaging ito ay bukas sa interpretasyon, ngunit may ilang mga bagay na dapat tandaan sa ito: - panatilihing payat ang front panel, upang maaari mo pa ring idikit ang iyong mga leds dito at gagana pa rin ang IR-receiver

- panatilihin ang sapat na puwang sa build para sa arduino at isang solder board

- tiyakin na mayroong isang butas sa likod para sa lakas ng arduino

Nagdagdag ako ng isang magaspang na pamamaraan para sa mga kable.

Good luck, at magsaya!

Inirerekumendang: