İçindekiler:

IR-Uzaktan Renk Tahmin Oyunu: 3 Adım
IR-Uzaktan Renk Tahmin Oyunu: 3 Adım

Video: IR-Uzaktan Renk Tahmin Oyunu: 3 Adım

Video: IR-Uzaktan Renk Tahmin Oyunu: 3 Adım
Video: Dünyanın en zor zeka oyunu daha çözebilen yok 😳😳 2024, Kasım
Anonim
IR-Uzaktan Renk Tahmin Oyunu
IR-Uzaktan Renk Tahmin Oyunu

Bu talimatta size bir IR uzaktan kumanda kullanarak bir RGB led'i nasıl kontrol edeceğinizi ve bundan eğlenceli bir oyun çıkaracağınızı göstereceğim!

Adım 1: Gerekli Parçalar

Gerekli Parçalar
Gerekli Parçalar

Bu proje için ihtiyacınız olacak parçalar:

- arduino one- RGB Led- IR-Sensör

(led sayısı oyuna, can miktarına göre veya) - 2 yeşil led - 1 sarı led - 1 turuncu led - 3 kırmızı led

2. Adım: Kodlayın

#Dahil etmek

int redPin = 10;

int yeşilPin = 6; int bluePin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

int seviyePin1 = 2;

int seviyePin2 = 3; int seviyePin3 = 4; int seviyePin4 = 7;

int RECV_PIN = 11;

IRrecv geri dönüş(RECV_PIN); decode_results sonuçları;

// giriş renkleri

int girdi = {-1, -1, -1}; int renk = {-1, -1, -1};

int dizinSayısı = 0;

int dizinRenk = 0;

int waarde = 0;

int kök = 0;

int yeşil = 0; int blauw = 0;

// renkler üret

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

// oyun değişkenleri

int fark = 200;

int seviyeSayı = 1;

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

int t = 0;

int seviye1 = 255;

int seviye2 = 0; int seviye3 = 0; int seviye4 = 0;

int can = 3;

int seviye1 = 255; int levens2 = 255; int levens3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

geçersiz kurulum() {

Seri.başla(9600); irrecv.enableIRIn(); // alıcıyı başlat pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, ÇIKIŞ);

pinMode(levensPin1, OUTPUT);

pinMode(levensPin2, ÇIKIŞ); pinMode(levensPin3, ÇIKIŞ);

}

boşluk döngüsü () {

if (irrecv.decode(&results)) // uzaklardan sinyalleri al { Serial.println(results.value, DEC); // basılan her bir butondan alınan sinyalleri göster irrecv.resume(); // sonraki sinyali al anahtarı(results.value){ // sinyalleri butonlardaki sayılara çevirin ve butonlara eylemler atayın

vaka 109562864:

addWaarde(1); kırmak;

vaka 109562824:

addWaarde(2); kırmak;

vaka 109562856:

addWaarde(3); kırmak;

vaka 109562872:

addWaarde(4); kırmak;

vaka 109562820:

addWaarde(5); kırmak;

vaka 109562852:

addWaarde(6); kırmak;

vaka 109562868:

addWaarde(7); kırmak;

vaka 109562828:

addWaarde(8); kırmak;

vaka 109562860:

addWaarde(9); kırmak;

vaka 109562876:

addWaarde(0); kırmak;

case 109562818: //oud ding enter/R CLK

handInput(); kırmak;

case 109562816: // ud gücü

tutamakColor(); kırmak; case 109562878: //ödün iptal/L CLK resetColor(); kırmak;

case 109562866: //lege knop midden

rastgele renk(); kırmak;

vaka 109562830: // pijltje naar rechts

displayEverything(); kırmak; case 109562838: // esc case 109562822: // AV kaynağı resetEverything(); kırmak; }

// rengi kontrol etmek için uzaktan kumandadaki düğmeleri atayın: bu şekilde oyuncular renklerin nasıl göründüğünü ve nasıl birleştirileceğini görebilir, // oyuna başlamadan önce. switch(results.value){ case 109562840: rood = 255; kırmak;

vaka 109562844:

yeşil = 255; kırmak;

durum 109562850:

blauw = 255; kırmak;

vaka 109562836:

yol = 0; yeşil = 0; blauw = 0; kırmak; }

}

analogWrite(redPin, abs(255 - rood)); // RGB led'i kontrol etme: ters, çünkü benimki ters bağlanmış.

