Bonjour a tous.
Je viens de réaliser un projet Arduino sur la base du projet qu'a réalisé PlaisirArduino (lien de son site Web : Thermostat créé avec un LCD et Arduino. - PlaisirArduino ).
.
Ce projet est un thermostat d'ambiance (destiné a une serre de jardin pour ma part) le problème est que j'ai voulu utiliser un arduino Nano à la place du Uno qu'il utilisait. Je ne sais pas si le problème vient de la mais au bout de quelques dizaines de minutes mon Ecran LCD 16x2 se met à déconner. En effet, il m'affiche des caractères totalement inconnus et les menus ne sont plus accéssibles. Peut-être je tire trop d'intensité sur l'arduino avec mon relais ? qui est un simple relais 5V DC trouvé dans un tiroir pouvant commuter jusqu'à 3 A en 230 V.
Je vous met des photos en pièces jointe.
J'utilise une alimentation 5 V sur secteur qui est branchée sur la broche VIN et GND de l'arduino.
L'écran est branché sur un répartiteur de la broche GND et 5 V de l'arduino.
Voici le code :
//***** Mise en place des déclarations *****//
//***** Bibliothèques. *****//
#include <LiquidCrystal.h> //Gestion de l'afficheur LCD
#include "OneWire.h"
#include "DallasTemperature.h"
OneWire oneWire(A0);
DallasTemperature ds(&oneWire);
//***** Déclaration des variables. *****//
//BROCHES D'EXPLOITATION LCD.
#define RS 12 //Broche de synchronisation LCD.
#define E 11 //Broche d'activation de transmission données LCD.
#define D4 5 //Broche de donnée LCD.
#define D5 4 //Broche de donnée LCD.
#define D6 3 //Broche de donnée LCD.
#define D7 2 //Broche de donnée LCD.
//***** BOUTONS POUSSOIR. *****//
//BROCHES D'ENTREE BOUTONS.
#define ENTREE 6 //Broche Bouton.
#define HAUT 7 //Broche Bouton.
#define BAS 8 //Broche Bouton.
//ENTREE.
byte etat_bouton_entree = 0; //État actuel du bouton.
byte precd_entree = 0; //État précédent bouton.
//PLUS.
byte etat_bouton_plus = 0; //État actuel du bouton.
byte precd_plus = 0; //État précédent bouton.
//MOINS.
byte etat_bouton_moins = 0; //État actuel du bouton.
byte precd_moins = 1; //État précédent bouton.
//GENERAL BOUTONS.
int incremente = 0; //Incrémentation de la saisi.
byte ret_boutons = 0; //Retour d'état bouton.
//***** VOYANT LED. *****//
//BROCHES DE SORTIES LED.
#define ROUGE 10//Broche LED ROUGE.
#define VERT 9 //Broche LED VERTE.
#define RELAY 13
//POTENTIMETRE.
#define POTAR A1 //Broche potentiomètre.
#define SONDE A0
int memo_temperature; //Contrôle de tendance.
int memo_MAXI_T; //Mémorisation de la température MAXI mesuré.
int memo_MINI_T; //Mémorisation de la température MINI mesuré.
//***** VARIABLES GLOBALES PROGRAMME *****//
//LCD.
int fenetre = 0; //Variable de verrouillage fenêtre.
//TEMPORISATION.
unsigned long memo_temps_1; //Chargement du temps décompté.
unsigned long memo_temps_2; //Chargement du temps décompté.
//SYSTEME.
byte etat = 0; //État d'activation du système et des alarmes.
byte memo_etat = 0; //État d'activation du système et des alarmes.
byte tendance = 4; //État de la tendance du système.
//TEMPORISATIONS.
unsigned long memo_temps[2] {}; //Tableau des retours tempos.
//DONNÉES PARAMETRES.
//Index 0 utile pour donnée retour système = Capteurs.
int parametres [7] {0, 15, 12, 20, 7, -20, 100}; //Tableau des données en traitement ( --, MAX, min, alarme MAX, alarme min,...)
int val_defaut[2] { -20, 100}; //Tableau des données MINI MAXI.
//AFFICHAGE DES FENÊTRES.
String nom_parametres [7] {"TEMP.:", "ARRET :", "MARCHE:", "MAX_T:", "MIN_T:"}; //Tableau des nom de parametres.
String etat_systeme [6] {" ", "STOP ", "RUN ", "T_MAXI", "T_MINI"}; //Tableau des état systeme.
//***** SYMBOLES SPECIFIQUES. *****//
//CELCIUS. "°"
byte celsius[8] = { 0b11100, 0b10100, 0b11100, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000};
//FLECHE BAS.
byte fleche_bas[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100};
//FLECHE HAUT.
byte fleche_haut[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100};
//FLECHE STABLE.
byte fleche_stable[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100};
//FLECHE POINTEUSE ALARME.
byte fleche_pointe_alarme[8] = { 0b11000, 0b11100, 0b11110, 0b11111, 0b11111, 0b11110, 0b11100, 0b11000};
//***** INSTANCIATION DE LCD. *****//
LiquidCrystal lcd (RS, E, D4, D5, D6, D7); //Paramétrage de la classe LCD.
//***** CONFIGURATIONS,INTIALISATIONS ET TEST *****//
void setup() {
Serial.begin(9600); // définition de l'ouverture du port série
ds.begin(); // sonde activée
//***** CONFIGURATIONS *****//
//Moniteur série.
//Serial.begin(9600); //Configuration du moniteur série.//--*/
//LCD.
lcd.begin(16, 2); //Configuration LCD.
//ENTREE.
pinMode (ENTREE, INPUT_PULLUP); //Configuration de broche en entrée.
pinMode (HAUT, INPUT_PULLUP); // //
pinMode (BAS, INPUT_PULLUP); //Configuration de broche en entrée.
//SORTIE.
pinMode (ROUGE, OUTPUT); //Configuration de broche en sortie.
pinMode (VERT, OUTPUT); //Configuration de broche en sortie.
pinMode (RELAY, OUTPUT);
//***** INTITIALISATION *****//
//LCD => Affectation des caractères spéciaux.
lcd.createChar(1, celsius ); //Assigné 1 à ce caractère.
lcd.createChar(2, fleche_haut ); //Assigné 2 à ce caractère.
lcd.createChar(3, fleche_bas ); //Assigné 3 à ce caractère.
lcd.createChar(4, fleche_stable ); //Assigné 4 à ce caractère.
lcd.createChar(5, fleche_pointe_alarme ); //Assigné 5 à ce caractère.
//PROGRAMME => Lecture du temps actuel.
unsigned long temps_actuel = millis(); //Acquisition du temps actuel.
//CAPTEUR => Lecture de la température.
/*Simulation d'un capteur de température*/
//parametres[0] = analogRead(POTAR);
//Lecture du signale à la broche dédié.
ds.requestTemperatures();
int sonde1 = ds.getTempCByIndex(0);
parametres[0] = sonde1; //Mise à l'échelle et chargement de la valeur.
memo_MAXI_T = parametres[0]; //Initialisation des valeurs d'enregistrement MAXI.
memo_MINI_T = parametres[0]; //Initialisation des valeurs d'enregistrement MINI.
//***** TEST *****//
//LED.
digitalWrite(ROUGE, HIGH);//Allumage.
digitalWrite(VERT, HIGH); //Allumage.
//LCD.
lcd.clear(); //Effacement de l'afficheur.
lcd.setCursor(0, 0); //Positionnement du curseur.
lcd.print("-- THERMOSTAT --"); //Affichage d'un message.
lcd.setCursor(0, 1); //Positionnement du curseur.
lcd.print("----- PRET -----"); //Affichage d'un message.
delay(2000); //Temporisation.
//LED
analogWrite(ROUGE, LOW); //Extinction.
analogWrite(VERT, LOW); //Extinction.
/*MONITEUR SÉRIE.
Serial.println("***** PROJET PRET *****"); //Affichage d'un message.
Serial.println(); //Saut de ligne.*/
}//Fin de setup().
//------------------------------------------------------------------
void raz() { //Sans paramètres.
//***** RETOUR DÉBUT MENU. *****/
ret_boutons = 0; //Initialisation => Validation d'action.
fenetre = 0; //Initialisation => Retour fenêtre lecture.
}//fin de raz();
//------------------------------------------------------------------
byte boutons () { //Sans paramètres.
//***** Lecture de l'état des entrées de boutons. *****//
byte etat_bouton_entree = digitalRead(ENTREE); //Lecture de l'état de l'entrée bouton.
byte etat_bouton_plus = digitalRead(HAUT); //Lecture de l'état de l'entrée bouton.
byte etat_bouton_moins = digitalRead(BAS); //Lecture de l'état de l'entrée bouton.
//INCREMENTATION DE LA SAISI.
switch (fenetre) {
case 11:
case 21:
case 31:
case 41:
if (etat_bouton_plus == LOW) { //Conditionnement d’exécution.
incremente++; //Incrémentation positif de la saisi.
delay(250); //Temporisation d'appuis.
}//if.
if (etat_bouton_moins == LOW) { //Conditionnement d’exécution.
incremente--; //Incrémentation négative de la saisi.
delay(250); //Temporisation d'appuis.
}//if.
break;
}
//***** Gestion de l'état du bouton ENTREE.
if (etat_bouton_entree != precd_entree) { //Contrôle de l'état précédent un appui.
if (etat_bouton_entree == LOW) { //Conditionnement d’exécution.
precd_entree = etat_bouton_entree; //Chargement de l'état bouton.
delay(250); //Temporisation d'appuis.
return 1; //Retour d'état => ENTREE.
}//if.
}//if.
precd_entree = etat_bouton_entree; //Chargement de l'état bouton.
//***** Gestion de l'état du bouton PLUS.
if (etat_bouton_plus != precd_plus) { //Contrôle de l'état précédent un appui.
if (etat_bouton_plus == LOW) { //Conditionnement d’exécution.
precd_plus = etat_bouton_plus; //Chargement de l'état bouton.
delay(250); //Temporisation d'appuis.
return 2; //Retour d'état => PLUS.
}//if.
}//if.
precd_plus = etat_bouton_plus; //Chargement de l'état bouton.
//***** Gestion de l'état du bouton MOINS.
if (etat_bouton_moins != precd_moins) {//Contrôle de l'état précédent un appui.
if (etat_bouton_moins == LOW) { //Conditionnement d’exécution.
precd_moins = etat_bouton_moins; //Chargement de l'état bouton.
delay(250); //Temporisation d'appuis.
return 3; //Retour d'état => MOINS.
}//if.
}//if.
precd_moins = etat_bouton_moins; //Chargement de l'état bouton.
return 0; //Retour d'état => PAR DEFAUT.
}//Fin de boutons().
//------------------------------------------------------------------
void affiche (byte cas, int i) { //Paramètre => Index respectif de la donnée dans le tableau.
switch (cas) { //Contrôle de index de fonction.
case 0://LECTURE.
lcd.clear(); //Rafraîchissement de l'affichage.
lcd.setCursor(0, 0); //Positionnement du curseur.
lcd.print("TEMP: "); //Affichage d'un message.
lcd.setCursor(0, 1); //Positionnement du curseur.
lcd.print("ETAT: "); //Affichage d'un message.
lcd.print(etat_systeme [etat]); //Affichage d'un message.
break;
case 1://SELECTION DES PARAMETRES. P1 => P4.
lcd.clear(); //Rafraîchissement de l'affichage.
lcd.setCursor(0, 0); //Positionnement du curseur.
lcd.print("PARAMETRE "); //Affichage d'un message.
lcd.print(i); //Affichage de l'index de la donnée.
lcd.setCursor(0, 1); //Positionnement du curseur.
lcd.print(nom_parametres [i]); //Affichage d'un message.
lcd.print(parametres [i]); //Affichage d'un message.
lcd.write(1); //Affichage du caractère 1 " ° " .
lcd.print("C "); //Affichage d'un message.
break;
case 2://SELECTION MESURES MINI MAXI.
lcd.clear(); //Rafraîchissement de l'affichage.
//MESURE MAXI.
lcd.setCursor(0, 0); //Positionnement du curseur.
lcd.print("Mesure"); //Affichage d'un message.
if (memo_etat == 4) { //Contrôle de l'état d'alarme.
lcd.write(5); //Affichage du caractère 5 fleche pointeur d'alarme .
} else { //Action par défaut.
lcd.print(" "); //Affichage d'un message.
}
lcd.print("MINI:"); //Affichage d'un message.
lcd.print(memo_MINI_T); //Affichage de la valeur MINI mesuré.
lcd.write(1); //Affichage du caractère 1 " ° " .
lcd.print("C "); //Affichage d'un message.
//MESURE MAXI.
lcd.setCursor(0, 1); //Positionnement du curseur.*/
lcd.print("Mesure"); //Affichage d'un message.
if (memo_etat == 3) { //Contrôle de l'état d'alarme.
lcd.write(5); //Affichage du caractèer 5 flèche pointeur alarme .
} else { //Action par défaut.
lcd.print(" "); //Affichage d'un message.
}
lcd.print("MAXI:"); //Affichage d'un message.
lcd.print(memo_MAXI_T); //Affichage de la valeur MAXI mesuré.
lcd.write(1); //Affichage du caractère 1 " ° " .
lcd.print("C "); //Affichage d'un message.
break;
case 3://AFFICHAGE DE SELECTION R.A.Z.
lcd.clear(); //Rafraîchissement de l'affichage.
lcd.setCursor(3, 0); //Positionnement du curseur.
lcd.print("?? RAZ ??"); //Affichage d'un message.
lcd.setCursor(0, 1); //Positionnement du curseur.
lcd.print("ALARME + MESURES"); //Affichage d'un message.
break;
case 4://AFFICHAGE DE LA SAISI;
lcd.clear(); //Rafraîchissement de l'affichage.
lcd.setCursor(0, 0); //Positionnement du curseur.
lcd.print("SAISI "); //Affichage d'un message.
lcd.setCursor(0, 1); //Positionnement du curseur.
lcd.print(nom_parametres[i]); //Affichage de l'index de la donnée.
break;
case 5://AFFICHAGE DE L'EXECUTION DE R.A.Z.
lcd.clear(); //Rafraîchissement écran.
lcd.setCursor(0, 0); //Positionnement du curseur.
lcd.print("!! RAZ ="); //Affichage d'un message.
delay(1500); //Temps d'affichage.
digitalWrite(ROUGE, LOW); //Activation LED ROUGE = EXTINCTION.
lcd.print("= OK !!"); //Affichage d'un message.
delay(1500); //Temps d'affichage.
break;
}
//FIN D'EXECUTION.
ret_boutons = 0; //Initialisation => Validation d'action.
}//Fin de sélection().
//------------------------------------------------------------------
void actualiser(byte i) { //Sans paramètres.
switch (i) {
case 1:
//***** ACTUALISATION DONNÉES LECTURES. *****/ /
//Affichage de la température.
lcd.setCursor(6, 0); //Positionnement du curseur.
lcd.print(parametres[0]); //Affichage de l'index de la donnée.
lcd.write(1); //Appel du caractère 1 " ° " .
lcd.print("C "); //Rafraîchissement de la valeur.
//Affichage de l'état système.
lcd.setCursor(6, 1); //Positionnement du curseur.
lcd.print(etat_systeme[etat]); //Affichage de l'index de la donnée.
lcd.print(" "); //Rafraîchissement de la valeur.
//Affichage de la tendance du système.
lcd.setCursor(15, 0); //Positionnement du curseur.
lcd.write(tendance); //Affichage de l'index de la donnée.
lcd.print(" "); //Rafraîchissement de la valeur.t
break;
case 2:
//***** ACTUALISATION DE LA SAISI. *****/ /
lcd.setCursor(8, 1); //Positionnement du curseur.
lcd.print(incremente); //Affichage d'un message.
lcd.write(1); //Affichage d'un message.
lcd.print("C "); //Affichage d'un message.
break;
}
}//Fin de actualis_saisi().
//------------------------------------------------------------------
//***** PROGRAMME PRINCIPALE *****//
void loop() {
//***** ACQUISITION DU SIGNALE ANALOGIQUE *****//
/*Simulation d'un capteur de température*/
//parametres[0] = analogRead(POTAR); //Lecture du signale à la broche dédié.
//parametres[0] = map(parametres[0], 0, 1023, -15, 50); //Mise à l'échelle et chargement de la valeur.
//---------------------------
//---------------------------
ds.requestTemperatures();
int sonde2 = ds.getTempCByIndex(0);
Serial.print(sonde2);
Serial.println( "C");
parametres[0] = sonde2;
//Serial.println(parametres[0]);
//---------------------------
//---------------------------
//***** ACQUISITION DES BOUTONS. *****//
ret_boutons = boutons ();//Appel de fonction.
//***** CONTÔLE DU TEMPS *****//
unsigned long temps_actuel = millis(); //Acquisition du temps actuel.
//TEMPOS_1 ACTIONS.
/*Contrôle l'activité au clavier.*/
if (fenetre != 0) { //Conditionnement d'activation.
if (ret_boutons != 0 ) { //Contrôle des actions au clavier.
memo_temps_2 = temps_actuel; //Mise à l'origine du décompte de temporisation.
}//if.
if (temps_actuel - memo_temps_2 >= 60000) { //Contrôle de l'écart de temps.
memo_temps_2 = temps_actuel; //Charge le temps actuel au passage de boucle.
raz();
}//if.
}//if.
//TEMPOS_2 TENDANCE.
if (temps_actuel - memo_temps_1 >= 5000) { //Contrôle de l'écart de temps.
memo_temps_1 = temps_actuel; //Charge le temps actuel au passage de boucle.
//***** ENREGISTREMENT DE LA TENDANCE HAUTE OU BASSE. *****//
/* Contrôle si la température crois ou décrois. */
//Tendance à la hausse.
if (parametres[0] > memo_temperature ) { //Contrôle de la température.
tendance = 2; //Chargement de la valeur de tendance positive.
}
//Tendance à la baisse.
if (parametres[0] < memo_temperature ) { //Contrôle de la température.
tendance = 3; //Chargement de la valeur de tendance négative.
}
//Tendance égale.
if (parametres[0] == memo_temperature ) { //Contrôle de la température.
tendance = 4; //Chargement de la valeur de tendance nul.
}
//***** ENREGISTREMENT DE LA TEMPERATURE ACTUELLE. *****//
memo_temperature = parametres[0]; //Mise en mémoire de la température actuel au passage dans la tempos.
}
//***** ENREGISTREMENT DE LA TEMPERATURE MAXI ET MINI MESURÉ. *****//
//Enregistrement de la température maximum. MAXI_T
if (parametres[0] > memo_MAXI_T) { //SIGNALE > MAXI_T;
memo_MAXI_T = parametres[0]; //Chargement de la valeur MAXI. +1 => Correction.
}
//Enregistrement de la température minimum. MINI_T.
if (parametres[0] < memo_MINI_T) { //SIGNALE > MAXI_T;
memo_MINI_T = parametres[0]; //Chargement de la valeur MAXI. +1 => Correction.
}
//***** GESTION DE L'AFFICHAGE. *****//
//***** FENETRE DE LECTURE.
//FENETRE 1. => LECTURE.
if ( fenetre == 0 && ret_boutons == 0) { //AUCUNE ACTIONS.
affiche(0, 0); //Appel fonction => Validation fenêtre 1.
fenetre = 1; //Verrouillage de la fenêtre.
}
//Actualisation de la lecture de la donnée système.
if (fenetre == 1) { //Conditionnement de l'affichage.
//Affichage de la température, l'état système et la tendance du système.
actualiser(1);
}
//***** SELECTION DES PARAMETRES.
//FENETRE 2. => LISTE DES PARAMETRES. (Transitoire)
if (fenetre == 1 && ret_boutons == 1) { //APPUI SUR ENTRÉE.
//Serial.println("LISTE DES PARAMETRES");
lcd.clear(); //Rafraîchissement de l'affichage.
lcd.setCursor(0, 0); //Positionnement du curseur.
lcd.print("LISTE DES"); //Affichage d'un message.
lcd.setCursor(0, 1); //Positionnement du curseur.
lcd.print("PARAMETRES"); //Affichage d'un message.
delay(1500); //Temporisation d'affichage.
ret_boutons = 2; //Validation d'action.
fenetre = 2; //Verrouillage de la fenêtre.
}
//***** SELECTION DES PARAMETRES. *****//
switch (fenetre) {
case 2:// FENETRE 1 => DEFILEMENT PARAMETRE_1.
affiche(1, 1); //Appel de fonction.
fenetre = 3; //Verrouillage de la fenêtre.
ret_boutons = 0; //Validation d'action.
//Serial.print("FENETRE 1 => DEFILEMENT PARAMETRE_1 :"); Serial.println(fenetre);
//PAS UTILISÉ.
/*if (ret_boutons == 1) {
saisi(X); //Appel de fonction.
fenetre = X; //Verrouillage de la fenêtre.
ret_boutons = 0; //Validation d'action.
Serial.print("FENETRE X.X => SELECTION PARAMETRES X :"); Serial.println(fenetre);
}//---*/
/*if (ret_boutons == 2) {
saisi(X); //Appel de fonction.
fenetre = X; //Verrouillage de la fenêtre.
ret_boutons = 0; //Validation d'action.
Serial.print("FENETRE X.X => SELECTION PARAMETRES X :"); Serial.println(fenetre);
}//---*/
break;
case 3:// FENETRE 1 => DEFILEMENT PARAMETRE_2.
if (ret_boutons == 1) {//Appui sur ENTRÉE.
affiche(4, 1); //Appel de fonction.
fenetre = 11; //Verrouillage de la fenêtre.
ret_boutons = 0; //Validation d'action.
//Serial.print("FENETRE 1.1 => SELECTION PARAMETRES 1 :"); Serial.println(fenetre);
}//---*/
if (ret_boutons == 2) {//Appui sur PLUS(+).
affiche(1, 2); //Appel de fonction.
fenetre = 4; //Verrouillage de la fenêtre.
ret_boutons = 0; //Validation d'action.
//Serial.print("FENETRE 2 => DEFILEMENT PARAMETRE_1 :"); Serial.println(fenetre);
}
break;
case 4://PARAMETRE_3.
if (ret_boutons == 1) {//Appui sur ENTRÉE.
affiche(4, 2); //Appel de fonction.
fenetre = 21; //Verrouillage de la fenêtre.
ret_boutons = 0; //Validation d'action.
//Serial.print("FENETRE 2.1 => SELECTION PARAMETRES 2 :"); Serial.println(fenetre);
}
if (ret_boutons == 2) {//Appui sur PLUS(+).
affiche(1, 3); //Appel de fonction.
fenetre = 5; //Verrouillage de la fenêtre.
ret_boutons = 0; //Validation d'action.
//Serial.print("FENETRE 3 => DEFILEMENT PARAMETRE_3 :"); Serial.println(fenetre);
}
break;
case 5://PARAMETRE_4.
if (ret_boutons == 1) {//Appui sur ENTRÉE.
affiche(4, 3); //Appel de fonction.
fenetre = 31; //Verrouillage de la fenêtre.
ret_boutons = 0; //Validation d'action.
//Serial.print("FENETRE 3.1 => SELECTION PARAMETRES 3 :"); Serial.println(fenetre);
}
if (ret_boutons == 2) {//Appui sur PLUS(+).
affiche(1, 4); //Appel de fonction.
fenetre = 6; //Verrouillage de la fenêtre.
ret_boutons = 0; //Validation d'action.
//Serial.print("FENETRE 4 => DEFILEMENT PARAMETRE_4 :"); Serial.println(fenetre);
}
break;
case 6://VISU MINI MAXI.
if (ret_boutons == 1) {//Appui sur ENTRÉE.
affiche(4, 4); //Appel de fonction.
fenetre = 41; //Verrouillage de la fenêtre.
ret_boutons = 0; //Validation d'action.
//Serial.print("FENETRE 4.1 => SELECTION PARAMETRES 4 :"); Serial.println(fenetre);
}
if (ret_boutons == 2) {//Appui sur PLUS(+).
affiche(2, 0); //Appel de fonction.
fenetre = 7; //Verrouillage de la fenêtre.
ret_boutons = 0; //Initialisation => Validation d'action.
//Serial.print("FENETRE 5 => DEFILEMENT PARAMETRE_5 :"); Serial.println(fenetre);
}
break;
case 7://RAZ ALARME.
//PAS UTILISÉ.
/* if (ret_boutons == 1) {//Appui sur ENTRÉE.
saisi(X); //Appel de fonction.
fenetre = X; //Verrouillage de la fenêtre.
ret_boutons = 0; //Initialisation => Validation d'action.
Serial.print("FENETRE X.X => SELECTION PARAMETRES X :"); Serial.println(fenetre);
}//--*/
if (ret_boutons == 2) {//Appui sur PLUS(+).
affiche(3, 0); //Appel de fonction.
fenetre = 8; //Verrouillage de la fenêtre => Retour début.(2)
ret_boutons = 0; //Initialisation => Validation d'action.
//Serial.print("FENETRE 6 => DEFILEMENT PARAMETRE_6 :"); Serial.println(fenetre);
}
break;
case 8://FIN DE LISTE.
if (ret_boutons == 1) {//Appui sur ENTRÉE.
affiche(5, 0); //Appel de fonction.
fenetre = 61; //Verrouillage de la fenêtre.
ret_boutons = 0; //Initialisation => Validation d'action.
//Serial.print("FENETRE 6.1 => SELECTION PARAMETRES 6 :"); Serial.println(fenetre);
}
if (ret_boutons == 2) {//Appui sur PLUS(+).
fenetre = 2; //Verrouillage de la fenêtre => Retour début.(2)
ret_boutons = 0; //Initialisation => Validation d'action.
}
break;
//***** SAISI DE LA VALEUR DE PARAMETRES. *****//
/*Les données ne peuvent pas être supérieur ou égales les une par rapport aux autres.
Mise en butée, par défaut, de un point supérieur ou inférieur.*/
case 11: //FENETRE 1.1 => SAISI VALEUR ARRET(1).
// Mise en butée MINI / MAXI de la valeur en cours de saisi.
incremente = constrain(incremente, parametres[2] + 1, parametres[3] - 1); // (2)MARCHE => (3)MAXI_T.
actualiser(2);
//Validation de la saisi.
if (ret_boutons == 1) { //Contrôle de validation.
parametres [1] = incremente; //Chargement de la SAISI VALEUR ARRET.
raz(); //Appel de la fonction.
}
break;
case 21: //FENETRE 3.2 => SAISI VALEUR MARCHE.
// Mise en butée MINI / MAXI de la valeur en cours de saisi.
incremente = constrain(incremente, parametres[4] + 1, parametres[1] - 1); // (4)MINI_T => (1)ARRÊT.
actualiser(2);
//Validation de la saisi.
if (ret_boutons == 1) { //Contrôle de validation.
parametres [2] = incremente; //Chargement de la SAISI VALEUR ARRET.
raz(); //Appel de la fonction.
}
break;
case 31: //FENETRE 3.3 => SAISI VALEUR MAXI_T.
// Mise en butée MINI / MAXI de la valeur en cours de saisi.
incremente = constrain(incremente, parametres[1] + 1, parametres[6] ); // (1)ARRÊT => (6)MAXI_MAXI Défini par l'utilisateur. (par défaut 100).
actualiser(2);
//Validation de la saisi.
if (ret_boutons == 1) { //Contrôle de validation.
parametres [3] = incremente; //Chargement de la SAISI VALEUR ARRET.
raz(); //Appel de la fonction.
}
break;
case 41: //FENETRE 3.4 => SAISI VALEUR MAXI_T.
// Mise en butée MINI / MAXI de la valeur en cours de saisi.
incremente = constrain(incremente, parametres[5] , parametres[2] - 1); //(5)MINI_MINI Défini par l'utilisateur. (par défaut -20) => (2)MARCHE.
actualiser(2);
//Validation de la saisi.
if (ret_boutons == 1) { //Contrôle de validation.
parametres [4] = incremente; //Chargement de la SAISI VALEUR ARRET.
raz(); //Appel de la fonction.
}
break;
/*Pas utilisé pour une lecture. (maintient de l'ordre des fenetres).
case 35: //FENETRE 3.5 => MESURE MINI_MAXI.
break;//--*/
case 61: //FENETRE 3.6 => RAZ ALARMES.
/*Remis à zéro des valeurs MINI / MAXI enregistrés et des alarmes*/
memo_etat = 0; //Validation d'action.
memo_MAXI_T = parametres[0]; //Valeur actuelle.
memo_MINI_T = parametres[0]; //Valeur actuelle.
raz(); //Appel de la fonction.
break;
}//switch.
//***** RETOUR AU DÉBUT DU MENU. *****//
/*Retour au début possible au niveau de la sélection des paramètres*/
if (fenetre >= 2 && fenetre <= 10) {//Conditionnement d'execution.
if (ret_boutons == 3) {//Appui sur MOINS(-).
fenetre = 0; //Verrouillage de la fenêtre.
ret_boutons = 0; //Validation d'action.
//Serial.print("RETOUR LECTURE :"); Serial.println(fenetre);
}
}
//***** ACTIVATION SYSTEME *****//
//ARRÊT => LED VERT.
if (parametres[0] >= parametres[1]) { ////SIGNALE >= MARCHE.
digitalWrite (VERT, LOW); //Activation de la sortie.
digitalWrite (RELAY, LOW);
etat = 1; //État STOP respectif au tableau.
}
//MARCHE => LED VERT.
if (parametres[0] <= parametres[2]) { //SIGNALE <= ARRÊT.
digitalWrite (VERT, HIGH); //Activation de la sortie.
digitalWrite (RELAY, HIGH);
etat = 2; //État RUN respectif au tableau.
}
//ALARME MAXI => LED ROUGE.
if (parametres[0] >= parametres[3] ) { //SIGNALE >= MAXI.
digitalWrite (ROUGE, HIGH); //Activation de la sortie.
etat = 3; //État ALARME respectif au tableau.
memo_etat = etat; //Mémorisation du dernière état d'alarme.
}
//ALARME MINI => LED ROUGE.
if ( parametres[0] <= parametres[4]) { //SIGNALE <= MINI.
digitalWrite (ROUGE, HIGH); //Activation de la sortie.
etat = 4; //État ALARME respectif au tableau.
memo_etat = etat; //Mémorisation du dernière état d'alarme.
}
}//fin de loop.
![IMG_6858|375x500](upload://rPLPmK5Ec8xGwt22459YdA8bcDm.jpeg)
![IMG_6827|375x500](upload://eOuwufkBi5BdBzxCBpToaOT9mEl.jpeg)
![IMG_6828|375x500](upload://m2ZAgCoJjf376qhywCeJb9UpIq2.jpeg)
![IMG_6829|375x500](upload://3VIcNi9Ub2kfV6DJWJS98idmLCN.jpeg)