2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Dalam instruksi ini, saya akan menunjukkan kepada Anda cara mengontrol LED RGB menggunakan IR-remote, dan membuat permainan yang menyenangkan darinya!
Langkah 1: Bagian yang Dibutuhkan
Bagian yang Anda perlukan untuk proyek ini adalah:
- arduino one- RGB Led- IR-Sensor
(jumlah led tergantung pada permainan, jumlah nyawa atau) - 2 led hijau - 1 led kuning - 1 led oranye - 3 led merah
Langkah 2: Kode
#termasuk
int pin merah = 10;
int pin hijau = 6; int pin biru = 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 irecv(RECV_PIN); hasil decode_results;
// masukan warna
int masukan = {-1, -1, -1}; int warna = {-1, -1, -1};
int angka indeks = 0;
int indeksWarna = 0;
int waarde = 0;
int batang = 0;
int groen = 0; int blauw = 0;
// menghasilkan warna
int roodRandom = 0; int groenAcak = 0; int blauwAcak = 0;
// variabel permainan
int perbedaan = 200;
int tingkatNumber = 1;
int tingkat = {-1, -1, -1, -1};
int t = 0;
int tingkat1 = 255;
int tingkat2 = 0; int tingkat3 = 0; int tingkat4 = 0;
int kehidupan = 3;
int levens1 = 255; int levens2 = 255; int levens3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
batalkan pengaturan() {
Serial.begin(9600); irrecv.enableIRIn(); // memulai mode pin penerima(redPin, OUTPUT); pinMode(pin hijau, OUTPUT); pinMode(bluePin, OUTPUT);
pinMode(levensPin1, OUTPUT);
pinMode(levensPin2, OUTPUT); pinMode(levensPin3, OUTPUT);
}
lingkaran kosong() {
if (irrecv.decode(&results)) // menerima sinyal dari remote { Serial.println(results.value, DEC); // menampilkan sinyal yang diterima dari setiap tombol yang ditekan irrecv.resume(); // menerima sakelar sinyal berikutnya(results.value){ // mengubah sinyal menjadi angka pada tombol, dan menetapkan tindakan ke tombol
kasus 109562864:
addWaarde(1); merusak;
kasus 109562824:
addWaarde(2); merusak;
kasus 109562856:
addWaarde(3); merusak;
kasus 109562872:
addWaarde(4); merusak;
kasus 109562820:
addWaarde(5); merusak;
kasus 109562852:
addWaarde(6); merusak;
kasus 109562868:
addWaarde(7); merusak;
kasus 109562828:
addWaarde(8); merusak;
kasus 109562860:
addWaarde(9); merusak;
kasus 109562876:
addWaarde(0); merusak;
case 109562818: //oud ding enter/R CLK
menanganiMasukan(); merusak;
kasus 109562816: //daya oud ding
menanganiWarna(); merusak; case 109562878: //oud ding cancel/L CLK resetColor(); merusak;
kasus 109562866: //lege knop midden
warna acak(); merusak;
kasus 109562830: // pijltje naar rechts
tampilanSemua(); merusak; kasus 109562838: // esc kasus 109562822: // sumber AV resetEverything(); merusak; }
// menetapkan tombol pada remote untuk mengontrol warna: dengan cara ini, pemain dapat melihat seperti apa warna itu dan bagaimana menggabungkannya, // sebelum memulai permainan. switch(results.value){ kasus 109562840: rood = 255; merusak;
kasus 109562844:
groen = 255; merusak;
kasus 109562850:
blauw = 255; merusak;
kasus 109562836:
ruang = 0; groin = 0; blauw = 0; merusak; }
}
analogWrite(redPin, abs(255 - rood)); // mengontrol led RGB: terbalik, karena kabel saya terbalik.
analogWrite(greenPin, abs(255 - groen)); analogWrite(bluePin, abs(255 - blauw));
// mengendalikan led hidup
if (hidup == 2){ levens1 = 0; } if (hidup == 1){ levens2 = 0; } jika (hidup == 0){ levens3 = 0; } analogWrite(levensPin1, levens1); analogWrite(levensPin2, levens2); analogWrite(levensPin3, levens3);
// mengendalikan led level
if (levelNumber == 1){ level1 = 255; } jika (levelNumber == 2){ level1 = 255; tingkat2 = 255; } jika (levelNumber == 3){ level1 = 255; tingkat2 = 255; tingkat3 = 255; } jika (levelNumber == 4){ level1 = 255; tingkat2 = 255; tingkat3 = 255; tingkat4 = 255; } analogWrite(levelPin1, level1); analogWrite(levelPin2, level2); analogWrite(levelPin3, level3); analogWrite(levelPin4, level4);
}
void addWaarde(int value) { // tambahkan nilai yang ditekan ke daftar
if (nomor indeks == 3) {
kembali; }
if (masukan[nomor indeks] == -1){
masukan[nomor indeks] = nilai; indeksNumber++; } }
void handleInput() { // membuat 'waarde'(nilai) keluar dari daftar
waarde = abs(masukan[0] * 100 + masukan[1] * 10 + masukan[2]); masukan[0] = -1; // setel ulang input sinyal[1] = -1; masukan[2] = -1;
indeksNumber = 0;
Serial.print("waarde opgeslagen: "); Serial.println(waarde); tambahkan Warna(waarde); }
void addColor(int waarde) { // tambahkan 3 digit 'waarde' ke dalam daftar
if (warna indeks == 3) {
kembali; }
if (warna[indeksWarna] == -1){
warna[indeksWarna] = waarde; if (warna[indexColor] > 255){ color[indexColor] = 255; } warna indeks++; }
}
void randomColor(){ // membuat lampu menjadi warna acak dan menyimpannya dalam variabel
roodRandom = acak(0, 255);
groenAcak = acak(0, 255);
blauwRandom = acak(0, 255);
rood = roodRandom;
groen = groenAcak; blauw = blauwAcak; Serial.print("roodRandom = "); Serial.println(roodRandom); Serial.print("groenRandom = "); Serial.println(groenRandom); Serial.print("blauwRandom = "); Serial.println(blauwRandom);
}
void handleColor() { // mengubah 'waarde' dari daftar menjadi variabel 'Gok' (tebak)
roodGok = warna[0]; groenGok = warna[1]; blauwGok = warna[2]; // periksa apakah variabel Gok terlalu berbeda dengan warna acak yang sebenarnya: jika demikian, tampilkan tebakan selama tiga detik, kedipkan hijau dan ubah warnanya lagi, tambahkan level dan buat perbedaan yang diizinkan lebih kecil // jika tidak, tampilkan tebak selama tiga detik, berkedip merah dan kurangi nyawa // jika kamu kehabisan nyawa, permainan dimulai lagi jika (abs((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff){ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); penundaan(3000); analogWrite(pin merah, 255); analogWrite(pin hijau, 0); analogWrite(bluePin, 255); penundaan (300); analogWrite(pin merah, 255); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan (300); analogWrite(pin merah, 255); analogWrite(pin hijau, 0); analogWrite(bluePin, 255); penundaan (300); analogWrite(pin merah, 255); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan (300);
Serial.print("roodGok = ");
Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok); resetWarna(); warna acak(); tingkatNumber++; perbedaan -= 50; } else{ analogWrite(redPin, abs(255 - roodGok)); analogWrite(greenPin, abs(255 - groenGok)); analogWrite(bluePin, abs(255 - blauwGok)); penundaan(3000); analogWrite(pin merah, 0); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan (300); analogWrite(pin merah, 255); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan (300); analogWrite(pin merah, 0); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan (300); analogWrite(pin merah, 255); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan (300); Serial.print("roodGok = "); Serial.println(roodGok); Serial.print("groenGok = "); Serial.println(groenGok); Serial.print("blauwGok = "); Serial.println(blauwGok);
resetWarna();
hidup--; } if (hidup == 0){ analogWrite(redPin, 0); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan(100); analogWrite(pin merah, 255); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan(100); analogWrite(pin merah, 0); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan(100); analogWrite(pin merah, 255); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan(100); analogWrite(pin merah, 0); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan(100); analogWrite(pin merah, 255); analogWrite(pin hijau, 255); analogWrite(bluePin, 255); penundaan(100); resetSemua(); }
}
void resetColor(){ // gunakan untuk mengatur ulang nilai, untuk salah tekan atau setiap tebakan baru (hanya untuk kepastian)
warna[0] = -1; warna[1] = -1; warna[2] = -1;
indeksNumber=0;
indeksWarna=0; }
void resetEverything(){ // restart game
warna[0] = -1; warna[1] = -1; warna[2] = -1;
indeksNumber=0;
indeksWarna=0;
hidup = 3;
ruang = 0; groin = 0; blauw = 0;
roodRandom = 0;
groenAcak = 0; blauwAcak = 0;
levens1 = 255;
levens2 = 255; levens3 = 255;
tingkat1 = 255;
tingkat2 = 0; tingkat3 = 0; tingkat4 = 0;
tingkatNumber = 1;
t = 0;
}
void displayEverything(){ // gunakan ini untuk menampilkan informasi penting pada serial monitor
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("batang = ");
Serial.println(rood); Serial.print("groen = "); Serial.println(groen); Serial.print("blauw = "); Serial.println(blauw);
Serial.print("waarde opgeslagen: ");
Serial.println(waarde); }
Langkah 3: Bangun
Anda jelas menginginkan bangunan yang bagus untuk proyek ini. bagian ini cukup terbuka untuk interpretasi, tetapi ada beberapa hal yang perlu diingat dengan ini: - jaga agar panel depan tetap tipis, sehingga Anda masih dapat menempelkan led Anda melaluinya dan penerima IR masih berfungsi
- simpan cukup ruang di build untuk arduino dan papan solder
- pastikan ada lubang di bagian belakang untuk power arduino
Saya telah menambahkan skema kasar untuk pengkabelan.
Semoga berhasil dan selamat bersenang - senang!