Sedikit Pengenalan

Hallo semuanya, jumpa lagi ni. Siapa sih yang tidak mengenal DADU / DICE, sebuah alat untuk menunjukan angka yang terbuat dalam bentuk kubus 6 sisi yang dapat menunjukan angka 1 sampai dengan 6. Biasanya Dadu digunakan dalam permainan papan, seperti Monopoly, ular dan tangga, permainan di casino, dll.

Loh bang kok malah bahas permainan dadu?

Eh tunggu dulu, disini saya akan membuat sebuah project dari arduino, sesuai dengan judulnya Arduino Dadu Otomatis dengan menggunakan 7 Segmen. Dalam project ini saya masih tetap menggunakan simulasi, dari project sebelumnya, dimana cara mengakses 7 segmen menggunakan Shift Register dengan Arduino. Baca referensi artikel lainya di sub referensi. Ok langsung saja kita buat project ini.

Referensi & File Download

Skematik Rangkaian

Pemrograman Arduino

Berikut adalah program Arduino Project Dadu 7 Segmen:

//------------------------------------------------------------------------
//  By Irfan Indra Kurniawan - FansElectronics.com
//  100% untuk pembelajaran, dilarang keras menipu
//  dengan menjual program ini (kalau anda beriman) :D
//------------------------------------------------------------------------

#define A         11
#define B         10
#define C         9
#define IN1       13
#define IN2       12
#define DITEKAN   LOW
#define ON        HIGH
#define OFF       LOW

int LED[] = {A0, A1, A2, A3, A4, A5, 7, 6}; // LED Pin

// Fungsi Setup
void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(IN1, INPUT_PULLUP);
  pinMode(IN2, INPUT_PULLUP);
  for (int i = 0; i < 8; i++) {  // counter 0-7 = 8 pin led
    pinMode(LED[i], OUTPUT);     // mode pin LED
  }
  
}

// Fungsi Looping
void loop() {
  if (selectButton(1) == DITEKAN) {         // BUTTON 1 = LED 1 ON
    selectLED(0, ON);
  }
  else if(selectButton(2) == DITEKAN) {     // BUTTON 2 = LED 2 ON
    selectLED(1, ON);
  }
  else if(selectButton(3) == DITEKAN) {     // BUTTON 3 = LED 3 ON
    selectLED(2, ON);
  }
  else if(selectButton(4) == DITEKAN) {     // BUTTON 4 = LED 4 ON
    selectLED(3, ON);
  }
  else if(selectButton(5) == DITEKAN) {     // BUTTON 5 = LED 5 ON
    selectLED(4, ON);
  }
  else if(selectButton(6) == DITEKAN) {     // BUTTON 6 = LED 6 ON
    selectLED(5, ON);
  }
  else if(selectButton(7) == DITEKAN) {     // BUTTON 7 = LED 7 ON
    selectLED(6, ON);
  }
  else if(selectButton(8) == DITEKAN) {     // BUTTON 8 = LED 8 ON
    selectLED(7, ON);
  }
  
  else if(selectButton(9) == DITEKAN) {     // BUTTON 9 = LED 1 ON
    selectLED(0, OFF);
  }
  else if(selectButton(10) == DITEKAN) {     // BUTTON 10 = LED 2 ON
    selectLED(1, OFF);
  }
  else if(selectButton(11) == DITEKAN) {     // BUTTON 11 = LED 3 ON
    selectLED(2, OFF);
  }
  else if(selectButton(12) == DITEKAN) {     // BUTTON 12 = LED 4 ON
    selectLED(3, OFF);
  }
  else if(selectButton(13) == DITEKAN) {     // BUTTON 13 = LED 5 ON
    selectLED(4, OFF);
  }
  else if(selectButton(14) == DITEKAN) {     // BUTTON 14 = LED 6 ON
    selectLED(5, OFF);
  }
  else if(selectButton(15) == DITEKAN) {     // BUTTON 15 = LED 7 ON
    selectLED(6, OFF);
  }
  else if(selectButton(16) == DITEKAN) {     // BUTTON 16 = LED 8 ON
    selectLED(7, OFF);
  }
  
}

// Fungsi Ambil data dari Pin yang dibaca
int selectButton(int button) {
  int kondisi;
  // switching pin yang aktif dan ambil data button
  switch (button) {
    case 1: switchMux(0, 0, 0); kondisi = digitalRead(IN1);  break;
    case 2: switchMux(0, 0, 1); kondisi = digitalRead(IN1);  break;
    case 3: switchMux(0, 1, 0); kondisi = digitalRead(IN1);  break;
    case 4: switchMux(0, 1, 1); kondisi = digitalRead(IN1);  break;
    case 5: switchMux(1, 0, 0); kondisi = digitalRead(IN1);  break;
    case 6: switchMux(1, 0, 1); kondisi = digitalRead(IN1);  break;
    case 7: switchMux(1, 1, 0); kondisi = digitalRead(IN1);  break;
    case 8: switchMux(1, 1, 1); kondisi = digitalRead(IN1);  break;
    case 9: switchMux(0, 0, 0); kondisi = digitalRead(IN2);  break;
    case 10: switchMux(0, 0, 1); kondisi = digitalRead(IN2);  break;
    case 11: switchMux(0, 1, 0); kondisi = digitalRead(IN2);  break;
    case 12: switchMux(0, 1, 1); kondisi = digitalRead(IN2);  break;
    case 13: switchMux(1, 0, 0); kondisi = digitalRead(IN2);  break;
    case 14: switchMux(1, 0, 1); kondisi = digitalRead(IN2);  break;
    case 15: switchMux(1, 1, 0); kondisi = digitalRead(IN2);  break;
    case 16: switchMux(1, 1, 1); kondisi = digitalRead(IN2);  break;
  }
  return kondisi; // kembalikan dari ke void selectButton
}

// Fungsi switching data biner dari pin Multiplexer
void switchMux(byte c, byte b, byte a) {
  digitalWrite(A, a);
  digitalWrite(B, b);
  digitalWrite(C, c);
}

// Fungsi aktifkan dan Matikan pin LED
void selectLED(int nomor, int kondisi) {
  digitalWrite(LED[nomor], kondisi);
}


Dari program diatas, jika tombol ditekan makan 7 segmen akan mengacak angka secara random antara 1 sampai dengan 12, perinta random digunakan untuk mengacak data interger. Dalam pemrograman diatas saya sarankan untuk melihat pada artikel tentang 7 segmen Shift Register untuk cara akses 7 segmenya. Dalam penampilan dadu dapat kalian kreasikan sendiri dengan menggunakan outputan lain, misal LED, LCD, ataupun Dot Matrix. Untuk lebih lengkapnya dalam project ini dapat tonton video berikut.

Video Simulasi

Oke, sekian dulu totorial project Dadu kali ini, semoga bermanfaat. Jangan lupa dukung terus Fans Electronics dengan Follow dan Subscribe kami di semua link SOSMED, link tersedia pada footer website ini. Sekian dan salam solder.