#include <WiFi.h>
//#include <NTPClient.h>
#include <WiFiUdp.h>
#include <LiquidCrystal_I2C.h>

//Setting Port Sensor
LiquidCrystal_I2C lcd(0x27, 20, 4); // I2C address 0x27, 20 column and 4 rows
//WiFiUDP ntpUDP;
//NTPClient timeClient(ntpUDP, "1.ntp.maxindo.net.id");
// Variabel Untuk Koneksi Wifi
//char auth[] = "9q5M6iu9W_o1EixQB-037irYDrtoq5aX";
const char *ssid = "Kantor PCNU";  //Nama Wifi
const char *password = "satuabadnu"; // pass wifi



// Variabel untuk menyimpan status tombol
#define RXD2 16 
#define TXD2 17
#define BTN1 5
#define BTN2 12
#define BTN3 4 
#define BTN4 15
#define RCh1 25
#define RCh2 26
#define RCh3 32
#define RCh4 33
#define LEDMERAH 18
#define LEDBIRU 19
#define buzzer 27


// Variabel untuk mengontrol menu
byte arrow[] = {0x08,0x0C,0x0E,0x1F,0x1F,0x0E,0x0C,0x08};
String elemen1[2]={"Auto","Off "};
char logic[2]={0,1};
char buff[50];
int a=1;
int aidx=1,bidx=1,cidx=1,didx=1;
int set_mode,sampling_data=0,Tegangan=0;
int set_biaya=10;
int set_logic1,set_logic2,set_logic3,set_logic4;
float input_1 =1352.0,total,biayaSET;
unsigned long int timesampling,timerRTC,previous=0,bfr=0;
int interval_1=500,val =1000;
bool condition = LOW;
float tegangan;
float arus;
float frekuensi;
float power_faktor;
float energi;
float daya;
bool lcdbersih =false;
bool bounce = false;

//Fungsi Millis Untuk Tombol
unsigned long TimeTambah = 0;
unsigned long TimeKurang = 0;
const unsigned long debounceDelay = 50;

enum MenuUtama{Mode,Monitoring,RelayStatus,Tambah}; //Daftar menu


int buttonUpState = 0;
  int buttonDownState = 0;
  int buttonSelectState = 0;
  int buttonBackState = 0;
void setup() 
{
  //koneksi ke internet 
  Serial.begin(9600);
  Serial.print("Connecting to WiFi");
  WiFi.begin("Wokwi-GUEST", "", 6);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(100);
    Serial.print(".");
  }

  Serial.println(" Connected!");

  // Mulai koneksi NTP
  //timeClient.begin();

  //Menghidupkan LCD 
  lcd.init();
  lcd.backlight();


  // Mengatur Input 
  pinMode(15,INPUT_PULLUP);
  pinMode(12,INPUT_PULLUP);
  pinMode(4,INPUT_PULLUP);
  pinMode(5,INPUT_PULLUP);
  
  // Mengatur Output
  pinMode(25,OUTPUT);
  pinMode(26,OUTPUT);
  pinMode(32,OUTPUT);
  pinMode(33,OUTPUT);
  pinMode(18,OUTPUT);
  pinMode(19,OUTPUT);
  pinMode(27,OUTPUT);
   tarif_listrik();
}

void loop() 
{
  //baca_input();
  
  menu();
  //waktu_internet();
   
}

void baca_input()
{
  int buttonUpState= digitalRead(BTN4);
  int buttonDownState=digitalRead(BTN2);
  int buttonSelectState=digitalRead(BTN1);
  int buttonBackState = digitalRead(BTN3);
}

