//Definisi kontanta
#define AO_LDR 36 //pin umum Analog pada esp
#define DARK_THRESHOLD 1500 //nilai mbang kecerahan, menentukan gelap terang(lux)
const float RESISTOR_VALUE = 10000.0; /*Nilai umum resistansi resistor dlm rangkaian
yg tidak dapat diubah.*/
const int LED_PIN = 13;
//Deklarasi variabel: (float agr presisi), 0.0=nilai awal var
float voltage = 0.0; //Menyimpan tegangan
float resistance = 0.0; //resistansi yang dihitung dari LDR
float current = 0.0; //Menyimpan arus yang dihitung mengalir melalui rangkaian
float frequency = 0.0; //frekuensi yang dihitung berdasarkan tegangan.*/
void setup() {
Serial.begin(115200); /*inisialisasi kecepatanbaud 115200 bps, memungkinkan komunikasi
antara mikrokontroler danperangkat luar (seperti komputer) melalui port serial*/
pinMode(LED_PIN, OUTPUT); //Mengonfigurasi pin sebagai mode
}
void loop() {
unsigned long currentMillis = millis(); /*Menyimpan waktu dlm milidetik sejak program dimulaimenggunakan
fungsi millis() non negatif besar*/
int Kecerahan = analogRead(AO_LDR); /*Membaca nilai analog dari pin yang terhubung ke LDR
menggunakan fungsi analogRead(AO_LDR)*/
voltage = Kecerahan * (3.3 / 4095.0); /*Menghitung tegangan Kecerahan x dengan rasio
antara tegangan (3.3V) dan nilai max analogRead
(4095) nilai yg dpt dibaca esp*/
resistance = (3.3 * RESISTOR_VALUE) / (voltage * (3.3 - voltage) / 10000.0);
//Menghitung resistansi berdasarkan hukum ohm dan rumus pembagi tegangan.
current = voltage / RESISTOR_VALUE; //Menghitung arus berdasarkan hukum ohm.
frequency = 1 / (2 * (3.3 - voltage)); /*Menghitung frekuensi berdasarkan rumus yang
terkait dengan tegangan.*/
Serial.print("Kecerahan: ");
Serial.print(Kecerahan);
Serial.println(" lux");
Serial.print("Tegangan: ");
Serial.print(voltage);
Serial.print(" V, Hambatan: ");
Serial.print(resistance);
Serial.print(" ohm, Arus: ");
Serial.print(current * 1000);
Serial.print(" mA, Frekuensi: ");
Serial.print(frequency);
Serial.print(" Hz ");
if (Kecerahan <= DARK_THRESHOLD) {
Serial.println("TERANG");
digitalWrite(LED_PIN, LOW);
} else {
Serial.println("GELAP");
digitalWrite(LED_PIN, HIGH);
}
delay(1000);
}