İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
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!