Bonjour,
Mon fils m'a offert pour Noël un kit de découverte arduino afin que je m'initie à la programmation. Dans ce domaine je suis novice malgré que je fais de l'électronique depuis presque 40 ans .
Après quelques tentatives infructueuses, je désirais automatiser ma micro-brasserie avec votre aide si cela est possible ne sachant pas trop comment m'y prendre en particuliers au sujet des paliers de températures et de durées .
Je m'explique : je souhaite surveiller une température : quand la température de référence est atteinte, on enclenche un minuterie pendant un certain temps tout en contrôlant celle-ci. Quand la durée est écoulée on passe au second palier de température avec une nouvelle durée et cela au moins sur 4 cycles. Les 4 températures et durées sont différentes et sont stockées dans 8 variables différentes.
Je vous joints une base du code de mon programme très incomplet. Merci d'avance pour votre aide
Merci de bien vouloir détailler votre code s'il vous plait
#include <LiquidCrystal.h> //on définie la librairie LCD
const int btn_ok = 7; // on definie les broches des boutons ok et sel
const int btn_sel = 9;
const int btn_agmt_T = A0; //A0
const int btn_d_agmt_T = A1; //A1
const int btn_agmt_D = A2;
const int btn_d_agmt_D = A3;
const int inputPin = A5;
int x = 1;
int etat_btn_ok = 0; // on definie les états initiaux des boutons
int etat_btn_ok_ge = 0;
int etat_btn_sel = 0;
int etat_btn_agmt_T = 0;
int etat_btn_d_agmt_T = 0;
int etat_btn_agmt_D = 0;
int etat_btn_d_agmt_D = 0;
int selec_Prog = 0;
int Consigne_T = 0;
int Consigne_D = 0;
int VConsigne_T = 0;
int VConsigne_D = 0;
int Temperature_C_P1 = 0;
int Temperature_C_P2 = 0;
int Temperature_C_P3 = 0;
int Temperature_C_P4 = 0;
int Dure_C_P1 = 0;
int Dure_C_P2 = 0;
int Dure_C_P3 = 0;
int Dure_C_P4 = 0;
long previousTempo_1 = 0;
long intervalleTempo_1 = 1000;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // on definie les broches du LCD
void setup()
{
pinMode(btn_ok, INPUT); //les boutons sont des entrées
pinMode(btn_sel, INPUT);
pinMode(btn_agmt_T, INPUT);
pinMode(btn_d_agmt_T, INPUT);
pinMode(btn_d_agmt_D, INPUT);
pinMode(btn_d_agmt_D, INPUT);
pinMode(inputPin, INPUT);
lcd.begin(20, 4); //le LCD est un 20*4
lcd.clear();
Serial.begin(9600);
lcd.setCursor(0, 0);
lcd.print("bergerert");
lcd.blink();
delay (2000);
lcd.noBlink();
}
void loop() {
unsigned long Tempo_1 = millis ();
if (Tempo_1 - previousTempo_1 > intervalleTempo_1) {
previousTempo_1 = Tempo_1;
}
// prise en charge de la variabilité du voltage)
selec_Prog = analogRead(inputPin);
if (selec_Prog < 200 && selec_Prog >= 0) selec_Prog = 1;
else if (selec_Prog < 500 && selec_Prog > 200) selec_Prog = 2; //Premier Pallier
else if (selec_Prog < 700 && selec_Prog > 505) selec_Prog = 3; //
else if (selec_Prog < 800 && selec_Prog > 705) selec_Prog = 4; //
else if (selec_Prog < 1200 && selec_Prog > 810) selec_Prog = 5; //Depart
if (selec_Prog == 1) {
Depart();
/*
je souhaite surveiller une température :
quand la température de référence est atteinte,
on enclenche un minuterie pendant un certain temps tout en contrôlant celle-ci.
Quand la durée est écoulée on passe au second palier de température avec une nouvelle durée et cela au moins sur 4 cycles.
Les 4 températures et durées sont différentes et sont stockées dans 8 variables différentes.
*/
lcd.setCursor(2, 0);
lcd.print("Pallier");// 1 pui 2 pui 3 pui 4
lcd.setCursor(0, 1);
lcd.print("temperature");
lcd.setCursor(0, 2);
lcd.print ((char)223);//Affiche le caractère °(degrés)
lcd.setCursor(13, 1);
lcd.print("duree restent"); //duree - 1mm -1mm -1mm
}
if (selec_Prog == 2) {
PremierPallier();
validation();
Temperature_C_P1 = VConsigne_T;
Dure_C_P1 = VConsigne_D;
D_Agmt_Dure();
D_Agmt_T();
}
if (selec_Prog == 3) {
DeuxiemePallier();
validation();
Temperature_C_P1 = VConsigne_T;
Dure_C_P1 = VConsigne_D;
D_Agmt_Dure();
D_Agmt_T();
}
if (selec_Prog == 4) {
TroisiemePallier();
validation();
Temperature_C_P1 = VConsigne_T;
Dure_C_P1 = VConsigne_D;
D_Agmt_Dure();
D_Agmt_T();
}
if (selec_Prog == 5) {
QuatriemePallier();
validation();
Temperature_C_P1 = VConsigne_T;
Dure_C_P1 = VConsigne_D;
D_Agmt_Dure();
D_Agmt_T();
}
}
void Depart() {
// lcd.clear();
lcd.setCursor(10, 2);
lcd.print("Depart");
delay (200);
lcd.clear();
}
void PremierPallier() {
lcd.setCursor(2, 0);
lcd.print("Premier Pallier");
lcd.setCursor(0, 1);
lcd.print("temperature");
lcd.setCursor(13, 1);
lcd.print("duree");
lcd.setCursor(0, 2);
lcd.print("consi ");
lcd.print(Temperature_C_P1);
lcd.print ((char)223);//Affiche le caractère °(degrés)
lcd.setCursor(13, 2);
lcd.print(Dure_C_P1);
lcd.print("mm");
lcd.setCursor(0, 3);
lcd.print(" rel ");
lcd.print(Consigne_T);
lcd.print ((char)223);//Affiche le caractère °(degrés)
lcd.setCursor(13, 3);
lcd.print(Consigne_D);
lcd.print("mm");
}
void DeuxiemePallier() {
lcd.setCursor(2, 0);
lcd.print("DeuxiemePallier");
lcd.setCursor(0, 1);
lcd.print("temperature");
lcd.setCursor(13, 1);
lcd.print("duree");
lcd.setCursor(0, 2);
lcd.print("consi ");
lcd.print(Temperature_C_P2);
lcd.print ((char)223);//Affiche le caractère °(degrés)
lcd.setCursor(13, 2);
lcd.print(Dure_C_P2);
lcd.print("mm");
lcd.setCursor(0, 3);
lcd.print(" rel ");
lcd.print(Consigne_T);
lcd.print ((char)223);//Affiche le caractère °(degrés)
lcd.setCursor(13, 3);
lcd.print(Consigne_D);
lcd.print("mm");
}
void TroisiemePallier() {
lcd.setCursor(2, 0);
lcd.print("TroisiemePallier");
lcd.setCursor(0, 1);
lcd.print("temperature");
lcd.setCursor(13, 1);
lcd.print("duree");
lcd.setCursor(0, 2);
lcd.print("consi ");
lcd.print(Temperature_C_P3);
lcd.print ((char)223);//Affiche le caractère °(degrés)
lcd.setCursor(13, 2);
lcd.print(Dure_C_P3);
lcd.print("mm");
lcd.setCursor(0, 3);
lcd.print(" rel ");
lcd.print(Consigne_T);
lcd.print ((char)223);//Affiche le caractère °(degrés)
lcd.setCursor(13, 3);
lcd.print(Consigne_D);
lcd.print("mm");
}
void QuatriemePallier() {
lcd.setCursor(2, 0);
lcd.print("QuatriemePallier");
lcd.setCursor(0, 1);
lcd.print("temperature");
lcd.setCursor(13, 1);
lcd.print("duree");
lcd.setCursor(0, 2);
lcd.print("consi ");
lcd.print(Temperature_C_P4);
lcd.print ((char)223);//Affiche le caractère °(degrés)
lcd.setCursor(13, 2);
lcd.print(Dure_C_P4);
lcd.print("mm");
lcd.setCursor(0, 3);
lcd.print(" rel ");
lcd.print(Consigne_T);
lcd.print ((char)223);//Affiche le caractère °(degrés)
lcd.setCursor(13, 3);
lcd.print(Consigne_D);
lcd.print("mm");
}
void validation()
{
etat_btn_ok = digitalRead(btn_ok); //on lit l'état du bouton ok
if (etat_btn_ok == HIGH)
{
VConsigne_D = Consigne_D;
VConsigne_T = Consigne_T;
}
}
void D_Agmt_T()
{
etat_btn_agmt_T = digitalRead(btn_agmt_T); //on lit l'état du bouton sel
if (etat_btn_agmt_T == HIGH) {
// et on affiche son état
Consigne_T++; //on incremente le comptage
delay (200);
}
etat_btn_d_agmt_T = digitalRead(btn_d_agmt_T); //on lit l'état du bouton sel
if (etat_btn_d_agmt_T == HIGH) {
// et on affiche son état
Consigne_T--;
delay (200);
if (Consigne_T == 9) {
lcd.setCursor(9, 2);
lcd.print(" ");
lcd.setCursor(7, 3);
lcd.print(" ");
}
if (Consigne_T <= 0) {
Consigne_T = 0;
}
}
}
void D_Agmt_Dure()
{
etat_btn_agmt_D = digitalRead(btn_agmt_D); //on lit l'état du bouton sel
if (etat_btn_agmt_D == HIGH) {
// et on affiche son état
Consigne_D++; //on incremente le comptage
delay (200);
}
etat_btn_d_agmt_D = digitalRead(btn_d_agmt_D); //on lit l'état du bouton sel
if (etat_btn_d_agmt_D == HIGH) {
// et on affiche son état
Consigne_D--;
delay (200);
if (Consigne_D <= 9) {
lcd.setCursor(15, 2);
lcd.print(" ");
lcd.setCursor(15, 3);
lcd.print(" ");
}
if (Consigne_D <= 0) {
Consigne_D = 0;
}
}
}