Spisu treści:

Zdalna gra w odgadywanie kolorów na podczerwień: 3 kroki
Zdalna gra w odgadywanie kolorów na podczerwień: 3 kroki

Wideo: Zdalna gra w odgadywanie kolorów na podczerwień: 3 kroki

Wideo: Zdalna gra w odgadywanie kolorów na podczerwień: 3 kroki
Wideo: JEMY JEDZENIE TYLKO JEDNEGO KOLORU 💛🍌 Roblox 2024, Lipiec
Anonim
Zdalna gra w odgadywanie kolorów na podczerwień
Zdalna gra w odgadywanie kolorów na podczerwień

W tej instrukcji pokażę, jak sterować diodą RGB za pomocą pilota na podczerwień i zrobić z tego zabawną grę!

Krok 1: Potrzebne części

Potrzebne części
Potrzebne części

Części, których będziesz potrzebować do tego projektu, to:

- arduino jedno - RGB Led - IR-Sensor

(ilość diod zależy od gry, ilości żyć lub) - 2 zielone diody - 1 żółta dioda - 1 pomarańczowa dioda - 3 czerwone diody

Krok 2: Kod

#włączać

int redPin = 10;

int zielonyPin = 6; int niebieskiPin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int poziomyPin3 = 12;

poziom wewnPin1 = 2;

poziom wewnPin2 = 3; poziom wewnPin3 = 4; poziom wewnPin4 = 7;

wewn. PIN_ODBIORU = 11;

IRrecv nieodwoł.(RECV_PIN); decode_results wyniki;

// wprowadź kolory

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

int numer indeksu = 0;

int kolor indeksu = 0;

wart. wewn. = 0;

int rood = 0;

int zielony = 0; int blauw = 0;

// generuj kolory

int roodLosowo = 0; int zielonyLosowo = 0; int blauwLosowo = 0;

// zmienne gry

int diff = 200;

numer poziomu int = 1;

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

int = 0;

poziom wewn1 = 255;

int poziom2 = 0; poziom wewnętrzny3 = 0; poziom wewnętrzny4 = 0;

życie międzynarodowe = 3;

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

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

pusta konfiguracja () {

Serial.początek(9600); nieodwoł.enableIRIn(); // uruchom odbiornik pinMode(redPin, OUTPUT); pinMode(zielonyPin, WYJŚCIE); pinMode (bluePin, WYJŚCIE);

pinMode(levensPin1, OUTPUT);

pinMode(levensPin2, OUTPUT); pinMode(LevensPin3, OUTPUT);

}

pusta pętla () {

if (irrecv.decode(&results)) // odbierz sygnały ze zdalnego { Serial.println(results.value, DEC); // wyświetl sygnały otrzymane z każdego naciśniętego przycisku irrecv.resume(); // odbierz następny sygnał switch(results.value){ // zamień sygnały na liczby na przyciskach i przypisz akcje do przycisków

sprawa 109562864:

addWaarde(1); przerwa;

sprawa 109562824:

addWaarde(2); przerwa;

sprawa 109562856:

addWaarde(3); przerwa;

sprawa 109562872:

addWarde(4); przerwa;

sprawa 109562820:

addWaarde(5); przerwa;

sprawa 109562852:

addWaarde(6); przerwa;

sprawa 109562868:

addWaarde(7); przerwa;

sprawa 109562828:

addWarde(8); przerwa;

sprawa 109562860:

addWaarde(9); przerwa;

sprawa 109562876:

addWaarde(0); przerwa;

sprawa 109562818: //oud ding enter/R CLK

handleInput(); przerwa;

sprawa 109562816: //oud ding power

koloruchwytu(); przerwa; case 109562878: //oud ding cancel/L CLK resetColor(); przerwa;

sprawa 109562866: //lege knop midden

losowy kolor(); przerwa;

sprawa 109562830: // pijltje naar rechts

wyświetlWszystko(); przerwa; sprawa 109562838: // esc sprawa 109562822: // zresetuj źródło AVEverything(); przerwa; }

// przypisz przyciski na pilocie do sterowania kolorem: w ten sposób gracze mogą zobaczyć, jak wyglądają kolory i jak je łączyć, // przed rozpoczęciem gry. switch(results.value){ case 109562840: rood = 255; przerwa;

sprawa 109562844:

zielony = 255; przerwa;

sprawa 109562850:

niebieski = 255; przerwa;

sprawa 109562836:

rod = 0; zielony = 0; niebieski = 0; przerwa; }

}

analogWrite(redPin, abs(255 - rood)); // sterowanie diodą LED RGB: w odwrotnej kolejności, bo moja jest podłączona odwrotnie.

analogWrite(greenPin, abs(255 - zielony)); analogWrite(bluePin, abs(255 - niebieski));

// sterowanie diodami na żywo

jeśli (żyje == 2){ levens1 = 0; } jeśli (żyje == 1){ levens2 = 0; } jeśli (żyje == 0){ levens3 = 0; } analogWrite(levensPin1, levens1); analogWrite(levensPin2, levens2); analogWrite(levensPin3, levens3);

// sterowanie diodami poziomu

if (numerpoziomu == 1){poziom1 = 255; } if (numerpoziomu == 2){poziom1 = 255; poziom2 = 255; } if (numerpoziomu == 3){poziom1 = 255; poziom2 = 255; poziom3 = 255; } if (numerpoziomu == 4){poziom1 = 255; poziom2 = 255; poziom3 = 255; poziom 4 = 255; } analogWrite(poziomPin1, poziom1); zapis analogowy(poziomPin2, poziom2); zapis analogowy(poziomPin3, poziom3); zapis analogowy(poziomPin4, poziom4);

}

