Isi kandungan:

Permainan Meneka Warna IR-Jauh: 3 Langkah
Permainan Meneka Warna IR-Jauh: 3 Langkah

Video: Permainan Meneka Warna IR-Jauh: 3 Langkah

Video: Permainan Meneka Warna IR-Jauh: 3 Langkah
Video: Resident Evil 4 - Church Color Puzzle 2024, November
Anonim
Permainan Meneka Warna IR-Jauh
Permainan Meneka Warna IR-Jauh

Dalam arahan ini, saya akan menunjukkan kepada anda cara mengendalikan led RGB menggunakan remote IR, dan membuat permainan yang menyeronokkan!

Langkah 1: Bahagian Diperlukan

Bahagian Diperlukan
Bahagian Diperlukan

Bahagian yang anda perlukan untuk projek ini adalah:

- arduino one- RGB Led- IR-Sensor

(kiraan led bergantung pada permainan, jumlah nyawa atau) - 2 led hijau - 1 led kuning - 1 led oren - 3 led merah

Langkah 2: Kod

#sertakan

int redPin = 10;

int greenPin = 6; int bluePin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

tahap intPin1 = 2;

tahap intPin2 = 3; tahap intPin3 = 4; tahap intPin4 = 7;

int RECV_PIN = 11;

IRrecv irrecv (RECV_PIN); keputusan decode_results;

// warna input

int input = {-1, -1, -1}; int warna = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// menjana warna

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

// pemboleh ubah permainan

int diff = 200;

int levelNumber = 1;

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

int t = 0;

tahap int1 = 255;

tahap int2 = 0; tahap int3 = 0; tahap int4 = 0;

kehidupan int = 3;

int levens1 = 255; int levens2 = 255; int levens3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

batal persediaan () {

Serial.begin (9600); irrecv.enableIRIn (); // mulakan penerima pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);

}

gelung kosong () {

if (irrecv.decode (& results)) // menerima isyarat dari jarak jauh {Serial.println (results.value, DEC); // paparkan isyarat yang diterima dari setiap butang yang ditekan irrecv.resume (); // terima suis isyarat seterusnya (hasil. nilai) {// ubah isyarat menjadi nombor pada butang, dan tetapkan tindakan ke butang

kes 109562864:

tambahWaarde (1); rehat;

kes 109562824:

tambahWaarde (2); rehat;

kes 109562856:

tambahWaarde (3); rehat;

kes 109562872:

tambahWaarde (4); rehat;

kes 109562820:

tambahWaarde (5); rehat;

kes 109562852:

tambahWaarde (6); rehat;

kes 109562868:

tambahWaarde (7); rehat;

kes 109562828:

tambahWaarde (8); rehat;

kes 109562860:

tambahWaarde (9); rehat;

kes 109562876:

tambahWaarde (0); rehat;

kes 109562818: // oud ding enter / R CLK

handleInput (); rehat;

kes 109562816: // oud ding power

pemegangColor (); rehat; kes 109562878: // oud ding cancel / L CLK resetColor (); rehat;

kes 109562866: // lege knop tersembunyi

rawakColor (); rehat;

kes 109562830: // pijltje naar rechts

paparanSemuanya (); rehat; kes 109562838: // esc kasus 109562822: // sumber semula AV set Semuanya (); rehat; }

// tetapkan butang pada alat kawalan jauh untuk mengawal warna: dengan cara ini, pemain dapat melihat seperti apa warna dan bagaimana menggabungkannya, // sebelum memulakan permainan. beralih (hasil. nilai) {kes 109562840: rood = 255; rehat;

kes 109562844:

groen = 255; rehat;

kes 109562850:

blauw = 255; rehat;

kes 109562836:

rood = 0; groen = 0; blauw = 0; rehat; }

}

analogWrite (redPin, abs (255 - rood)); // mengawal led RGB: secara terbalik, kerana saya dikendalikan secara terbalik.

analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - blauw));

// mengawal led langsung

jika (hidup == 2) {levens1 = 0; } jika (hidup == 1) {levens2 = 0; } jika (hidup == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// mengawal tahap led

jika (levelNumber == 1) {level1 = 255; } jika (levelNumber == 2) {level1 = 255; tahap2 = 255; } jika (levelNumber == 3) {level1 = 255; tahap2 = 255; tahap3 = 255; } jika (levelNumber == 4) {level1 = 255; tahap2 = 255; tahap3 = 255; tahap4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);

}

batal addWaarde (nilai int) {// tambah nilai ditekan ke senarai

jika (indexNumber == 3) {

kembali; }

jika (masukan [indexNumber] == -1) {

input [indexNumber] = nilai; indexNumber ++; }}

void handleInput () {// buat 'waarde' (nilai) dari senarai

waarde = abs (input [0] * 100 + input [1] * 10 + input [2]); input [0] = -1; // tetapkan semula input signalen [1] = -1; input [2] = -1;

indexNumber = 0;

Serial.print ("waarde opgeslagen:"); Serial.println (waarde); addColor (waarde); }

batal addColor (int waarde) {// tambahkan 'waarde' 3 digit ke senarai

jika (indexColor == 3) {

kembali; }

jika (warna [indexColor] == -1) {

warna [indexColor] = waarde; jika (warna [indexColor]> 255) {color [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// menjadikan cahaya bertukar warna secara rawak dan simpan dalam pemboleh ubah

roodRandom = rawak (0, 255);

groenRandom = rawak (0, 255);

blauwRandom = rawak (0, 255);

rood = roodRawak;

groen = groenRawak; blauw = blauwRawak; Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);

}

void handleColor () {// ubah 'waarde' dari senarai menjadi pemboleh ubah 'Gok' (tekaan)

roodGok = warna [0]; groenGok = warna [1]; blauwGok = warna [2]; // periksa sama ada pemboleh ubah Gok terlalu banyak berbeza dengan warna rawak sebenar: jika ya, paparkan tekaan selama tiga saat, berkedip hijau dan ubah warnanya lagi, tambahkan aras abd membuat perbezaan yang dibenarkan lebih kecil // jika tidak, paparkan kira selama tiga saat, berkedip merah dan tolak hidup // jika anda kehabisan nyawa, permainan dimulakan 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)); kelewatan (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); kelewatan (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); kelewatan (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); rawakColor (); levelNumber ++; perbezaan - = 50; } lain {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); kelewatan (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

nyawa--; } if (lives == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); kelewatan (100); tetapkan semulaSemuanya (); }

}

void resetColor () {// gunakan untuk menetapkan semula nilai, untuk tekan yang salah atau setiap tekaan baru (hanya untuk kepastian)

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

indexNumber = 0;

indexColor = 0; }

batal resetEverything () {// mulakan semula permainan

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

indexNumber = 0;

indexColor = 0;

nyawa = 3;

rood = 0; groen = 0; blauw = 0;

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

tahap1 = 255;

tahap2 = 0; tahap3 = 0; tahap4 = 0;

levelNumber = 1;

t = 0;

}

batal paparanSemuanya () {// gunakan ini untuk memaparkan maklumat penting pada monitor bersiri

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

Serial.println (rood); Serial.print ("groen ="); Serial.println (groen); Serial.print ("blauw ="); Serial.println (blauw);

Serial.print ("waarde opgeslagen:");

Serial.println (waarde); }

Langkah 3: Bina

Membina
Membina
Membina
Membina
Membina
Membina
Membina
Membina

Anda tentu mahukan pembinaan yang bagus untuk projek ini. bahagian ini cukup terbuka untuk ditafsirkan, tetapi ada beberapa perkara yang perlu diingat dengan ini: - pastikan panel depan tetap nipis, sehingga anda masih dapat melekatkan ledanya dan penerima IR masih berfungsi

- simpan ruang yang cukup untuk arduino dan solder board

- pastikan ada lubang di bahagian belakang untuk kekuatan arduino

Saya telah menambah skema kasar untuk pendawaian.

Semoga berjaya, dan bergembira!

Disyorkan: