Problème relais bas au démarrage

Bonjour à tous.

Après mon problème de touche tactile résolu par LESEPT que je remercie.

Mon petit problème que je n’arrive pas à résoudre se trouve sur les relais, ils ne sont actif que si je clic sur leurs images.

Quand je démarre l’Arduino les relais sont au repos hors il serais souhaitable qu’ils soient en position ON, comme il s’agit d’un prog de gestion de bac récifal, si il y as une coupure de courant, il serais plutôt vitale que le système en redémarrant mettent les relais des pompes and co en position Haute.

En vous remerciant si vous pouviez l’aiguillier.

//*********************************
// PROGRAMME GESTION BAC RECIFAL 
//*********************************

#include <UTFT.h>
#include <RTClib.h>
#include <DS3231.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <URTouch.h>
#include <SPI.h>
#include <SdFat.h>
#include <UTFT_SdRaw.h>
#include <avr/pgmspace.h>

#define ONE_WIRE_BUS 10
#define TEMPERATURE_PRECISION 9 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DS3231  rtc(20, 21);

float tempB;

float Tmax_Bac = 0.0;
float Tmin_Bac = 100.0;

char TmaxBac[20];
char TminBac[20];

UTFT myGLCD(ITDB50, 38, 39, 40, 41);
URTouch  myTouch( 6, 5, 4, 3, 2);
#define SD_CHIP_SELECT  53  // SD chip select pin

// file system object
SdFat SD;
UTFT_SdRaw myFiles(&myGLCD);
File myFile;

//extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
extern uint8_t GroteskBold16x32[6084]; 

int x, y; // Variables for the coordinates where the display has been pressed

// Définition des consignes Ventilation-Eclairage-Chauffage-Ecumeur-Brassage.
const int Pompe1 = 17; // Pompe à eau 1.
const int Pompe2 = 18; // Pompe à eau 2
const int Ecumeur = 19; // Ecumeur
const int Brassage = 16; // Brassage Jebao.
const int relai_ventil = 15; // Ventilateur. 
int cons_temp = 22; // Consigne température pour déclenchement ventilo.
const int Eclairage = 14; // Relais éclairage jour au pin 14.


//boolean etatFonction;
boolean etatPompe1 = false;
boolean etatPompe2 = false;
boolean etatEcumeur = false;
boolean etatBrassage = false;
boolean etatEclairage = false;



// **************************************** horloge
RTC_DS3231 RTC;

int time;
int val_up = 0;
int val_down = 0;
unsigned long last_time1 = 0;


int hour;
int minute;
int second;
int day;
int month;
int year;


// debut programmation


void setup() 
{

  Serial.begin(115200);
  Serial.println(F("Initialising LCD ..."));
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);

  Serial.println(F("Initialising SD card..."));
  bool mysd = 0;
  // see if the card is present and can be initialized:
  while (!mysd)
  {
    if (!SD.begin(SD_CHIP_SELECT, SPI_FULL_SPEED)) {
      Serial.println(F("Card failed, or not present"));
      Serial.println(F("Retrying...."));
    }
    else
    {
      mysd = 1;
      Serial.println(F("Card initialised."));
    }
  }


  myGLCD.setColor(255, 255, 255);
  myGLCD.fillScr(10, 30, 30); 
  myGLCD.setBackColor(10, 30, 30); 
  myGLCD.drawRect(2,2,798,478); 


  Wire.begin();
  RTC.begin();
  //if (! RTC.isrunning()) 
  {
    //Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  sensors.begin();


  // Consignes sortie Relais.
  //etatFonction = 0;
  pinMode (Pompe1,OUTPUT); // Relais Pompe1.
  pinMode (Pompe2,OUTPUT); // Relais Pompe2.
  pinMode (Ecumeur,OUTPUT); // Relais ecumeur.
  pinMode (Brassage,OUTPUT); // Relais brassage.
  pinMode (Eclairage,OUTPUT);// Relais Eclairage.
  pinMode (relai_ventil,OUTPUT); // Relais Ventilateur.

}



