Tentang proyek ini
Video:
Ikhtisar
Sudah lama saya ingin membuat game sederhana namun menyenangkan yang hanya membutuhkan satu orang untuk bermain. Ini sangat sederhana, hanya membutuhkan satu Arduino Nano untuk menjalankannya. Ini adalah roulette LED. Tujuan dari permainan ini adalah untuk berhenti di LED hijau, menghindari yang merah dan kuning. Tampaknya mudah untuk dimainkan dan dibuat, dan memang begitu.
Langkah 1
Pertama, saya mulai dengan mendesain perangkat di Fusion 360. Saya mendesain pelat depan berisi 9 LED, 6 merah, 2 kuning, dan 1 hijau. Saya juga membuat ruang untuk saklar bijaksana untuk pergi di bagian bawah. Saya kemudian menggunakan router Millright CNC saya untuk memotong bagian yang saya rancang.
Langkah 2
Mekanisme permainannya seperti ini:Sebuah lampu akan "bergerak" bolak-balik di antara dua sisi, dan akan berhenti setiap kali ada tombol yang ditekan. Agar segera bereaksi, saya menggunakan interupsi. Setiap LED sesuai dengan indeks dalam larik yang digilir. indeks LED saat ini mendapatkan variabelnya sendiri juga. Ada juga penundaan antara setiap langkah, sesuai dengan kesulitannya. Saat startup, pengguna memilih kesulitan dengan menekan tombol untuk mengurangi penundaan antara setiap perubahan LED. Setelah LED yang benar menyala, pengguna dapat mengklik dua kali untuk menguncinya.
Langkah 3
Saya menggunakan beberapa amplas untuk menambahkan hasil akhir yang bagus dan pembulatan ke potongan kayu lapis. Setelah itu, saya menggunakan lem panas untuk merekatkan potongan-potongan itu.
Kesimpulan
Sekarang, setiap kali saya ingin memainkan permainan sederhana, baik untuk jalan atau hanya untuk menjauh dari layar, perangkat ini memberi saya penangguhan hukuman yang luar biasa. Saya juga dapat membuatnya multipemain dengan membuat setiap LED menjauh dari hijau sejumlah poin tertentu, membuat orang yang mendapatkan jumlah poin paling sedikit pada akhirnya menang.
Kode
KodeC/C++
/*Gunakan pin 2-10Anda bisa mendapatkan perpustakaan TTBOUNCE di sini:https://github.com/TOLDOTECHNIK/TTBOUNCE*/#include int delay_time =0;const uint8_t led_array[9] ={ 4,3,5,6,7,8,9,10,11};const uint8_t button =2;uint8_t kesulitan =0;uint8_t current_led =0;bool dir_flag =true; //true ke kanan, false ke kiribool game_ended =false;bool is_win =false;bool is_finished_selecting =false;TTBOUNCE b =TTBOUNCE(button);void doubleClick(){ Serial.println("double click"); is_finished_selecting =benar; delay_time =lantai(500/(kesulitan+1)); //Rumus:delay (dalam ms) =500 / (kesulitan + 1) Serial.println("kesulitan:" + String(delay_time)); sapu();}void klik(){ Serial.print("Klik | "); digitalWrite(led_array[kesulitan], RENDAH); kesulitan++; if(kesulitan>8){ kesulitan =0; } digitalWrite(led_array[kesulitan], TINGGI); Serial.println("Kesulitan adalah:"+String(Kesulitan)); delay(100);}pengaturan batal(){ Serial.begin(9600); b.attachDoubleClick(doubleClick); b.attachClick(klik); b.setActiveLow(); b.enablePullup(); for(int i=0;i<9;i++){ pinMode(led_array[i], OUTPUT); } menyapu(); detak(); kesulitan =0; digitalWrite(led_array[kesulitan], TINGGI); while(!is_finished_selecting){ b.update(); } b.perbarui(); pinMode(tombol, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(button), button_pressed, FALLING); delay(1000);}void loop(){ if(game_ended==false){ move_led(); tunda(waktu_tunda); } else if(game_ended){ Serial.println(game_ended); Serial.println("Permainan selesai"); if(is_win){ Serial.println("Anda menang"); untuk(int i=0; i<5;i++){ pulsa(); penundaan(100); } } menyapu(); game_ended =salah; is_win =salah; penundaan(2000); }}void move_led(){ digitalWrite(led_array[current_led], RENDAH); if(current_led ==8){ dir_flag =false; arus_led -=1; } else if(current_led ==0){ dir_flag =true; arus_led +=1; } else if(dir_flag){ current_led +=1; } else if(!dir_flag){ current_led -=1; } digitalWrite(led_array[current_led], HIGH);}void pulse(){ for(int i=0; i<9;i++){ digitalWrite(led_array[i], HIGH); } penundaan(100); for(int i=0; i<9;i++){ digitalWrite(led_array[i], RENDAH); }}void menyapu(){ untuk(int i=0; i<9;i++){ digitalWrite(led_array[i], HIGH); penundaan (50); digitalWrite(led_array[i], RENDAH); } untuk(int i=8; i>=0;i--){ digitalWrite(led_array[i], HIGH); penundaan (50); digitalWrite(led_array[i], RENDAH); }}void button_pressed(){ Serial.println("Tombol ditekan pada LED:"+String(current_led)); game_ended =benar; if(current_led==4){ is_win =true; } else if(current_led !=4){ is_win =false; } saat ini_led =0; delay(500);}
Skema