Мазмуну:

IR-Remote Color Guessing Game: 3 кадам
IR-Remote Color Guessing Game: 3 кадам

Video: IR-Remote Color Guessing Game: 3 кадам

Video: IR-Remote Color Guessing Game: 3 кадам
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Ноябрь
Anonim
IR-Remote Color Guessing Game
IR-Remote Color Guessing Game

Бул көрсөтмөдө мен сизге IR-пультун колдонуп RGBди кантип башкарууну жана андан кызыктуу оюн жасоону көрсөтөм!

1 -кадам: Тетиктер керек

Тетиктер керек
Тетиктер керек

Бул долбоор үчүн сизге керектүү бөлүктөр:

- arduino one- RGB Led- IR-сенсор

(лед саны оюнга, өмүрдүн санына жараша болот)- 2 жашыл лед- 1 сары лед- 1 кызгылт сары- 3 кызыл лед

2 -кадам: Код

#кошуу

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); decode_results жыйынтыктары;

// киргизүү түстөрү

int киргизүү = {-1, -1, -1}; int color = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// түстөрдү жаратуу

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

// оюн өзгөрмөлөрү

int diff = 200;

int levelNumber = 1;

int деңгээл = {-1, -1, -1, -1};

int t = 0;

int level1 = 255;

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

int life = 3;

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

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

жараксыз орнотуу () {

Serial.begin (9600); irrecv.enableIRIn (); // pinMode алуучусун баштоо (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

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

}

void loop () {

if (irrecv.decode (& results)) // сигналдарды алыстан алууну {Serial.println (results.value, DEC); // басылган ар бир баскычтан алынган сигналдарды көрсөтүү irrecv.resume (); // кийинки сигнал которуштурууну алуу (results.value) {// сигналдарды баскычтардагы сандарга айландыруу жана баскычтарга аракеттерди дайындоо

иш 109562864:

addWaarde (1); тыныгуу;

иш 109562824:

addWaarde (2); тыныгуу;

иши 109562856:

addWaarde (3); тыныгуу;

иши 109562872:

addWaarde (4); тыныгуу;

иш 109562820:

addWaarde (5); тыныгуу;

иши 109562852:

addWaarde (6); тыныгуу;

иш 109562868:

addWaarde (7); тыныгуу;

иш 109562828:

addWaarde (8); тыныгуу;

иш 109562860:

addWaarde (9); тыныгуу;

иш 109562876:

addWaarde (0); тыныгуу;

case 109562818: // oud ding enter/R CLK

handleInput (); тыныгуу;

case 109562816: // oud ding power

handleColor (); тыныгуу; case 109562878: // oud ding жок кылуу/L CLK resetColor (); тыныгуу;

case 109562866: // lege knop midden

randomColor (); тыныгуу;

case 109562830: // pijltje naar rechts

displayEverything (); тыныгуу; case 109562838: // esc case 109562822: // AV source resetEverything (); тыныгуу; }

// түстү башкаруу үчүн алыстан башкаруу баскычтарын дайындоо: ушундай жол менен, оюнчулар түстөрдүн кандай экенин жана аларды кантип айкалыштыруу керек экенин көрө алышат, // оюнду баштоодон мурун. switch (results.value) {case 109562840: rood = 255; тыныгуу;

иши 109562844:

groen = 255; тыныгуу;

иш 109562850:

blauw = 255; тыныгуу;

иш 109562836:

rood = 0; groen = 0; blauw = 0; тыныгуу; }

}

analogWrite (redPin, abs (255 - rood)); // контролдоочу RGB алып келди: тескерисинче, анткени меники тескери зымдуу.

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

// жандуу леддерди көзөмөлдөө

if (yaşayır == 2) {levens1 = 0; } if (yaşayır == 1) {levens2 = 0; } if (yaşayır == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// көзөмөлдөөчү деңгээл леддери

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

}

void addWaarde (int value) {// басылган маанини тизмеге кошуу

эгер (indexNumber == 3) {

кайтуу; }

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

киргизүү [indexNumber] = мааниси; indexNumber ++; }}

void handleInput () {// тизмеден 'waarde' (маани) жасаңыз

waarde = abs (киргизүү [0] * 100 + киргизүү [1] * 10 + киргизүү [2]); киргизүү [0] = -1; // баштапкы абалга келтирүү [1] = -1; киргизүү [2] = -1;

indexNumber = 0;

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

void addColor (int waarde) {// 3 орундуу 'waarde' тизмесине кошуу

эгер (indexColor == 3) {

кайтуу; }

эгер (түс [indexColor] == -1) {

түс [indexColor] = күңүрт; if (color [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// жарыкты туш келди түскө айлантып, аны өзгөрмөлөргө сактап коюңуз

roodRandom = кокустук (0, 255);

groenRandom = кокустук (0, 255);

blauwRandom = кокустук (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 () {// тизмеден 'waarde'ди' Gok '(болжол) өзгөрмөлөрүнө айландыруу

roodGok = түс [0]; groenGok = түс [1]; blauwGok = түс [2]; // Gok өзгөрмөлөрү чыныгы кокустук түс менен өтө эле айырмаланып турганын текшериңиз: эгер андай болсо, божомолду үч секундага чейин көрсөтүп, жашыл ирмеп, түсүн кайра өзгөртүп, уруксат берилген айырманы кичирейтүү үчүн abd деңгээлин кошуңуз // үч секундга болжолдоп көрүңүз, кызыл көздү ирмеп, жашооңузду чыгарып салыңыз // эгер сиз өмүрүңүздөн ажырап калсаңыз, оюн кайра башталат, эгерде (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); кечигүү (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); кечигүү (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечигүү (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); кечигүү (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечигүү (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); levelNumber ++; айырма -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); кечигүү (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечигүү (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечигүү (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечигүү (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечигүү (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

жашайт--; } эгер (жашайт == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечиктирүү (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечиктирүү (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечиктирүү (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечиктирүү (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечиктирүү (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); кечиктирүү (100); resetEverything (); }

}

void resetColor () {// маанилерди баштапкы абалга келтирүү үчүн, туура эмес басуу же ар бир жаңы божомол үчүн колдонуу (тактык үчүн)

түс [0] = -1; түс [1] = -1; түс [2] = -1;

indexNumber = 0;

indexColor = 0; }

void resetEverything () {// оюнду кайра баштоо

түс [0] = -1; түс [1] = -1; түс [2] = -1;

indexNumber = 0;

indexColor = 0;

жашоо = 3;

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

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

level1 = 255;

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

levelNumber = 1;

t = 0;

}

void displayEverything () {// муну сериялык монитордо маанилүү маалыматты көрсөтүү үчүн колдонуңуз

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

3 -кадам: куруу

Build
Build
Build
Build
Build
Build
Build
Build

Сиз, албетте, бул долбоор үчүн жакшы курууну каалайсыз. бул бөлүк чечмелөө үчүн абдан ачык, бирок муну эстен чыгарбоо керек: - алдыңкы панелди жука кармаңыз, андыктан сиз дагы эле леддеринизди илип койсоңуз болот жана IR алуучу дагы деле иштейт

- arduino жана ширетүү тактасы үчүн курулушта жетиштүү орун калтырыңыз

- ардуинонун күчү үчүн артында тешик бар экенин текшериңиз

Мен зымдардын орой схемасын коштум.

Ийгилик, көңүл ачыңыз!

Сунушталууда: