// --------------------------------------------------------------------------------
// 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