// --------------------------------------------------------------------------------
// Lycée PE MARTIN
// Le 22/11/2023
// Titre : Aspiration centralisée v2
// Matériels : Arduino Uno, lcd 2x16 I2C, 2 led, 5 switchs et 2 boutons-poussoir
// sur Pull-Up interne
// Description : voir sujet du TP et la vidéo https://bit.ly/2ysql1N
// --------------------------------------------------------------------------------

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

// Entrées
#define E_P2 12
#define E_P3 10
#define E_P4 11
#define E_TP 9
#define E_P 8
#define E_BPM1 7
#define E_BPA1 6
// Sorties
#define S_LED_D1 3
#define S_LED_P1 2
#define I2C_ADDR    0x27
#define LCD_COLUMNS 16
#define LCD_LINES   2

// Constructeurs
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);

// Variables globales
bool P1, X, Reset, Set, D1 = LOW;
String message = "";
unsigned int num_msg = 20;
unsigned int num_msg_1 = 30;

// Sous-programme
void Afficher(String message) {
  lcd.clear();
  lcd.print("Aspiration... ");
  lcd.setCursor(0, 1);
  lcd.print(message);
}

void setup() {
  // Configuration des E/S
  pinMode(E_P2, INPUT_PULLUP); pinMode(E_P3, INPUT_PULLUP);
  pinMode(E_P4, INPUT_PULLUP); pinMode(E_TP, INPUT_PULLUP);
  pinMode(E_P, INPUT_PULLUP); pinMode(E_BPM1, INPUT_PULLUP);
  pinMode(E_BPA1, INPUT); pinMode(S_LED_D1, OUTPUT);
  pinMode(S_LED_P1, OUTPUT);
  lcd.init();
  lcd.backlight();
  lcd.print("Systeme ");
  lcd.setCursor(0, 1);
  lcd.print("   d'aspiration");
  delay(3000);
  lcd.clear();
  lcd.print("Aspiration... ");
} // fin de setup

void loop() {
  // Lecture des entrées
  bool P2 = !digitalRead(E_P2);
  bool P3 = !digitalRead(E_P3);
  bool P4 = !digitalRead(E_P4);
  bool TP = !digitalRead(E_TP);
  bool P = !digitalRead(E_P);
  bool BPM1 = !digitalRead(E_BPM1);
  bool BPA1 = !digitalRead(E_BPA1);

  // Traitement
  X = (P2 && P3) || (P2 && P4) || (P3 && P4);
  Reset = !BPA1 || TP || P;
  Set = !X && BPM1;
  P1 = (P1 || Set) && !Reset;
  D1 = (X || TP || P) && BPM1;

  // Ecriture sur les sorties
  digitalWrite(S_LED_D1, D1);
  digitalWrite(S_LED_P1, P1);

  // Partie à compléter. Tous les messages doivent être affichables
  if (...) {
    message = "P.Actif(s):aucun";
    num_msg = 0;
  }
  else if (...){

  }
// etc.

  // Assure la stabilité de l'affichage
  if (num_msg != num_msg_1) {
    Afficher(message);
    num_msg_1 = num_msg;
  }

} // fin de loop
P1
P2
P3
P4
P
TP
M1
A1
D1
R1
R2
R3
<< Aspiration centralisée V2 (Poste 1) >>
M1 : Activation de l'aspiration sur le Poste 1
A1 : Désactivation de l'aspiration sur le Poste 1
D1 : Défaut sur TP ou P
P1 : Etat de l'électrovanne du Poste 1
P2 : Simulation état électrovanne Poste 2
P3 : Simulation état électrovanne Poste 3
P4 : Simulation état électrovanne Poste 4
TP : Simulation trémie pleine sur Poste 1
P : Simulation vide trop poussé sur Poste 1
0
1