Daftar Isi:

Game Menebak Warna IR-Remote: 3 Langkah
Game Menebak Warna IR-Remote: 3 Langkah

Video: Game Menebak Warna IR-Remote: 3 Langkah

Video: Game Menebak Warna IR-Remote: 3 Langkah
Video: Pak amir ditembak tank 2024, November
Anonim
Game Menebak Warna IR-Jarak Jauh
Game Menebak Warna IR-Jarak Jauh

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 Dibutuhkan
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

Membangun
Membangun
Membangun
Membangun
Membangun
Membangun
Membangun
Membangun

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!

Direkomendasikan: