// Definisikan pin yang digunakan
#define DS 2 // Data pin (pin 14) dari 74HC595
#define SHCP 3 // Clock pin (pin 11) dari 74HC595
#define STCP 4 // Latch pin (pin 12) dari 74HC595
#define potPin A0 // Pin untuk membaca nilai dari potensiometer
// Array untuk menyimpan pola angka pada 7-segment display
// Indeksnya mewakili angka, dan nilai di dalamnya mewakili pola segmen
// untuk menampilkan angka tersebut
const byte digitPatterns[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
// Inisialisasi
void setup() {
// Setup pin
pinMode(DS, OUTPUT);
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
}
// Fungsi untuk mengirim data ke 74HC595
void shiftOutData(byte data) {
digitalWrite(STCP, LOW); // Matikan latch
shiftOut(DS, SHCP, MSBFIRST, data); // Kirim data secara serial
digitalWrite(STCP, HIGH); // Aktifkan latch untuk mentransfer data ke register
}
// Fungsi untuk menampilkan angka pada display
void displayNumber(int number) {
// Pisahkan digit puluhan dan satuan
int digit1 = number / 10;
int digit2 = number % 10;
// Kirim pola segmen untuk digit pertama
shiftOutData(digitPatterns[digit1]);
// Pindah ke display kedua dengan mengaktifkan digit yang sesuai
shiftOutData(digitPatterns[digit2] | 0b10000000);
}
// Loop utama
void loop() {
// Baca nilai dari potensiometer
int potValue = analogRead(potPin);
// Ubah nilai potensiometer menjadi rentang angka (0-99)
int number = map(potValue, 0, 1023, 0, 99);
// Tampilkan angka pada display
displayNumber(number);
delay(100); // Tunda sebentar untuk stabilitas tampilan
}