Di pelajaran-pelajaran sebelum nya kita sudah banyak belajar tentang LED, button, dan Counter. Dari Semua tutorial sebelum nya, apakah kita bisa membuat sesuatu? yang menarik untuk menambah wawasan programming Ardiuino kita? Mimin coba pikir-pikir, maka temu ide membuat game sederhana dengan ESP32, menggunakan Random LED dan Button.
Flow Code
flow code nya secara sederhana sebagai berikut,
Hal pertama yang kita lakukan adalah dekelarasi
byte btn_1 = 34;
bool data_btn1 = 0;
#define ditekan 0
bool hold_btn1 = 0;
int counter = -1;// nilai di set dulu
byte pin_led[] = {17, 16, 2, 15, 5, 18, 19, 23};
int pilih = 0;
int waktu = 0;
byte pin_buz = 27;
btn_1 kita dekelarasi di GPIO34, pin LED dalam byte array yaitu GPIO17,GPIO16,GPIO2,GPIO15,GPIO5,GPIO18,GPIO19,GPIO23, dan terakhir adalah GPIO27 sebagai pin yang menyalakan buzzer.
void setup() {
// put your setup code here, to run once:
pinMode(pin_buz, OUTPUT);
pinMode(pin_led[0], OUTPUT);
pinMode(pin_led[1], OUTPUT);
pinMode(pin_led[2], OUTPUT);
pinMode(pin_led[3], OUTPUT);
pinMode(pin_led[4], OUTPUT);
pinMode(pin_led[5], OUTPUT);
pinMode(pin_led[6], OUTPUT);
pinMode(pin_led[7], OUTPUT);
Serial.begin(9600);
pinMode(btn_1, INPUT);
Serial.println();
}
pin led array dan buzzer di setting sebagai output, kemudian pin btn_1 kita jadikan sebagai INPUT. Selanjut nya program di bagian void loop().
void loop() {
// program utama berulang-ulang
data_btn1 = digitalRead(btn_1);//baca GPIO34
if (data_btn1 == ditekan) {
if (hold_btn1 == 0) {
waktu = 2;
digitalWrite(pin_led[pilih], LOW);
for(int i=0; i<40; i++){
waktu += 3;
pilih = random(0,8);
digitalWrite(pin_buz, LOW);
digitalWrite(pin_led[pilih], LOW);
delay(waktu);
digitalWrite(pin_led[pilih], HIGH);
digitalWrite(pin_buz, HIGH);
delay(waktu);
digitalWrite(pin_led[pilih], LOW);
digitalWrite(pin_buz, LOW);
delay(waktu);
}
digitalWrite(pin_led[pilih], HIGH);
hold_btn1 = 1;
}
} else {
hold_btn1 = 0;
}
}
Pada program ini, kita menggunakan holding button, seperti tutorial sebelum nya di memempercepat respon button arduino, jika masih ingin mengulang pelajaran nya, cukup click button di bawah ini,
flow Program nya sebagai berikut,
- Setiap button di tekan maka akan langsung memproses looping for sebanyak 40x
- Setiap looping waktu delay LED akan bertambah 3 setiap looping, waktu = waktu + 3,
- Generate nilai Random dan disimpan di variable pilih, nilai yang di hasilkan adalah 0 sampai dengan 8 ( sesuai dengan jumlah GPIO yang terhubung ke LED), pilih = random (0,8);
- Kemudian nyalakan Padam kan LED dan buzzer, nyalakan LED dan buzzer, kemudian Matikan LED dan buzzer kembali denga GPIO yang di pilih dari nilai Random yang di hasilkan
- Setelah looping selesai, nyalakan LED terakhir dari hasil pilih yang di dapatkan dari random
dengan nilai random yang di hasilkan ini, maka nyala LED akan tidak terprediksi. Silahkan di coba tebak LED yang terakhir menyala. Program keseleluruhan nya adalah sebagai berikut.
byte btn_1 = 34;
bool data_btn1 = 0;
#define ditekan 0
bool hold_btn1 = 0;
int counter = -1;// nilai di set dulu
byte pin_led[] = {17, 16, 2, 15, 5, 18, 19, 23};
int pilih = 0;
int waktu = 0;
byte pin_buz = 27;
void setup() {
// put your setup code here, to run once:
pinMode(pin_buz, OUTPUT);
pinMode(pin_led[0], OUTPUT);
pinMode(pin_led[1], OUTPUT);
pinMode(pin_led[2], OUTPUT);
pinMode(pin_led[3], OUTPUT);
pinMode(pin_led[4], OUTPUT);
pinMode(pin_led[5], OUTPUT);
pinMode(pin_led[6], OUTPUT);
pinMode(pin_led[7], OUTPUT);
Serial.begin(9600);
pinMode(btn_1, INPUT);
Serial.println();
}
void loop() {
// program utama berulang-ulang
data_btn1 = digitalRead(btn_1);//baca GPIO34
if (data_btn1 == ditekan) {
if (hold_btn1 == 0) {
waktu = 2;
digitalWrite(pin_led[pilih], LOW);
for(int i=0; i<40; i++){
waktu += 3;
pilih = random(0,8);
digitalWrite(pin_buz, LOW);
digitalWrite(pin_led[pilih], LOW);
delay(waktu);
digitalWrite(pin_led[pilih], HIGH);
digitalWrite(pin_buz, HIGH);
delay(waktu);
digitalWrite(pin_led[pilih], LOW);
digitalWrite(pin_buz, LOW);
delay(waktu);
}
digitalWrite(pin_led[pilih], HIGH);
hold_btn1 = 1;
}
} else {
hold_btn1 = 0;
}
}
Tebak LED dengan Button
Sekarang kita modifikasi Game LED ini agar ketahuan apakah LED yang kita pilih benar atau salah,
GPIO34 akan kita gunakan start game LED, GPIO36 dan GPIO39 di gunakan sebagai pilih LED. Program keseluruhan nya adalah sebagai berikut,
#define ditekan 0
byte btn_1 = 34;
byte btn_2 = 36;
byte btn_3 = 39;
bool data_btn1 = 0;
bool data_btn2 = 0;
bool data_btn3 = 0;
bool hold_btn1 = 0;
bool hold_btn2 = 0;
bool hold_btn3 = 0;
int counter = -1;// nilai di set dulu
byte pin_led[] = {17, 16, 2, 15, 5, 18, 19, 23};
int nilai_random = 0;
int pilih = 0;
int waktu = 0;
byte pin_buz = 27;
void setup() {
// put your setup code here, to run once:
pinMode(btn_1, INPUT);
pinMode(btn_2, INPUT);
pinMode(btn_3, INPUT);
pinMode(pin_buz, OUTPUT);
pinMode(pin_led[0], OUTPUT);
pinMode(pin_led[1], OUTPUT);
pinMode(pin_led[2], OUTPUT);
pinMode(pin_led[3], OUTPUT);
pinMode(pin_led[4], OUTPUT);
pinMode(pin_led[5], OUTPUT);
pinMode(pin_led[6], OUTPUT);
pinMode(pin_led[7], OUTPUT);
Serial.begin(9600);
Serial.println();
}
void loop() {
// program utama berulang-ulang
data_btn1 = digitalRead(btn_1);//baca GPIO34
data_btn2 = digitalRead(btn_2);//baca GPIO34
data_btn3 = digitalRead(btn_3);//baca GPIO34
if (data_btn1 == ditekan) {
if (hold_btn1 == 0) {
waktu = 2;
off_led();
for(int i=0; i<40; i++){
waktu += 3;
nilai_random = random(0,8);
digitalWrite(pin_buz, LOW);
digitalWrite(pin_led[nilai_random], LOW);
delay(waktu);
digitalWrite(pin_led[nilai_random], HIGH);
digitalWrite(pin_buz, HIGH);
delay(waktu);
digitalWrite(pin_led[nilai_random], LOW);
digitalWrite(pin_buz, LOW);
delay(waktu);
}
digitalWrite(pin_led[nilai_random], HIGH);
Serial.print("pilih: ");
Serial.print(pilih);Serial.print(" | ");
Serial.print("nilai random: ");
Serial.println(nilai_random);
delay(1000);
if(pilih == nilai_random){
for(int i = 0; i<10; i++){
led_menang();//function jika benar
}
}else{
for(int i = 0; i<3; i++){
led_kalah();//function jika benar
}
}
hold_btn1 = 1;
}
} else {
hold_btn1 = 0;
}
if (data_btn2 == ditekan) {
if (hold_btn2 == 0) {
digitalWrite(pin_buz,HIGH);
delay(20);
digitalWrite(pin_buz,LOW);
delay(20);
hold_btn2 = 1;
pilih++;
if(pilih == 9)pilih = 0;
Serial.println(pilih);
off_led();
digitalWrite(pin_led[pilih],HIGH);
}
}else{
hold_btn2 = 0;
}
if (data_btn3 == ditekan) {
if (hold_btn3 == 0) {
digitalWrite(pin_buz,HIGH);
delay(20);
digitalWrite(pin_buz,LOW);
delay(20);
hold_btn3 = 1;
pilih--;
if(pilih <= 0)pilih = 7;
Serial.println(pilih);
off_led();
digitalWrite(pin_led[pilih],HIGH);
}
}else{
hold_btn3 = 0;
}
}
void led_menang(){
digitalWrite(pin_led[0],HIGH);
digitalWrite(pin_led[1],HIGH);
digitalWrite(pin_led[2],HIGH);
digitalWrite(pin_led[3],HIGH);
digitalWrite(pin_led[4],HIGH);
digitalWrite(pin_led[5],HIGH);
digitalWrite(pin_led[6],HIGH);
digitalWrite(pin_led[7],HIGH);
digitalWrite(pin_buz, HIGH);
delay(50);
digitalWrite(pin_led[0],LOW);
digitalWrite(pin_led[1],LOW);
digitalWrite(pin_led[2],LOW);
digitalWrite(pin_led[3],LOW);
digitalWrite(pin_led[4],LOW);
digitalWrite(pin_led[5],LOW);
digitalWrite(pin_led[6],LOW);
digitalWrite(pin_led[7],LOW);
digitalWrite(pin_buz, LOW);
delay(50);
}
void led_kalah(){
digitalWrite(pin_buz, HIGH);
digitalWrite(pin_led[0],HIGH);delay(20);
digitalWrite(pin_led[1],HIGH);delay(20);
digitalWrite(pin_led[2],HIGH);delay(20);
digitalWrite(pin_led[3],HIGH);delay(20);
digitalWrite(pin_led[4],HIGH);delay(20);
digitalWrite(pin_led[5],HIGH);delay(20);
digitalWrite(pin_led[6],HIGH);delay(20);
digitalWrite(pin_led[7],HIGH);delay(20);
digitalWrite(pin_buz, LOW);
digitalWrite(pin_led[0],LOW);delay(20);
digitalWrite(pin_led[1],LOW);delay(20);
digitalWrite(pin_led[2],LOW);delay(20);
digitalWrite(pin_led[3],LOW);delay(20);
digitalWrite(pin_led[4],LOW);delay(20);
digitalWrite(pin_led[5],LOW);delay(20);
digitalWrite(pin_led[6],LOW);delay(20);
digitalWrite(pin_led[7],LOW);delay(20);
}
void off_led(){
digitalWrite(pin_led[0],LOW);
digitalWrite(pin_led[1],LOW);
digitalWrite(pin_led[2],LOW);
digitalWrite(pin_led[3],LOW);
digitalWrite(pin_led[4],LOW);
digitalWrite(pin_led[5],LOW);
digitalWrite(pin_led[6],LOW);
digitalWrite(pin_led[7],LOW);
}
Compile dan upload program di atas, maka game LED akan bekerja seperti video di bawah ini,
Tugas
Tugas nya cukup sederhana,
- coba jelaskan secara bertahap flow program terakhir di atas?
Sekian dulu tulisan sederhana kita, semoga bermanfaat. Jika ingin praktek code ini langsung di trainner kita, boleh whatsapp kita dengan click tombol di bawah ini,