İçindekiler:
Video: IR-Uzaktan Renk Tahmin Oyunu: 3 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
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
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
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:
Basit Bir Tahmin Oyunu - Python + XBees + Arduino: 10 Adım
Basit Bir Tahmin Oyunu - Python + XBees + Arduino: Oyun şu şekilde çalışır: 'a' – 'h'-> Doğru harfi tahmin et: Kazandın! ?-> Yanlış harfi tahmin et: Oyun bitti mi?-> 'a' - 'h' dışında başka bir karakter tahmin edin: Oyun bitti mi? Arduino'nuz size izin verecek
Arduino RGB Renk Seçici – Gerçek Hayattaki Nesnelerden Renk Seçin: 7 Adım (Resimlerle)
Arduino RGB Renk Seçici - Gerçek Hayattaki Nesnelerden Renk Seçin: Bu Arduino tabanlı RGB renk seçici ile fiziksel nesnelerden kolayca renk seçin, gerçek hayattaki nesnelerde gördüğünüz renkleri PC'nizde veya cep telefonunuzda yeniden oluşturmanıza olanak tanır. Ucuz bir TCS347 kullanarak nesnenin rengini taramak için bir düğmeye basmanız yeterlidir
Basit Python Sayısı Tahmin Oyunu: 11 Adım
Basit Python Sayı Tahmin Oyunu: Bu dersimizde Pycharm uygulamasında basit Python sayı tahmin oyununun nasıl oluşturulacağını öğreteceğiz. Python, hem yeni başlayanlar hem de uzmanlar için harika bir betik dilidir. Python'daki kodlama stilinin okunması ve takip edilmesi kolaydır
Python Tahmin Oyunu: 9 Adım
Python Tahmin Oyunu: Aşağıdaki talimatlar, rastgele modülü kullanarak bir programın nasıl yazılacağı ve kullanıcı ile etkileşime giren bir tahmin oyunu oluşturma konusunda adım adım rehberlik sağlar. Başlamak için bilgisayarınızda python kurulu olması ve ayrıca op
Biraz Düşünmek Nedir? BBC Microbit ile Basit Bir Tahmin Oyunu Yapın!: 10 Adım
Biraz Düşünmek Nedir? BBC Microbit ile Basit Bir Tahmin Oyunu Yapın!: Birkaç çevrimiçi makaledeki olumlu değerlendirmeleri okuduktan sonra birkaç BBC Microbit aldım. birkaç saat ve wi geldi