void addWaarde(int value) { //dodanie wciśniętej wartości do listy

if (numer indeksu == 3) {

powrót; }

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

input[numerindeksu] = wartość; indeksNumer++; } }

void handleInput() { // zrób 'waarde'(wartość) z listy

wararde = abs(input[0] * 100 + input[1] * 10 + input[2]); wejście[0] = -1; // zresetuj wejście sygnału [1] = -1; wejście [2] = -1;

numer indeksu = 0;

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

void addColor(int wararde) { // dodaj 3-cyfrowy 'wararde' do listy

if (kolor indeksu == 3) {

powrót; }

if (kolor[kolorindeksu] == -1){

kolor[kolor indeksu] = wararde; if (kolor[kolorindeksu] > 255){ kolor[kolorindeksu] = 255; } indeksKolor++; }

}

void randomColor(){ // zmienia kolor światła na losowy i zapisuje go w zmiennych

roodRandom = losowo (0, 255);

groenRandom = losowo (0, 255);

blauwLos = losowo (0, 255);

rood = roodLosowo;

zielony = zielonyLosowo; blauw = blauwLosowo; Serial.print("roodRandom = "); Serial.println(roodLosowo); Serial.print("groenRandom = "); Serial.println(zielonyLosowo); Serial.print("blauwRandom = "); Serial.println(blauwLosowo);

}

void handleColor() { // zamień 'waarde' z listy na 'Gok' (zgadnij) zmienne

roodGok = kolor[0]; groenGok = kolor[1]; blauwGok = kolor[2]; // sprawdź, czy zmienne Gok za bardzo różnią się od rzeczywistego losowego koloru: jeśli tak, wyświetl zgadywanie przez trzy sekundy, mrugnij na zielono i ponownie zmień kolor, dodaj poziom abd zmniejsz dozwoloną różnicę // jeśli nie, wyświetl zgadnij przez trzy sekundy, mrugnij na czerwono i odejmij życie // jeśli nie ma ci żyć, gra rozpoczyna się od nowa if (abs((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff){ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); opóźnienie(3000); zapis analogowy(redPin, 255); analogZapis(zielonyPin, 0); zapis analogowy(bluePin, 255); opóźnienie(300); zapis analogowy(redPin, 255); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie(300); zapis analogowy(redPin, 255); analogZapis(zielonyPin, 0); zapis analogowy(bluePin, 255); opóźnienie(300); zapis analogowy(redPin, 255); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie(300);

Serial.print("roodGok = ");

Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok); zresetujKolor(); losowy kolor(); poziomNumer++; różnica -= 50; } else{ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); opóźnienie(3000); zapis analogowy(redPin, 0); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie(300); zapis analogowy(redPin, 255); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie(300); zapis analogowy(redPin, 0); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie(300); zapis analogowy(redPin, 255); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie(300); Serial.print("roodGok = "); Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok);

zresetujKolor();

zyje--; } if (życia == 0){ analogWrite(redPin, 0); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie (100); zapis analogowy(redPin, 255); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie (100); zapis analogowy(redPin, 0); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie (100); zapis analogowy(redPin, 255); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie (100); zapis analogowy(redPin, 0); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie (100); zapis analogowy(redPin, 255); analogZapis(zielonyPin, 255); zapis analogowy(bluePin, 255); opóźnienie (100); zresetujWszystko(); }

}

void resetColor(){ // użyj do resetowania wartości, do błędnego naciśnięcia lub każdego nowego odgadnięcia (dla pewności)

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

numer indeksu=0;

indeksKolor=0; }

void resetEverything(){ // zrestartuj grę

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

numer indeksu=0;

indeksKolor=0;

życie = 3;

rod = 0; zielony = 0; niebieski = 0;

rodLos = 0;

zielonyLos = 0; niebieskiLosowy = 0;

poziom1 = 255;

poziom2 = 255; poziom3 = 255;

poziom1 = 255;

poziom2 = 0; poziom3 = 0; poziom4 = 0;

NumerPoziomu = 1;

t = 0;

}

void displayEverything(){ // użyj tego, aby wyświetlić ważne informacje na monitorze szeregowym

Serial.print("roodGok = "); Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok); Serial.print("roodRandom = "); Serial.println(roodLosowo); Serial.print("groenRandom = "); Serial.println(zielonyLosowo); Serial.print("blauwRandom = "); Serial.println(blauwLosowo);

Serial.print("rood = ");

Serial.println(rood); Serial.print("zielony = "); Serial.println(zielony); Serial.print("blauw = "); Serial.println(niebieski);

Serial.print("wararde opgeslagen: ");

Serial.println(waarde); }

Krok 3: Buduj

Budować
Budować
Budować
Budować
Budować
Budować
Budować
Budować

Oczywiście chcesz mieć ładną wersję tego projektu. ta część jest dość otwarta na interpretację, ale należy pamiętać o kilku rzeczach: - utrzymuj cienki panel przedni, aby nadal można było w niego włożyć diody, a odbiornik podczerwieni nadal działa

- zachowaj wystarczająco dużo miejsca w kompilacji na arduino i płytkę lutowniczą

- upewnij się, że z tyłu jest otwór na moc arduino

Dodałem przybliżony schemat okablowania.

Powodzenia i miłej zabawy!

Zalecana: