/* Incluir la librería LiquidCrystal
Documentación de la librería en:
https://www.arduino.cc/en/Reference/LiquidCrystal
*/
#include <LiquidCrystal.h>
 
// Crear un objeto LiquidCrystal usando el constructor:
// LiquidCrystal(rs, enable, d4, d5, d6, d7) 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
const int SENSOR_TEMP_PIN = A0;
int loopCounter = 0;
float accumulatedTemps = 0;
 
void setup() {
  // lcd.begin(cols, rows)
  lcd.begin(16, 2);
  lcd.print("Temperatura:");
 
  // También se mostrará información a través del Monitor serie
  Serial.begin(9600);
}
 
void loop() {
  // Devuelve un valor entre 0 y 1023
  int sensorValue = analogRead(SENSOR_TEMP_PIN);
  // Ya que se le aplica 5V, 1023 unidades = 5V
  float voltage = (sensorValue / 1023.0) * 5.0;
  // Ajuste del sensor (TMP36 inherent 0.5 V output offset)
  voltage -= 0.5;
  // 10 mV por cada grado de temperatura
  // 0.01 V = 1ºC -> grados = voltaje * 100
  float celsiusDegrees = voltage * 100;
 
  accumulatedTemps += celsiusDegrees;
  loopCounter++;
 
  // Se mostrará la temperatura una vez por cada 10000 veces
  //  que se tomen los datos, calculando la temperatura media
  //  de todas las mediciones
  if(loopCounter % 10000 == 0) {
    lcd.setCursor(0, 1);
    String result = "";
    result += (accumulatedTemps / loopCounter);
    // Símbolo de grados º 223 (0xDF)
    result += (char)223;
    result += "C";
    lcd.print(result);
 
    // Mostrar también la temperatura en el monitor serie
    Serial.println(result);
 
    // Se inicia de nuevo la cuenta de mediciones
    loopCounter = 0;
    accumulatedTemps = 0;
  }
 
}