analogWrite(greenPin, abs(255 - yeşil)); analogWrite(bluePin, abs(255 - blauw));

// canlı ledleri kontrol etme

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

// seviye ledlerini kontrol etme

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

}

void addWaarde(int değeri) { // basılan değeri listeye ekle

if (indexNumber == 3) {

dönüş; }

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

input[indexNumber] = değer; dizinSayı++; } }

void handleInput() { // listeden bir 'waarde'(değer) çıkar

waarde = abs(giriş[0] * 100 + giriş[1] * 10 + giriş[2]); girdi[0] = -1; // sinyal girişini sıfırla[1] = -1; girdi[2] = -1;

indeksSayısı = 0;

Serial.print("geçerli işlem: "); Serial.println(waarde); addColor(waarde); }

void addColor(int waarde) { // 3 basamaklı 'waarde'yi bir listeye ekleyin

if (indexColor == 3) {

dönüş; }

if (renk[indexColor] == -1){

color[indexColor] = waarde; if (renk[indexColor] > 255){ color[indexColor] = 255; } indexColor++; }

}

void randomColor(){ // ışığın rastgele bir renge dönüşmesini sağlayın ve değişkenlere kaydedin

roodRandom = rastgele(0, 255);

groenRandom = rastgele(0, 255);

blauwRandom = rastgele(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() { // listeden 'waarde'yi 'Gok' (tahmin) değişkenlerine çevirin

roodGok = renk[0]; groenGok = renk[1]; blauwGok = renk[2]; // Gok değişkenlerinin gerçek rastgele renkle çok fazla farklılık gösterip göstermediğini kontrol edin: eğer öyleyse, tahmini üç saniye görüntüleyin, yeşil renkte yanıp sönün ve rengi tekrar değiştirin, bir seviye ekleyin ve izin verilen farkı küçültün // değilse, üç saniye tahmin et, kırmızı göz kırp ve bir can çıkar // canın bittiyse, oyun yeniden başlar if (abs((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff){ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); gecikme(3000); analogWrite(redPin, 255); analogWrite(greenPin, 0); analogWrite(bluePin, 255); gecikme(300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(300); analogWrite(redPin, 255); analogWrite(greenPin, 0); analogWrite(bluePin, 255); gecikme(300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(300);

Serial.print("roodGok = ");

Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok); resetColor(); rastgele renk(); seviyeSayı++; fark -= 50; } başka{ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); gecikme(3000); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(300); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(300); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(300); Serial.print("roodGok = "); Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok);

resetColor();

hayatları--; } if (yaşar == 0){ analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(100); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(100); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(100); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(100); analogWrite(redPin, 0); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(100); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); gecikme(100); Herşeyi sıfırla(); }

}

void resetColor(){ // değerleri sıfırlamak, yanlış basmak veya her yeni tahmin için kullanın (sadece kesinlik için)

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

indexNumber=0;

indeksRenk=0; }

void resetEverything(){ // oyunu yeniden başlat

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

indexNumber=0;

indeksRenk=0;

hayat = 3;

yol = 0; yeşil = 0; blauw = 0;

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

seviye1 = 255;

levens2 = 255; levens3 = 255;

seviye1 = 255;

seviye2 = 0; seviye3 = 0; seviye4 = 0;

seviyeSayı = 1;

t = 0;

}

void displayEverything(){ // seri monitörde önemli bilgileri görüntülemek için bunu kullanın

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=");

Seri.println(rood); Serial.print("Green = "); Seri.println(yeşil); Serial.print("blauw = "); Serial.println(blauw);

Serial.print("geçerli işlem: ");

Serial.println(waarde); }

3. Adım: Oluşturun

Yapı
Yapı
Yapı
Yapı
Yapı
Yapı
Yapı
Yapı

Belli ki bu proje için güzel bir yapı istiyorsunuz. bu kısım yoruma oldukça açık, ancak bununla ilgili akılda tutulması gereken bazı şeyler var: - ön paneli ince tutun, böylece ledlerinizi yine de içinden geçirebilirsiniz ve IR alıcısı çalışmaya devam eder

- arduino ve lehim tahtası için yapıda yeterli alan bırakın

- arduino'nun gücü için arkada bir delik olduğundan emin olun

Kablolama için kaba bir şema ekledim.

İyi şanslar ve iyi eğlenceler!

Önerilen: