Game Tebak Kata
Setelah kamu selesai membuat sebuah permain bernama "Simon Says", kali ini kamu akan membuat permainan yang tidak kalah menarik, game ini harus dimainkan oleh dua orang. Untuk memainkannya salah seorang memegang LCD dan papan Arduino dan diletakan di atas kepala sehingga tidak terlihat. Pada layar LCD akan menampilkan angka penghitung mundur yang singkat kemudian menampilkan sebuah kata. Pemain yang lain berada didepan orang pertama tadi yang bisa melihat kata apa yang muncul pada LCD, kemudian berusaha memberikan clue pada orang pertama untuk bisa menebak kata dengan benar. Jika tebakannya benar orang yang pertama bisa menekan push buton yang ada pada papan breadboard dan melanjutkan ke tebakan selanjutnya.Kebutuhan Komponen:
— 1 x Arduino UNO— 1 x Breadboard
— 1 x LCD
— 1 x Potensiometer
— 1 x Buzzer
— 1 x Push Button
— 1 x Resistor 330Ω
— 20 x Kabel Jumper
Perakitan:
Rangkaian:
Upload Sketch:
Untuk mengisikan program ke board Arduino melalui PC/Laptop dapat menggunakan software Arduino IDE.Apabila kamu tidak mau menggunakan PC/Laptop untuk mengupload sketch/program ke board Arduino, kamu masih bisa menggunakan handphone Android untuk mengisikan program ke Arduino menggunakan aplikasi Bluino Loader, cara uploadnya pun bisa dua cara melalui USB dengan menggunakan adapter OTG atau melalui Bluetooth.
Cara lain dapat juga upload sketch langsung melalui aplikasi ini ke Arduino melalui USB OTG atau Bluetooth dengan cara menekan ikon upload (tanda panah ke kanan) di bawah.
/*
19 - Game Tebak Kata
Ini merupakan versi DIY dari sebuah permainan tebak-tebakan. Untuk memainkannya salah seorang memegang LCD dan papan Arduino
dan diletakan diatas kepala sehingga tidak terlihat. Pada layar LCD akan menampilkan angka penghitung mundur yang singkat
kemudian menampilkan nama-nama hewan. Pemain yang lain berada didepan orang pertama tadi yang bisa melihat kata apa
yang muncul pada LCD, kemudian berusaha memberikan petunjuk pada orang pertama untuk bisa menebak kata dengan benar.
Jika tebakannya benar orang yang pertama bisa menekan push button yang ada pada papan breadboard dan melanjutkan ke tebakan selanjutnya.
*/
#include // menyertakan library liquid crystal yang berisi kumpulan perintah untuk menampilkan tulisan pada layar LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //memberitahu Arduino pin-pin mana saja yang dihubungkan ke LCD
int buttonPin = 7; //pin yang dihubungkan dengan push button
int buzzerPin = 6; //pin yang dihubungkan dengan buzzer
int buttonPressTime = 0; //variabel untuk menyimpan berapa waktu yang tersisa bagi pemain untuk menebak kata
long timeLimit = 15000; //batas waktu bagi pemain untuk menebak setiap kata
long startTime = 0; //digunakan untuk mengukur waktu yang telah berlalu untuk setiap kata
int roundNumber = 0; //terus melacak RoundNumber sehingga dapat ditampilkan di akhir permainan
const int arraySize = 25;
const char* words[arraySize] = {"rusa", "kambing", "beruang", "angsa", "anjing", "kucing", "tupai", "burung", "gajah", "kuda",
"banteng", "jerapah", "sapi", "kelelawar", "sigung", "kura-kura", "paus", "badak", "singa", "monyet",
"katak", "buaya", "kanguru", "kuda nil", "kelinci"};
int sequence[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //mulai dengan daftar array full dari 0s
void setup() {
pinMode(buttonPin, INPUT_PULLUP); //atur pin push button sebagai input
lcd.begin(16, 2); //memberi tahu ke library LCD untuk ukuran layar yang digunakan
generateRandomOrder(); //memanggil fungsi untuk menghasilkan angka array secara acak dari 1-25 yang akan menentukan urutan kata-kata yang ditampilkan
showStartSequence(); //menampilkan tulisan ketika start sequence
}
void loop() {
for(int i=0; i timeLimit){ //Jika batas waktu habis sebelum menekan push button
gameOver(); //game akan berakhir
}
if(digitalRead(buttonPin) == LOW){
tone(buzzerPin, 272, 1);
}
} //keluar dari loop ini ketika push button ditekan
delay(500); //jeda beberapa saat sebelum melanjutkan ke babak selanjutnya, sehingga penekanan push botton tidak terbaca dua kali
}
//jika kamu selesai menebak ke 25 kata
winner(); //tampilkan tulisan You Win
}
//--------------FUNCTIONS------------------------------
//DISPLAYS A COUNTDOWN TO START THE GAME
void showStartSequence(){
lcd.clear(); //bersihkan layar LCD
lcd.setCursor(0,0); //pindah kursor ke pojik kiri atas
lcd.print("Katagori:"); //tampilkan tulisan "Katagori:"
lcd.setCursor(0,1); //move the cursor to the bottom left corner
lcd.print("Hewan"); //tampilkan tulisan "Hewan:"
delay(2000); //tunggu 2 detik
lcd.clear(); //bersihkan layar LCD
lcd.print("Siap!"); //tampilkan tulisan "Siap!"
delay(1000); //tunggu 1 detik
lcd.clear(); //bersihkan layar LCD
lcd.print("3"); //tampilkan "3"
delay(1000); //tunggu 1 detik
lcd.clear(); //bersihkan layar LCD
lcd.print("2"); //tampilkan "2"
delay(1000); //tunggu 1 detik
lcd.clear(); //bersihkan layar LCD
lcd.print("1"); //tampilkan "1"
delay(1000); //tunggu 1 detik
}
//GERNATES A RANDOM ORDER FOR THE WORDS TO BE DISPLAYED
void generateRandomOrder(){
randomSeed(analogRead(0)); //reset random seed (Arduino perlu ini untuk menghasil nomor secara acak)
for (int i = 0; i < 24; i++){ //lakukan langkah ini sampai 25 posisi terpenuhi
int currentNumber = 0; //variabel untuk menyimpan nomor saat ini
boolean match = false; //apakah currentNumber cocok dengan nomor sebelumnya?
//menghasilkan nomor acak sampai kamu menghasilkan nomor yang tidak cocok dengan nomor yang lain di dalam array
do {
currentNumber = random(0,arraySize); //menghasilkan nomor acak dari 1-25
match = false; //kita belum memeriksa kecocokan, jadi mulailah dengan asumsi bahwa itu tidak cocok
for (int i = 0; i < arraySize; i++){ //untuk semua 25 nomor didalam array
if (currentNumber == sequence[i]){ //currentNumber cocok dengan nomor mana saja?
match = true; //jika sama, rubah variabel match ke kondisi true
}
}
} while(match == true); //jika variabel match berisi true, menghasilkan nomor acak yang lain dan ulangi lagi
sequence[i] = currentNumber; //jika variabel match berisi false, kemudian tambahkan pada sequence
}
}
//GAME OVER
void gameOver(){
lcd.clear(); //bersihkan layar LCD
lcd.setCursor(0,0); //pindah kursor ke pojok kiri atas
lcd.print("Game Over"); //tampilkan "Game Over"
lcd.setCursor(0,1); //pindah kursor ke baris bawah
lcd.print("Score: "); //tampilkan tilisan "Score:"
lcd.print(roundNumber); //tampilkan nilai score (nomor babak adalah sama dengan nilai score)
//mainkan musik untuk kekalahan
tone(buzzerPin, 130, 250); //E6
delay(275);
tone(buzzerPin, 73, 250); //G6
delay(275);
tone(buzzerPin, 65, 150); //E7
delay(175);
tone(buzzerPin, 98, 500); //C7
delay(500);
while(true){} //berhenti di loop ini seterusnya
}
//WINNER
void winner(){
lcd.clear(); //bersihkan layar LCD
lcd.setCursor(7,0); //pindah kursor ke tengah atas
lcd.print("YOU"); //tampilkan "You"
lcd.setCursor(7,1); //pindah kursor ke tengah bawah
lcd.print("WIN!"); //tampilkan "WIN!"
//mainkan musik 1Up
tone(buzzerPin, 1318, 150); //E6
delay(175);
tone(buzzerPin, 1567, 150); //G6
delay(175);
tone(buzzerPin, 2637, 150); //E7
delay(175);
tone(buzzerPin, 2093, 150); //C7
delay(175);
tone(buzzerPin, 2349, 150); //D7
delay(175);
tone(buzzerPin, 3135, 500); //G7
delay(500);
while(true){} //berhenti di loop ini seterusnya
}