Subscribe
iotles.com
No Result
View All Result
  • Login
  • BERANDA
  • BELAJAR IOT
  • ENERGY METER
  • BERANDA
  • BELAJAR IOT
  • ENERGY METER
No Result
View All Result
iotles.com
No Result
View All Result
Home Belajar Iot

Membuat Game Sederhana ESP32 Arduino dengan Random LED dan Button

jimmisitepu by jimmisitepu
October 2, 2021
in Belajar Iot
0
game LED arduino
0
SHARES
691
VIEWS
Share on FacebookShare on Twitter

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

Related articles

Membuat Counter UP dan Counter Down pada Arduino Dengan Button

Mempercepat Respon Button dengan Hold Button Pada Arduino

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,

Hold Button Arduino

flow Program nya sebagai berikut,

  1. Setiap button di tekan maka akan langsung memproses looping for sebanyak 40x
  2. Setiap looping waktu delay LED akan bertambah 3 setiap looping, waktu = waktu + 3,
  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);
  4. 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
  5. 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,

button arduino

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

Tugas nya cukup sederhana,

  1. 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,

whatsapp kami
Previous Post

Membuat Counter UP dan Counter Down pada Arduino Dengan Button

Next Post

Modul 4G Arduino SIM7600 dengan ESP32

Related Posts

counter arduino
Belajar Iot

Membuat Counter UP dan Counter Down pada Arduino Dengan Button

October 1, 2021
button arduino
Belajar Iot

Mempercepat Respon Button dengan Hold Button Pada Arduino

September 28, 2021
input button esp32 arduino
Belajar Iot

Membaca Push Button Arduino dengan digitalRead

September 26, 2021
fungsi for arduno
Belajar Iot

Mengenal Fungsi for Pada Arduino

September 16, 2021
led trainner iot
Belajar Iot

Program Sederhana Menyalakan Led dengan Arduino Menggunakan Trainner IoT

September 15, 2021
variable arduino
Belajar Iot

Variable pada Pemrograman Arduino

September 13, 2021

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Monitoring Beberapa Jenis Power Meter Tanpa Koding dengan Modul LTE Modbus ke Blynk Cloud
  • Posting Data Ke blynk Iot dengan Modul GSM SIM7600 ESP32
  • Modul 4G Arduino SIM7600 dengan ESP32
  • Membuat Game Sederhana ESP32 Arduino dengan Random LED dan Button
  • Membuat Counter UP dan Counter Down pada Arduino Dengan Button

Recent Comments

No comments to show.
  • BERANDA
  • BELAJAR IOT
  • ENERGY METER
Call us: +62 851-5941-1861

© 2021 iotles.com - Learning and making iot device iotles.

No Result
View All Result
  • BERANDA
  • BELAJAR IOT
  • ENERGY METER

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In

Add New Playlist