// Lycée PE MARTIN
// Le 4/1/2023
// Titre : Thermomètre
// Matériels : Arduino Uno, lcd 2x16 I2C,  NTC KY-013
// Description : voir le sujet
// Ressources
// Bibliothèque : https://www.arduino.cc/reference/en/libraries/liquidcrystal/

// Bibliothèque
#include <LiquidCrystal_I2C.h>

// Paramètres de l'objet lcd
#define I2C_ADDR    0x27
#define LCD_COLUMNS 16
#define LCD_LINES   2

// CTN
#define KY_013 A0 // Module KY-013 (CTN+R) connecté à l'entrée analogique A0
const float BETA = 3950;

// LED
#define LED 8

// Création de l'objet lcd
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);

void setup() {
  // Initialisation de la console
  Serial.begin(9600);
  // Configuration de la broche LED
  pinMode(LED, OUTPUT);
  // Initialisation du LCD
  lcd.init(); // A placer en premier
  lcd.backlight(); // Commande du rétroéclairage
  lcd.print("Thermometre");
  delay(3000);
}


// Programme principal
void loop() {
  // Lire
  // ------------------------------
  int N = analogRead(KY_013);
  
  // Traiter
  // ------------------------------
  // Modèle linéarisé
  //float Temp = (798.72- N)/11.469;

  // Modèle non linéarisé
  float Temp = 1 / (log(1 / (1023.0 / N - 1.0)) / BETA + 1 / 298.15) - 273.15;
  
  // Alarme
  if (10<= Temp <=40){ // ((Temp <10) || (Temp >40))
    digitalWrite(LED,LOW);
  }
  else{
     digitalWrite(LED,HIGH);
  }

  // Ecrire
  // ------------------------------
  // Ecrire dans la console
  Serial.print("Temperature: ");
  Serial.print(Temp);
  Serial.println("℃");
  
  // Ecrire sur le LCD
  lcd.clear();
  lcd.print("Temp.:");
  lcd.print(Temp);
  lcd.write(0xdf); // °
  lcd.print("C");

  // Une mesure par seconde
  delay(1000);
}
Thermistance CTN & R
THERMOMETRE
KY-013