void tarif_listrik()
{
  while(1)
  {
    if(!digitalRead(BTN4) && (millis() - TimeTambah) > debounceDelay){lcd.clear();TimeTambah = millis();break;}
    if(!digitalRead(BTN2) && (millis() - TimeTambah) > debounceDelay){set_biaya+=10;lcdbersih = false;TimeTambah = millis();}
    if(!digitalRead(BTN3) && (millis() - TimeTambah) > debounceDelay){set_biaya-=10;lcdbersih = false;TimeTambah = millis();}
    if(set_biaya>10000){lcd.clear();set_biaya=10;}
    if(set_biaya<10){lcd.clear();set_biaya=10000;}
    if (set_biaya == 90 || set_biaya == 990 || set_biaya == 9990) {if (!lcdbersih) {lcd.clear();lcdbersih = true;}} // Mengatur penanda menjadi true setelah membersihkan
      String biayaString = formatRibuan(set_biaya);
      lcd.setCursor(2,0);
      lcd.print("Masukan Biaya :");
      lcd.setCursor(4,1);
      lcd.print("Rp.");
      lcd.setCursor(7,1);
      lcd.print(biayaString);
  }  
}
void menu ()
{ 
  tampilan_sensor();
  if(!digitalRead(BTN4)){
    lcd.clear();
    
        while(1){
           
           if(!digitalRead(BTN3)){ a++; delay(170);}
           if(!digitalRead(BTN2)){ a--; delay(170);}
           if(!digitalRead(BTN1)){a=1;lcd.clear();delay(75);break;}
           if(a>7) {a=1;}
           if(a<1) {a=7;}
           Serial.println(a);
              switch(a){
              case 1 :
                          lcd.setCursor(1,0);
                          lcd.print("1.Kalibrasi     ");
                          
                          lcd.createChar(0,arrow);
                          lcd.setCursor(0,0);
                          lcd.write(0);
                        
                          lcd.setCursor(0,1);
                          lcd.print(" 2.Safe Mode");
                        
                          lcd.setCursor(0,2);
                          lcd.print(" 3.Rumus KWh");
                        
                          lcd.setCursor(0,3);
                          lcd.print(" 4.Biaya");                          
                             if(!digitalRead(BTN4)){
                                   lcd.clear();
                                   delay(50);
                                   while(1){
                                         if(!digitalRead(BTN4)){aidx=1;lcd.clear();delay(75);break;}
                                         if(!digitalRead(BTN2)){aidx++;delay(175);}
                                         if(aidx>3){aidx=1;}
                                             switch(aidx){
                                    
                                               case 1 :

                                                         lcd.createChar(0,arrow);
                                                         lcd.setCursor(0,0);
                                                         lcd.write(0);
                                                         lcd.setCursor(1,0);
                                                         lcd.print("1.Tegangan");
                                                         lcd.setCursor(0,1);
                                                         lcd.print(" 2.Arus");
                                                         lcd.setCursor(0,2);
                                                         lcd.print(" 3.Reset");
                                                             if(!digitalRead(BTN1)){
                                                                 lcd.clear();
                                                                 delay(50);
                                                                   while(1){
                                                                        if(!digitalRead(BTN4)){lcd.clear();delay(50);break;}
                                                                        if(!digitalRead(BTN2)){Tegangan++;delay(100);}
                                                                        if(Tegangan>50){Tegangan=0;}
                                                                        if(!digitalRead(BTN3)){Tegangan--;delay(100);}
                                                                        if(Tegangan<0){Tegangan=50;}
                                                                        lcd.setCursor(2,0);
                                                                        lcd.print("Masukan Nilai:");
                                                                        lcd.setCursor(6,1);
                                                                        sprintf(buff,"%3d V",Tegangan);
                                                                        lcd.print(buff);
                                                                    }
                                                                }
                                               break;

                                               case 2 :
                                                         lcd.createChar(0,arrow);
                                                         lcd.setCursor(0,1);
                                                         lcd.write(0);
                                                         lcd.setCursor(0,0);
                                                         lcd.print(" 1.Tegangan");
                                                         lcd.setCursor(1,1);
                                                         lcd.print("2.Arus");
                                                         lcd.setCursor(0,2);
                                                         lcd.print(" 3.Reset");
                                               break;

                                               case 3 :
                                                         lcd.createChar(0,arrow);
                                                         lcd.setCursor(0,2);
                                                         lcd.write(0);
                                                         lcd.setCursor(0,0);
                                                         lcd.print(" 1.Tegangan");
                                                         lcd.setCursor(0,1);
                                                         lcd.print(" 2.Arus");
                                                         lcd.setCursor(1,2);
                                                         lcd.print("3.Reset");
                                                          if(!digitalRead(BTN1)){
                                                                 lcd.clear();
                                                                 delay(50);
                                                                   while(1){
                                                                        if(!digitalRead(BTN4)){lcd.clear();delay(500);lcd.setCursor(1,0);lcd.print("Reset Succesfully");delay(1000);lcd.clear();break;}
                                                                         lcd.setCursor(4,1);
                                                                         lcd.print("Reset Energi");
                                                                         energi = energi - energi;
                                                                         
                                                                    }
                                                                }
                                               break;

                                              }
                                    }
                             }
              break;

              case 2 :
                        
                        lcd.setCursor(0,0);
                        lcd.print(" 1.Kalibrasi");
                        
                        lcd.createChar(0,arrow);
                        lcd.setCursor(0,1);
                        lcd.write(0);
                      
                        lcd.setCursor(1,1);
                        lcd.print("2.Safe Mode");
                      
                        lcd.setCursor(0,2);
                        lcd.print(" 3.Rumus KWh");
                      
                        lcd.setCursor(0,3);
                        lcd.print(" 4.Biaya");
                              if(!digitalRead(BTN1)){
                                   lcd.clear();
                                   delay(50);
                                   while(1){
                                         if(!digitalRead(BTN4)){bidx=1;lcd.clear();delay(175);digitalWrite(buzzer,LOW);digitalWrite(LEDMERAH,LOW);break;}
                                         if(!digitalRead(BTN2)){bidx++;delay(170);}  
                                         if(bidx>2){bidx=1;}
                                             switch(bidx){
                                    
                                               case 1 :
                                                      if(!digitalRead(BTN1)){set_biaya+=0.1;delay(100);}
                                                      if(!digitalRead(BTN3)){set_biaya-=0.1;delay(100);}
                                                        if(set_biaya>10.0){set_biaya=1.0;}
                                                         if(set_biaya<1.0){set_biaya=10.0;}
                                                         lcd.createChar(0,arrow);
                                                         lcd.setCursor(0,0);
                                                         lcd.write(0);
                                                         lcd.setCursor(1,0);
                                                         lcd.print("Set Biaya :");
                                                         lcd.setCursor(12,0);
                                                         lcd.print(set_biaya,2);
                                                         lcd.setCursor(0,1);
                                                         lcd.print(" Mode:");
                                                         lcd.setCursor(6,1);
                                                         lcd.print(elemen1[set_mode]);
                                                           
                                               break;

                                               case 2 :
                                                      if(!digitalRead(BTN1)){set_mode++;delay(100);}
                                                      if(set_mode>1){set_mode=0;}
                                                         lcd.createChar(0,arrow);
                                                         lcd.setCursor(0,1);
                                                         lcd.write(0);
                                                         lcd.setCursor(0,0);
                                                         lcd.print(" Set Biaya :");
                                                         lcd.setCursor(12,0);
                                                         lcd.print(set_biaya,2);
                                                         lcd.setCursor(1,1);
                                                         lcd.print("Mode:");
                                                         lcd.setCursor(6,1);
                                                         lcd.print(elemen1[set_mode]);
                                                             if(!digitalRead(BTN3)){
                                                                 lcd.clear();
                                                                 delay(50);
                                                                   while(1){
                                                                        if(!digitalRead(BTN4)){lcd.clear();delay(175);break;}
                                                                        if(!digitalRead(BTN2)){didx++;delay(170);}
                                                                        if(didx>4){didx=1;}
                                                                          switch(didx){
                                                                            case 1:
                                                                                if(!digitalRead(BTN1)){set_logic1++;delay(170);}
                                                                                if(set_logic1>1){set_logic1=0;}
                                                                                   lcd.createChar(0,arrow);
                                                                                   lcd.setCursor(0,0);
                                                                                   lcd.write(0);
                                                                                   lcd.setCursor(1,0);
                                                                                   lcd.print("RCh1:");
                                                                                   lcd.setCursor(6,0); 
                                                                                   sprintf(buff,"%d",set_logic1);
                                                                                   lcd.print(buff);
                                                                                   
                                                                                   lcd.setCursor(0,1);
                                                                                   lcd.print(" RCh2:");
                                                                                   lcd.setCursor(6,1); 
                                                                                   sprintf(buff,"%d",set_logic2);
                                                                                   lcd.print(buff);

                                                                                   lcd.setCursor(0,2);
                                                                                   lcd.print(" RCh3:");
                                                                                   lcd.setCursor(6,2);
                                                                                   sprintf(buff,"%d",set_logic3);
                                                                                   lcd.print(buff);

                                                                                   lcd.setCursor(0,3);
                                                                                   lcd.print(" RCh4:");
                                                                                   lcd.setCursor(6,3);
                                                                                   sprintf(buff,"%d",set_logic4);
                                                                                   lcd.print(buff);
                                                                            break;
                                                                            case 2:
                                                                                if(!digitalRead(BTN1)){set_logic2++;delay(170);}
                                                                                if(set_logic2>1){set_logic2=0;}
                                                                                   lcd.createChar(0,arrow);
                                                                                   lcd.setCursor(0,1);
                                                                                   lcd.write(0);
                                                                                   lcd.setCursor(0,0);
                                                                                   lcd.print(" RCh1:");
                                                                                   lcd.setCursor(6,0); 
                                                                                   sprintf(buff,"%d",set_logic1);
                                                                                   lcd.print(buff);
                                                                                   
                                                                                   lcd.setCursor(1,1);
                                                                                   lcd.print("RCh2:");
                                                                                   lcd.setCursor(6,1); 
                                                                                   sprintf(buff,"%d",set_logic2);
                                                                                   lcd.print(buff);

                                                                                   lcd.setCursor(0,2);
                                                                                   lcd.print(" RCh3:");
                                                                                   lcd.setCursor(6,2);
                                                                                   sprintf(buff,"%d",set_logic3);
                                                                                   lcd.print(buff);

                                                                                   lcd.setCursor(0,3);
                                                                                   lcd.print(" RCh4:");
                                                                                   lcd.setCursor(6,3);
                                                                                   sprintf(buff,"%d",set_logic4);
                                                                                   lcd.print(buff);
                                                                            break;
                                                                            case 3:
                                                                                if(!digitalRead(BTN1)){set_logic3++;delay(170);}
                                                                                if(set_logic3>1){set_logic3=0;}
                                                                                   lcd.createChar(0,arrow);
                                                                                   lcd.setCursor(0,2);
                                                                                   lcd.write(0);
                                                                                   lcd.setCursor(0,0);
                                                                                   lcd.print(" RCh1:");
                                                                                   lcd.setCursor(6,0); 
                                                                                   sprintf(buff,"%d",set_logic1);
                                                                                   lcd.print(buff);
                                                                                   
                                                                                   lcd.setCursor(0,1);
                                                                                   lcd.print(" RCh2:");
                                                                                   lcd.setCursor(6,1);
                                                                                   sprintf(buff,"%d",set_logic2);
                                                                                   lcd.print(buff);

                                                                                   lcd.setCursor(1,2);
                                                                                   lcd.print("RCh3:");
                                                                                   lcd.setCursor(6,2);
                                                                                   sprintf(buff,"%d",set_logic3);
                                                                                   lcd.print(buff);

                                                                                   lcd.setCursor(0,3);
                                                                                   lcd.print(" RCh4:");
                                                                                   lcd.setCursor(6,3);
                                                                                   sprintf(buff,"%d",set_logic4);
                                                                                   lcd.print(buff);
                                                                            break;
                                                                            case 4:
                                                                               if(!digitalRead(BTN1)){set_logic4++;delay(170);}
                                                                               if(set_logic4>1){set_logic4=0;}
                                                                                   lcd.createChar(0,arrow);
                                                                                   lcd.setCursor(0,3);
                                                                                   lcd.write(0);
                                                                                   lcd.setCursor(0,0);
                                                                                   lcd.print(" RCh1:");
                                                                                   lcd.setCursor(6,0); 
                                                                                   sprintf(buff,"%d",set_logic1);
                                                                                   lcd.print(buff);
                                                                                   
                                                                                   lcd.setCursor(0,1);
                                                                                   lcd.print(" RCh2:");
                                                                                   lcd.setCursor(6,1);
                                                                                   sprintf(buff,"%d",set_logic2);
                                                                                   lcd.print(buff);

                                                                                   lcd.setCursor(0,2);
                                                                                   lcd.print(" RCh3:");
                                                                                   lcd.setCursor(6,2);
                                                                                   sprintf(buff,"%d",set_logic3);
                                                                                   lcd.print(buff);

                                                                                   lcd.setCursor(1,3);
                                                                                   lcd.print("RCh4:");
                                                                                   lcd.setCursor(6,3);
                                                                                   sprintf(buff,"%d",set_logic4);
                                                                                   lcd.print(buff);
                                                                            break;
                                                                            }
                                                                               

                                                                    }
                                                                }
                                                               
                                               break;

                                              }
                                    }
                              }
              break;

              case 3 :
                          lcd.setCursor(0,0);
                          lcd.print(" 1.Kalibrasi");
                          
                          lcd.createChar(0,arrow);
                          lcd.setCursor(0,2);
                          lcd.write(0);
                        
                          lcd.setCursor(0,1);
                          lcd.print(" 2.Safe Mode");
                        
                          lcd.setCursor(1,2);
                          lcd.print("3.Rumus KWh");
                        
                          lcd.setCursor(0,3);
                          lcd.print(" 4.Biaya");
                               if(!digitalRead(BTN1)){
                                   lcd.clear();
                                   delay(50);
                                   while(1){
                                         if(!digitalRead(BTN4)){lcd.clear();delay(175);break;}
                                             switch(cidx){
                                    
                                               case 1 :
                                                      if(!digitalRead(BTN1)){
                                                          lcd.clear();
                                                          delay(300);
                                                                while(1){
                                                                       if(!digitalRead(BTN4)){break;lcd.clear();delay(150);}
                                                                                  if(!digitalRead(BTN1)){input_1+=1.0;delay(175);}
                                                                                  if(!digitalRead(BTN3)){input_1-=0.1;delay(175);}
                                                                                  if(input_1>1500.0){input_1=1200.0;}
                                                                                  if(input_1<1200.0){input_1=1500.0;} 
                                                                                  lcd.setCursor(4,0);
                                                                                  lcd.print("Harga KWh:");
                                                                                  lcd.setCursor(5,1);
                                                                                  lcd.print(input_1,1);
                                                                                    
                                                                  }
                                                          }
                                                           total = energi * (input_1/1000);
                                                           lcd.setCursor(3,0);
                                                           lcd.print("KWh x Harga");
                                                           lcd.setCursor(0,1);
                                                           lcd.print("Harga Rp.");
                                                           lcd.setCursor(9,1);
                                                           lcd.print(total);
                                                           lcd.setCursor(0,2);
                                                           lcd.print("KWh:");  // Diganti fungsi pembacaan energi.
                                                           lcd.setCursor(4,2);
                                                           lcd.print(energi);  // Diganti fungsi pembacaan energi.
                                               break;
                                             }
                                    }
                             }
              break;

              case 4 :
                            lcd.setCursor(0,0);
                            lcd.print(" 1.Kalibrasi");
                            
                            lcd.createChar(0,arrow);
                            lcd.setCursor(0,3);
                            lcd.write(0);
                          
                            lcd.setCursor(0,1);
                            lcd.print(" 2.Safe Mode");
                          
                            lcd.setCursor(0,2);
                            lcd.print(" 3.Rumus KWh");
                          
                            lcd.setCursor(1,3);
                            lcd.print("4.Biaya");
                                if(!digitalRead(BTN1)){
                                  lcd.clear();
                                  delay(50); 
                                  while(1){
                                        if(!digitalRead(BTN4)){lcd.clear();delay(75);break;}
                                         lcd.setCursor(1,1);
                                         lcd.print("Kalkulasi Harga:");
                                         lcd.setCursor(3,2);
                                         lcd.print("Rp." );
                                         lcd.setCursor(6,2);
                                         lcd.print(total);
                                    }
                                  }
              break;

              case 5 :
                       lcd.clear();
                       delay(75);
                       break;
              break;
              case 6 :
                       if(!digitalRead(BTN1)){
                           lcd.clear();
                           delay(50);
                             while(1){
                                    if(!digitalRead(BTN4)){lcd.clear();delay(170);break;}
                                    if(!digitalRead(BTN2)){sampling_data++;delay(170);}
                                    if(!digitalRead(BTN3)){sampling_data--;delay(170);}
                                    if(sampling_data>23){sampling_data=0;}
                                    if(sampling_data<0){sampling_data=23;}
                                      lcd.setCursor(1,0);
                                      lcd.print("Set Sampling Data");
                                    
                                      lcd.setCursor(6,1);
                                      sprintf(buff,"%2d Jam",sampling_data);
                                      lcd.print(buff);
                              }
                        }
                          lcd.createChar(0,arrow);
                          lcd.setCursor(0,0);
                          lcd.write(0);
                        
                          lcd.setCursor(1,0);
                          lcd.print("5.Sampling Data");
                        
                          lcd.setCursor(0,1);
                          lcd.print(" 6.Tambah");
              break;
              case 7 :
                       if(!digitalRead(BTN4)){lcd.clear();delay(75);break;}
                          lcd.createChar(0,arrow);
                          lcd.setCursor(0,1);
                          lcd.write(0);
                        
                          lcd.setCursor(0,0);
                          lcd.print(" 5.Sampling Data");
                        
                          lcd.setCursor(1,1);
                          lcd.print("6.Tambah    ");

                          lcd.setCursor(0,2);
                          lcd.print("            ");
                          lcd.setCursor(0,3);
                          lcd.print("            ");

                          
              break;
              }
          }
    }
}      