void loop() 
{

  if ( millis() >= (last_time1 + 1000)){
    traitement();
  }
}
void traitement()
{
  last_time1 = millis();
  DateTime now = RTC.now();
  val_up = (map (now.minute(), 0, 59, 0, 150));
  val_down = (map (now.minute(), 0, 59, 150, 0));
  time = ((now.hour() * 100) + now.minute());

  myFiles.load(300, 70, 200, 240, "Bocal.RAW");

  // Affichage Heure et Date. 

  myGLCD.setFont(SevenSegNumFont);
  myGLCD.setColor(255,255,255);
  myGLCD.printNumI(now.hour(), 400, 5, 2, '0');
  myGLCD.setFont(GroteskBold16x32);
  myGLCD.print("H", 485, 10);
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.printNumI(now.minute(), 530, 5, 2, '0');
  myGLCD.setFont(GroteskBold16x32);
  myGLCD.print("M", 610, 5);
  //myGLCD.printNumI(now.second(), 280, 30, 2, '0');


  myGLCD.setFont(SevenSegNumFont);
  myGLCD.setColor(255,255,255);
  myGLCD.printNumI(now.day(), 10, 5, 2,'0');
  myGLCD.printNumI(now.month(), 100, 5, 2,'0');
  myGLCD.printNumI(now.year(), 190, 5, 2);

  delay(150);

  // Fin Programme Horloge.

  //***************************************************

  // Recuperation Temperature Sonde Bac et Affichage.

  hour = now.hour();
  minute = now.minute();
  second = now.second();

  sensors.requestTemperatures();
  tempB=(sensors.getTempCByIndex(0));
  Serial.print("tempB :");
  Serial.println(tempB);
  myGLCD.setFont(GroteskBold16x32);
  myGLCD.printNumF(tempB,1, 20, 250);
  myGLCD.setFont(BigFont);
  myGLCD.setColor(255, 255, 0);
  myGLCD.print("C",100 , 250);


  if (now.hour()==00 && now.minute()==00)
  {
    Tmax_Bac=0;
    Tmin_Bac=100;

  }
  if (Tmax_Bac<tempB)  
  {
    Tmax_Bac=tempB;
    sprintf(TmaxBac,"a %uh%u  ",hour,minute); 
  }
  if (tempB<Tmin_Bac)
  {
    Tmin_Bac=tempB;
    sprintf(TminBac,"a %uh%u  ",hour,minute);
  }
  myGLCD.setFont(BigFont);
  myGLCD.setColor(255, 255, 255);
  myGLCD.print("Temp_M:", 50, 450);
  myGLCD.printNumF(Tmax_Bac,1, 160, 450);
  myGLCD.print(TmaxBac, 230, 450);
  myGLCD.print("Temp_m:", 380, 450);
  myGLCD.printNumF(Tmin_Bac,1, 490, 450);
  myGLCD.print(TminBac, 560, 450);


  if (tempB < 22 ) // Si la mesure t est < à 22.
  {
    myFiles.load(175, 215, 25, 100, "thermo_B.RAW");
  }
  if (tempB <= 25 ) // Si la mesure t est entre 22 et 25.
  {
    myFiles.load(175, 215, 25, 100, "thermo_V.RAW");
  }
  if (tempB >= 26 ) // Si la mesure t est > 26.
  {
    myFiles.load(175, 215, 25, 100, "thermo_R.RAW");
  }

  // Ventilation suivant la température du bac : mise en marche/arrêt du Ventilateur.
  myFiles.load(165, 350, 70, 70, "Ventil.RAW");

  if (tempB > (cons_temp + 4)) // Si la mesure t est > ou = à la consigne +1.00 : fonction ventille
  {
    digitalWrite (relai_ventil,HIGH);
  }
  if (tempB < (cons_temp + 3)) // Si la mesure t est < à la consigne -1.00 : arrêt ventille
  {
    digitalWrite (relai_ventil,LOW);
  }

  // *****Affichage ventilation On/Off.

  if (digitalRead(relai_ventil) == HIGH)
  {
    myFiles.load(10, 360, 120, 52, "ON_V.RAW");    
  }
  else
  {  
    myFiles.load(10, 360, 120, 52, "OFF_R.RAW");
  }

  // Fin Programme Température du Bac.

  //***************************************************************************

  // Etat Programme Eclairage On/Off.

  if (myTouch.dataAvailable()) 
  {
    myTouch.read();
    x = myTouch.getX(); // X coordonnée de pression.
    y = myTouch.getY(); // Y coordonnée de pression.
    // Si icone On/Off pressé.
    if ((x >= 170) && (x <= 224) && (y >= 55) && (y <= 109)) 
    {
      etatEclairage = !etatEclairage;
      digitalWrite(Eclairage, etatEclairage); //on met en fonction l'éclairage.
    }
    delay(100);
  }

  // *****Affichage éclairage Jour On/Off. 
  if (digitalRead(Eclairage) == HIGH)
  {
    myFiles.load(170, 55, 54, 54, "Soleil.RAW");
    myFiles.load(10, 60, 120, 52, "ON_V.RAW");    
  }
  else
  {
    myFiles.load(170, 55, 54, 54, "Lune.RAW");
    myFiles.load(10, 60, 120, 52, "OFF_R.RAW"); 
  }

  //**************************************************************************** 


}

Salut,
Dans ton void setup, après les pinMode, tu ajoutes un digitalWrite(pompe, HIGH);

de cette manière à chaque redémarrage, ton relais sera en position haute.

Bonne journée à toi

Aegnor

Aegnor1975 bonjour.

Merci et tres bonne journée à vous.

Pascal.