#include <LiquidCrystal.h>
#include <TimerOne.h>

LiquidCrystal lcd(12, 10, 5, 4, 3, 2);
int ThermistorPin = A0;
int PhotoResistorPin = A1;

// Estas constantes deben coincidir con los atributos "gamma" y "rl10" del fotorresistor.
const float GAMMA = 1.2;
const float RL10 = 20.0;

int analogValue = 0;
float voltage = 0.0;
float resistance = 0.0;
float lux = 0.0;

float Vo;
float R1 = 10000;
float logR2, R2, kelvin, celsius;
float c1 = 1.0266267e-03; //coeficiente A
float c2 = 2.5236164e-04; //coeficiente B
float c3 = 3.2744565e-09; //coeficiente C


unsigned long timerPeriod = 1000000; // 1 segundo por defecto

void setup() {
  lcd.begin(16, 2);
  Serial.begin(9600);
  Timer1.initialize(timerPeriod); // Inicializar con el periodo por defecto
  Timer1.attachInterrupt(timerIsr); // Asociar la función de interrupción al temporizador
  Serial.println("Ingrese el tiempo del timer");
}

void loop() {
  // Leer el puerto serial para recibir comandos de configuración
  if (Serial.available() > 0) {
    timerPeriod = Serial.parseInt(); // Leer el nuevo periodo
    if(timerPeriod>0){
      Timer1.stop(); // Detener el temporizador mientras se actualiza
      Timer1.initialize(timerPeriod); // Configurar el nuevo periodo
      Timer1.start(); // Reiniciar el temporizador
    }
  }

  Vo = analogRead(ThermistorPin)+0.5;
  R2 = R1 / (1024.0 / (float)Vo - 1.0); // VCC-R1-R_therm-GND (pullup+NTC)
  logR2 = log(R2);
  kelvin = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
  celsius = kelvin - 273.15;

  // Convertir el valor analógico en valor de lux:
  analogValue = analogRead(PhotoResistorPin);
  voltage = float(analogValue) / 1024.0 * 5.0;
  resistance = 2000.0 * voltage / (1.0 - voltage / 5.0);
  lux = pow(RL10 * 1e3 * pow(10.0, GAMMA) / resistance, (1.0 / GAMMA));

}

// Función de interrupción del temporizador
void timerIsr() {
  lcd.setCursor(0, 0);
  lcd.print("Grados: " + String(celsius, 2));
  lcd.setCursor(0, 1);
  lcd.print("Luxes: " + String(lux, 2));
}
$abcdeabcde151015202530354045505560fghijfghij