void waktu_internet()
{

  //timeClient.update(); // Perbarui waktu dari server NTP

  // Tambahkan offset GMT+7 (7 * 3600 detik)
  //time_t localTime = timeClient.getEpochTime() + (7 * 3600); 

  // Ubah ke dalam bentuk waktu terstruktur (struct tm)
  //struct tm * timeinfo;
  //timeinfo = localtime(&localTime);

  // Periksa apakah sudah waktunya untuk memperbarui LCD
  //if (millis() - lastUpdateTime >= updateInterval) {
    // Format waktu untuk ditampilkan di LCD
    //char timeStr[9]; // 8 karakter untuk jam, menit, detik, dan null terminator
    //sprintf(timeStr, "%02d:%02d:%02d", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
   // Serial.printf( "%02d:%02d:%02d", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
    // Tampilkan waktu di LCD
    //lcd.setCursor(6,0);
    //lcd.print(timeStr); 
    
   // lastUpdateTime = millis(); // Perbarui waktu terakhir pembaruan
  }


void tampilan_sensor()
{
  //indikator_mendekati();
  //indikator_habis();

  lcd.setCursor(6,0);
  lcd.print("10:30 AM"); 
  
  lcd.setCursor(0,1);
  lcd.print("F:"); 
  lcd.setCursor(2,1);
  lcd.print(frekuensi,1); 
  
  lcd.setCursor(0,2);
  lcd.print("V:");
  lcd.setCursor(2,2);
  lcd.print(tegangan,1);
   
  lcd.setCursor(0,3);
  lcd.print("I:"); 
  lcd.setCursor(2,3);
  lcd.print(arus); 

  lcd.setCursor(11,1);
  lcd.print("P:");
  lcd.setCursor(13,1);
  lcd.print(daya,3); 
   
  lcd.setCursor(11,2);
  lcd.print("E:"); 
  lcd.setCursor(13,2);
  lcd.print(energi,3); 

  lcd.setCursor(11,3);
  lcd.print("Mode:");
  lcd.print(elemen1[set_mode]);

}
void kirim_data()
{
}
void input_tambah()
{
  while(1){
       digitalWrite(buzzer,LOW);  
       digitalWrite(LEDMERAH,LOW);
       if(!digitalRead(BTN4)){lcd.clear();break;}
       if(digitalRead(BTN2)==0 && (millis() - TimeTambah) > debounceDelay){set_biaya+=10;}
       if(!digitalRead(BTN3)&& (millis() - TimeTambah) > debounceDelay){set_biaya-=10;}
       if(!digitalRead(BTN1) && (millis() - TimeTambah) > debounceDelay){a++; }
       if(a>1){a=0;}
       if(set_biaya>10.0){set_biaya=1.0;}
       if(set_biaya<1.0){set_biaya=10.0;}
           lcd.setCursor(2,0);
           lcd.print("Tambah Biaya ?");
           lcd.setCursor(4,1);
           lcd.print("Rp.");
           lcd.setCursor(7,1);
          
           lcd.print(set_biaya,0);
           TimeTambah = millis();
    }  
}

