Proyek ini merupakan proyek sederhana dimana dalam pembuatannya baik rangkaian, layout maupun kode programnya tentunya sangat mudah dibuat.
Electronic LED Dice. |
Dalam praktek kali ini pun saya hanya membuat PCB untuk mata dadunya saja sedangkan mikrokontroller saya menggunakan minimum sistem yang telah saya buat sebelumnya dengan sambungan kabel hanya empat dan satu jalur bersama.
Skema dadu elektronik. |
Layout dadu elektronik. |
Bottom Layout dadu elektronik. |
3D electronic led dice. |
Program untuk LED dadu elektronik ini sangat sederhana sehingga hanya memerlukan sedikit flash memori mikrokontroller untuk itu cukup hanya menggunakan mikrokontroller Atmega8.
Baca juga : Membuat Sendiri LED Cube 4x4x4 dengan Mudah
Cara kerja LED dadu elektronik ini yaitu tekan tombol sekali untuk rolling/mengacak nilai(mata dadu), LED dadu akan berkedip tiga kali sebelum rolling, selanjutnya tekan sekali lagi untuk mengambil nilai(mata dadu) maka pengacakan nilai mulai berhenti perlahan sampai menunjukkan nilai hasil.
Seperti inilah tampilannya :
Berikut ini adalah sketch/kode programnya :
/*
Electronic Led Dice By Fareed Read
*/
//pin output
#define com 8 //Common
#define out1 9
#define out2 10
#define out3 11
#define out4 12
//speed rolling
#define s 30
//button stop
int button = 2;
void setup() {
// put your setup code here, to run once:
pinMode(com, OUTPUT);
pinMode(out1, OUTPUT);
pinMode(out2, OUTPUT);
pinMode(out3, OUTPUT);
pinMode(out4, OUTPUT);
pinMode(button, INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(com, LOW);
for (int a = 0; a < 6; a++) {
diceNumber(a);
delay(s);
if (digitalRead(button) == LOW) {
int x = s;
for (int b = 0; b < 15; b++) {
a++;
if (a == 6) {
a = 0;
}
delay(x);
digitalWrite(out1, LOW);
digitalWrite(out2, LOW);
digitalWrite(out3, LOW);
digitalWrite(out4, LOW);
delay(x);
x += 5;
diceNumber(a);
}
while (digitalRead(button) == HIGH) {} //Tahan keadaan saat ini, ketika keadaan false maka kedip 3x dan lanjut rolling
for (int c = 0; c < 3; c++) {
digitalWrite(com, HIGH);
delay(80);
digitalWrite(com, LOW);
delay(80);
}
}
digitalWrite(out1, LOW);
digitalWrite(out2, LOW);
digitalWrite(out3, LOW);
digitalWrite(out4, LOW);
delay(s);
}
}
void diceNumber(int n) {
/*
susunan led output
1 = out1
2 = out2
3 = out1 + out4
4 = out2 + out4
5 = out1 + out2 + out4
6 = out3 + out2 + out4
*/
switch (n) {
case 0:
digitalWrite(out1, HIGH);
break;
case 1:
digitalWrite(out2, HIGH);
break;
case 2:
digitalWrite(out1, HIGH);
digitalWrite(out4, HIGH);
break;
case 3:
digitalWrite(out2, HIGH);
digitalWrite(out4, HIGH);
break;
case 4:
digitalWrite(out1, HIGH);
digitalWrite(out2, HIGH);
digitalWrite(out4, HIGH);
break;
case 5:
digitalWrite(out2, HIGH);
digitalWrite(out3, HIGH);
digitalWrite(out4, HIGH);
break;
}
}