Crée des paliers

Salut, je galère un peu dans la logique a employer pour mon projet...
A terme l'idée c'est de crée et de contrôler des paliers de température (résistance chauffante commandé par un relais), par exemple :

  • monter a une température de 25°C

  • Maintenir cette température 15mn

  • montre la température a 30°C
    -Maintenir cette température 10mn

  • fin de programme

j'ai tenté un sketch avec la fonction If mais c'est pas très concluant ... Pour les tests à la place d'un relais j'utilise des LED...

#include <Stepper.h>

#include <LiquidCrystal_I2C.h>
#include <Wire.h> 


#include <math.h>
#define PIN_NTC 0
int ledverte = 12; //température de consigne ok resistance mode off
int ledjaune = 2;
int ledrouge = 3; //température de consigne non atteinte
int ON = LOW;
int OFF = HIGH;
int tempsDerniereExecution;
LiquidCrystal_I2C lcd(0x27,16,2);
double Rref = 10000.0; //Résistance de référence à 25°C
double V_IN = 5.0; //Alimentation électrique
int tempsActuel;
int tempsActuel1;
int tempsActuel2;
int tempsdecycle;
int tempsdecycle2;
int tempsdecycle3;
int temperatureconsigne;
int temperatureconsigne2;
//Information de la thermistance
double A_1 = 3.354016E-3;
double B_1 = 2.569850E-4;
double C_1 = 2.620131E-6;
double D_1 = 6.383091E-8;

double SteinhartHart(double R)
{
  //Division de l'équation en 4 parties. La premiere est 
  //uniquement A1
  double equationB1 = B_1 * log(R/Rref);
  double equationC1 = C_1 * pow(log(R/Rref), 2);
  double equationD1 = D_1 * pow(log(R/Rref), 3);
  double equation = A_1 + equationB1 + equationC1 + equationD1;
  return pow(equation, -1);
  
}

void setup() {
  Serial.begin(9600);
  lcd.init();
  pinMode(ledverte, OUTPUT);
  pinMode(ledjaune, OUTPUT);
  pinMode(ledrouge, OUTPUT);
  lcd.backlight();
  tempsActuel = 0;
  tempsActuel1 =0;
  tempsActuel2 =0;
  tempsdecycle=90000;
  tempsdecycle2=60000;

  
  temperatureconsigne=25;
  temperatureconsigne2=30;
  tempsDerniereExecution = 0;
}

void loop() {
  //Calcul de la tension sur la borne analogique
  double valeurAnalog = analogRead(PIN_NTC);
  double V =  valeurAnalog / 1024 * V_IN;

  //Calcul de la résistance de la thermistance
  double Rth = (Rref * V ) / (V_IN - V);
  
  

  //Calcul de la température en kelvin( Steinhart and Hart)
  double kelvin = SteinhartHart(Rth);
  double celsius = kelvin - 273.15; //Conversion en celsius
  lcd.setCursor(0, 0);
  lcd.print("T Cuve  :");
  lcd.setCursor(10, 0);
  lcd.print(celsius);
  lcd.setCursor(14, 0);
  lcd.print(char(223));
  lcd.print("C");
  {delay (500);}
  lcd.setCursor(0, 1);
  lcd.print("T Palier:");
  lcd.setCursor(10, 1);
  lcd.print(temperatureconsigne);
  lcd.print(char(223));
  lcd.print("C");
{
tempsActuel = millis();	
digitalWrite(ledverte, OFF);  // Température consigne non ok  
digitalWrite(ledjaune, OFF);
digitalWrite(ledrouge, ON);

if  (celsius>=temperatureconsigne)
{
  tempsActuel1 = millis();
  digitalWrite(ledverte, ON);  // Température consigne OK  
  digitalWrite(ledjaune, OFF);
  digitalWrite(ledrouge, OFF);
  
    if  (tempsActuel1>=tempsdecycle)
    {
    digitalWrite(ledverte, OFF);  // Température consigne non OK  
    digitalWrite(ledjaune, ON);
    digitalWrite(ledrouge, ON);
    
     
      if  (celsius>temperatureconsigne2) 
      {
       tempsActuel2=millis();
       digitalWrite(ledverte, ON);  // Température consigne OK  
       digitalWrite(ledjaune, ON);
       digitalWrite(ledrouge, OFF);  
       
       if  (tempsActuel2>=tempsdecycle2)
       {
             digitalWrite(ledverte, OFF);  // Température consigne OK  
             digitalWrite(ledjaune, ON);
             digitalWrite(ledrouge, OFF); 
             
              
       }
    }    
   }
}
}
}

Bonjour,
Je ne suis qu'un débutant mais je vois 2 choses :

  1. Apparemment il y a des accolades en trop (ligne 90 et ligne 129)

  2. tu fais des tests if ... en cascade.
    Si vrai = exécuter la suite mais si faux ? ?
    Revoir l'utilisation de IF (test) { si vrai } ELSE { si faux }

Je ne suis pas assez rapide pour programmer à ta place mais le problème semble simple.
Ne pas vouloir aller trop vite. commencer par des exercices simples.

Bon courage.
Géryko

PS:
Pour les débutants qui n'ont pas eu le temps de lire la charte.

Lorsque votre sujet a trouvé une solution, pensez à avertir les bénévoles qui ont tenté de vous aider.
Ne serait-ce que par politesse, respect et encouragement.
Un peu d'éducation et de savoir vivre, c'est tout. Et l'état d'esprit de ce forum n'en sera que meilleur.
D'autres personnes concernées peuvent attendre la solution.
En principe 80% des sujets devraient être marqués [résolu] (Pour ce faire, reprendre votre 1er post et modifier le titre)

Géryko