// 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);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
gnd1:GND
gnd2:GND
vcc1:VCC
vcc2:VCC
vcc3:VCC
gnd3:GND
Thermistance CTN & R
THERMOMETRE
KY-013
ntc1:GND
ntc1:VCC
ntc1:OUT
led1:A
led1:C
r1:1
r1:2
gnd4:GND