// Deklarasi variabel
const int segmentPins[8] = { 5, 9, 8, 7, 6, 4, 3, 2 };
const byte numeral[21] =
{
// 0 = led dalam seven segment yang tidak diberikan tegangan
// 1 = led dalam seven segment yang diberikan tegangan masukan
B11111111, // B
B11101111, // A
B00011101, // L
B01100001, // I
};
void setup() {
// Melakukan perulangan sebanyak delapan kali, dimulai dari i = 0 dan berakhir ketika i
// mencapai nilai kurang dari 8, dengan setiap iterasi i akan bertambah satu.
for(int i = 0; i < 8; i++) {
// Mengatur mode pin
pinMode(segmentPins[i], OUTPUT);
}
}
void loop() {
// Mendefinisikan sebuah array bernama bali yang berisi karakter 'B', 'A', 'L', dan 'I'.
char bali[] = {'B', 'A', 'L', 'I'};
// Menghitung panjang array bali dengan membagi ukuran total array dengan ukuran elemen pertamanya.
int baliLength = sizeof(bali) / sizeof(bali[0]);
// Membuat perulangan sejumlah kali, dimulai dari i = 0 dan berakhir ketika i mencapai nilai kurang
// dari baliLength, dengan setiap iterasi i akan bertambah satu.
for(int i = 0; i < baliLength; i++) {
// Mencocokkan setiap huruf dalam kata 'BALI' dengan indeks yang sesuai
int index = -1;
switch(bali[i]) {
case 'B':
index = 0;
break;
case 'A':
index = 1;
break;
case 'L':
index = 2;
break;
case 'I':
index = 3;
break;
}
// Mengatur digit agar menunda selama 1 detik setelah digit ditampilkan
// Lalu menunda digit selama 2 detik sebelum melanjutkan instruksi selanjutnya
showDigit(index);
delay(1000);
}
delay(2000);
}
void showDigit(int number) {
boolean isBitSet;
// Melakukan perulangan for yang akan iterasi sebanyak delapan kali, dimulai dari segment = 0 hingga segment = 7.
// Setiap iterasi akan mengakses satu segmen dari display tujuh segmen.
for(int segment = 0; segment < 8; segment++) {
// Memeriksa apakah nilai number berada di luar rentang yang diharapkan (0 hingga 3).
if(number < 0 || number > 3) {
isBitSet = 0; // Matikan semua segmen
} else {
// isBitSet akan bernilai true jika bit yang diberikan adalah 1
isBitSet = bitRead(numeral[number], segment);
}
isBitSet = !isBitSet;
digitalWrite(segmentPins[segment], isBitSet);
}
}