// Membuat sebuah program terkait konversi ADC ke LUX LDR

const int pinSensor = A0;
const int pinLED = 22;
int adcValue = 0;
// Karakteristik LDR (datasheet)
const float GAMMA = 0.7; // Nilai ketetapan Gamma sebesar 0.7
const float RL10 = 50; // Nilai ketetapan RL10 sebesar 50

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200); // inisiasi serial comm dengan baudrate 115200 
  pinMode(pinLED, OUTPUT); // pinLED sebagai Output 
  pinMode(pinSensor, INPUT); // pinSensor sebagai Input
  Serial.println("A15-Dinda Yunistri Ariani (Assignment sesi 10)");
  Serial.println();
}

void loop() {
 
  // konvert nilai analog adc kedalam nilai lux
  int adcValue = analogRead(pinSensor);
  float voltage = adcValue / 4095. * 5; //4095 = max ADC esp32
  float resistance = 2000 * voltage / (1 - voltage / 5);
  float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
  
  // cetak nilai adc ke serial monitor
  Serial.print(adcValue);
  Serial.println("    Nilai ADC");
  //akuisisi nilai lux ke serial monitor
  Serial.print(lux);
  Serial.println("  Nilai LUX");

  if (lux > 50){
    Serial.println("dengan Nilai LUX tersebut maka, Cahaya Terang");
    digitalWrite(pinLED, HIGH);
  } else {
    Serial.println("dengan Nilai LUX tersebut maka, Cahaya Gelap");
    digitalWrite(pinLED, LOW);
    }

  // jeda akuisisi
  delay(1000);
}