void tampilkanMenu() 
{ 
 
}

void prosesMenu() 
{
  // Lakukan sesuatu berdasarkan menu yang dipilih
  // Misalnya, tampilkan pesan atau lakukan aksi tertentu
}


//Memberi Titik Pada Angka Ribuat 
String formatRibuan(int angka) {
  String formattedString = String(angka);
  int length = formattedString.length();

  // Sisipkan titik setiap tiga digit dari belakang
  for (int i = length - 3; i > 0; i -= 3) {
    formattedString = formattedString.substring(0, i) + "." + formattedString.substring(i);
  }

  return formattedString;
}

esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
btn5:1.l
btn5:2.l
btn5:1.r
btn5:2.r
led1:A
led1:C
NOCOMNCVCCGNDINLED1PWRRelay Module
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
NOCOMNCVCCGNDINLED1PWRRelay Module
relay4:VCC
relay4:GND
relay4:IN
relay4:NC
relay4:COM
relay4:NO
NOCOMNCVCCGNDINLED1PWRRelay Module
relay5:VCC
relay5:GND
relay5:IN
relay5:NC
relay5:COM
relay5:NO
NOCOMNCVCCGNDINLED1PWRRelay Module
relay6:VCC
relay6:GND
relay6:IN
relay6:NC
relay6:COM
relay6:NO
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
bz1:1
bz1:2