/* Define shift register pins used for seven segment display */ //tanda slash digunakan sebagai komentar ,yang menjelaskan baris berikutnya untuk mendefinisikan pin/
#define LATCH_DIO 4 //[menyimpam data,dari latch ke shift regiater[menyunci agar tampil]]
#define CLK_DIO 7 //[pin ini untuk clock shift register[sinkronisasi pemgiriman data]]
#define DATA_DIO 8 //[digunakan untuk jalur data ke shift register]
#define Pot1 0 //[untuk membaca nilai potensiometer]
/* Segment byte maps for numbers 0 to 9 *///komentar yang menjelaskan bahwa array berikutnya berisi byte map angka 0-9//
const byte SEGMENT_MAP[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90}; /*array konstanta berisi byte map untuk angka 0-9, setiap byte dalam array ini untuk mempresentasikan kombinasi sigmen yang haris di aktifkan .nilai nilai ini dalam format hexadecimal*/
Contoh: 0xC0 untuk angka 0, 0xF9 untuk angka 1.//
/* Byte maps to select digit 1 to 4 */ /*komentar yang menjelaskan bahwa array berikutnya berisi byte map untuk memilih digit 1 hingga 4 pada seven segment display multiplexed */
const byte SEGMENT_SELECT[] = {0xF1,0xF2,0xF4,0xF8};//array konstanta yang berisi byte map untuk memulih digit yang akan ditampilkan pada segment display //
void setup () //fungsi setup() dipanggil sekali ketika program dimulai //
{ //awal dari blok kode fungsi setup()//
Serial.begin(9600);//menginsialisasi kmunikasi serial dengan baud rate 9600 untuk debbuging atau pemantauan nilai potensiometer di serial monitor //
/* Set DIO pins to outputs */ // baris berikutnya mengatur pin digital sebagai output //
pinMode(LATCH_DIO,OUTPUT);//sebagai pengatur pin digital output //
pinMode(CLK_DIO,OUTPUT); //?mengatur pin sebagai output//
pinMode(DATA_DIO,OUTPUT);//mengatur pin sebagai output//
} //akhir dari blok mode fungsi setup()//
/* Main program */ //bagian utama dari program //
void loop() //fungsi loop() dipanggil berulang kalisetelah fungsi seteup() selesai //
{ //awal dari blok kode fungsi loop()
int PotValue; //mendeklarasikan variable integer bernama potValue//
PotValue = analogRead(Pot1); //Membaca nilai potensiometer dari pin A0 (range 0–1023).//
Serial.print("Potentiometer: ");//Menuliskan teks "Potentiometer ke Serial Monitor//
Serial.println(PotValue);//Menampilkan nilai potensiometer ke Serial Monitor//
/* Update the display with the current counter value *// menjelaskan bahwa bagian ini update tampilan ke seven segment.//
for (int i = 10;i >0; i--)//Perulangan for sebanyak 10 kali (untuk refresh tampilan).//
{//kurung pembuka dari fungsi for//
WriteNumberToSegment(0 , PotValue / 1000);//Menampilkan digit ribuan (PotValue / 1000)//
WriteNumberToSegment(1 , (PotValue / 100) % 10);//Menampilkan digit ratusan ((PotValue / 100) % 10).Menampilkan digit ratusan ((PotValue / 100) % 10)//
WriteNumberToSegment(2 , (PotValue / 10) % 10);//Menampilkan digit puluhan ((PotValue / 10) % 10).Menampilkan digit puluhan ((PotValue / 10) % 10)//
WriteNumberToSegment(3 , PotValue % 10);//Menampilkan digit satuan (PotValue % 10).Menampilkan digit satuan (PotValue % 10)//
}//Penutup kurung dari perulangan for.Penutup kurung dari perulangan for//
}//Penutup kurung dari fungsi loop().Penutup kurung dari fungsi loop()//
/* Write a decimal number between 0 and 9 to one of the 4 digits of the display */*/menjelaskan fungsi di bawahnya berguna untuk menulis angka (0–9) ke salah satu digit seven segment.*/
void WriteNumberToSegment(byte Segment, byte Value)//Deklarasi fungsi WriteNumberToSegment(byte Segment, byte Value)//
{//Akhir dari fungsi WriteNumberToSegment()//
digitalWrite(LATCH_DIO,LOW);//Menurunkan latch agar shift register siap menerima data.Menurunkan latch agar shift register siap menerima data//
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_MAP[Value]);//Mengirim data angka (dari SEGMENT_MAP) ke shift register sesuai dengan angka Value.Mengirim data angka (dari SEGMENT_MAP) ke shift register sesuai dengan angka Value//
shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] );//Mengirim data digit mana yang dipilih (dari SEGMENT_SELECT).Mengirim data digit mana yang dipilih (dari SEGMENT_SELECT)//
digitalWrite(LATCH_DIO,HIGH);//Naikkan latch supaya data yang dikirim terkunci dan tampil di seven segment.Naikkan latch supaya data yang dikirim terkunci dan tampil di seven segment//
}//Akhir dari fungsi WriteNumberToSegment()//