Gestionnaire chauffage d'atelier avec multiples conditions.

Bonjour a tous,

Cela fait un bon moment que j'étais pas passé sur le forum, diverses occupations m'ont éloigné de mon IDE Arduino... bref

J'ai fais un petit projet de contrôle d'aquarium il y a deux ans qui fonctionne toujours a merveille et je remet a la tâche sur un nouveau projet qui consiste a réaliser un gestionnaire de chauffage pour mon atelier.

Projet: J'ai un atelier de 600m² divisé en deux parties, une partie est chauffée mais pas l'autre. Je souhaite avoir en temps réel les températures et humidité de chaque partie.
Et je souhaite contrôlé la chaudière qui chauffe la partie ou je travaille tout cela sous plusieurs condition.

Il faut que la chaudière soit déclenchée "SI" l'heure actuelle se trouve entre 8h et 16h, que le jour se trouve en Lundi et Vendredi compris et que la température descend sous les 13°.
Et il faut que la chaudière se coupe quand la température remonte a 16° (j'ai prévu une hystérèse de 3° pour éviter l'allumage et la coupure répétée de la chaudière du a la température qui oscille autour des 13°.

En dehors des horaires ou des jours de la semaine la chaudière doit être a l'arrêt.

Ensuite je dois inclure un bouton de "marche forcé" si jamais je viens bosser un samedi ou si je reste en dehors de la plage horaire.

Je dispose en matériel de:

Un LCD 20x4 en I2C
Une carte Arduino Uno
Un RTC 3231
Deux capteurs DHT22
Un relais 5vcc 30A 230V

Pour le sketch:

J'ai fais une première ébauche avec mes souvenirs et un bouquin que j'ai acheté pour apprendre.
Je pense qu'il fera rigoler voir pleurer certains d'entre vous mais ce n'est la que fruit des connaissances actuelles d'un amateur.
Merci d'être indulgent.

En l'état actuel voici ce qu'il se passe:

Allumage Arduino a 7H du matin un Lundi a 10°, la chaudière ne s'allume pas. (normal)
A 8h la chaudière s'enclenche (normal)
A 13° elle se coupe... (pas normal)
A 17h elle se coupe même a 10° (normal)
Le Samedi et Dimanche elle ne fonctionne pas... (normal aussi)

Bref en l'état la chaudière se coupe a 13° alors que je voudrais qu'elle monte a 16° avant de se couper.

Sans aucun doute un problème de code dans mes conditions je continue a tester et farfouiller pour trouver la solution de moi même, mais je ne serais pas contre un peu d'aide.

Je sais que mon code est très primitif mais il va être optimisé une fois qu'il fonctionnera correctement.
(je vais basculer la gestion des jours avec un tableau etc...)

Et je dois inclure encore le bouton de marche forcé qui allume la chaudière même si on est en dehors des conditions d'horaire et de jour mais pas de température.

Merci a tout ceux qui porteront un intérêt a ma requête.

Raphael, un amateur curieux.

Voici mon skecth actuel.

#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ds3231.h>

#define DHTZ1PIN 2
#define DHTZ2PIN 8
#define DHTTYPEZ1 DHT22
#define DHTTYPEZ2 DHT22

struct ts t;

DHT dhtz1(DHTZ1PIN, DHTTYPEZ1);
DHT dhtz2(DHTZ2PIN, DHTTYPEZ2);

LiquidCrystal_I2C lcd(0x3F, 20, 4);

void setup()
{
  Wire.begin();
  DS3231_init(DS3231_INTCN);
  dhtz1.begin();
  dhtz2.begin();
  lcd.init(); //INITIALISATION ECRAN
  lcd.backlight(); //INITIALISATION RETROECLAIRAGE
  lcd.clear(); // NETTOYAGE ECRAN AU BOOT
  pinMode(8, INPUT); //ENTREE DHT22 ZONE2
  pinMode(2, INPUT); //ENTREE DHT22 ZONE1
  pinMode(20, INPUT); //ENTREE RTC SDA
  pinMode(21, INPUT); //ENTREE RTC SCL
  pinMode(SDA, OUTPUT); //SORTIE SDA ECRAN I2C
  pinMode(SCL, OUTPUT); //SORTIE SCL ECRAN I2C
  pinMode(22, OUTPUT); //SORTIE LED CHAUFFAGE
  pinMode(24, OUTPUT); //SORTIE RELAIS CHAUFFAGE
}

void loop()
{
  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////////LECTURE TEMPERATURE ET HUMIDITE//////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  float hz1 = dhtz1.readHumidity();
  float tz1 = dhtz1.readTemperature();
  float hz2 = dhtz2.readHumidity();
  float tz2 = dhtz2.readTemperature();

  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////////////////AFFICHAGE TEMPERATURE DE LA ZONE1/////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  {
    lcd.setCursor(0, 2 );
    lcd.print("|Z1|");
    lcd.print(" T:");
    lcd.print(tz1, 1);
    lcd.print((char)223);
    lcd.print(" H:");
    lcd.print(hz1, 1);
    lcd.print("%");

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////AFFICHAGE TEMPERATURE DE LA ZONE2/////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    lcd.setCursor(0, 3);
    lcd.print("|Z2|");
    lcd.print(" T:");
    lcd.print(tz2, 1);
    lcd.print((char)223);
    lcd.print(" H:");
    lcd.print(hz2, 1);
    lcd.print("%");
  }

  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  ///////////////////////////////////////////////////////////////////////////////////////GESTION DATE ET HEURE//////////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  {
    DS3231_get(&t);
    lcd.setCursor (0, 0);
    if (t.wday == 1)
    {
      lcd.print("   LUNDI ");
    }
    else if (t.wday == 2)
    {
      lcd.print("   MARDI ");
    }
    else if (t.wday == 3)
    {
      lcd.print("MERCREDI ");
    }
    else if (t.wday == 4)
    {
      lcd.print("   JEUDI ");
    }
    else if (t.wday == 5)
    {
      lcd.print("VENDREDI ");
    }
    else if (t.wday == 6)
    {
      lcd.print ("  SAMEDI ");
    }
    else if (t.wday == 7)
    {
      lcd.print("DIMANCHE ");
    }
    if (t.mday < 10)
      lcd.print("0");
    lcd.print(t.mday);
    lcd.print (" ");
    if (t.mon == 1)
    {
      lcd.print("JANVIER");
    }
    else if (t.mon == 2)
    {
      lcd.print("FEVRIER");
    }
    else if (t.mon == 3)
    {
      lcd.print("MARS");
    }
    else if (t.mon == 4)
    {
      lcd.print("AVRIL");
    }
    else if (t.mon == 5)
    {
      lcd.print("MAI");
    }
    else if (t.mon == 6)
    {
      lcd.print("JUIN");
    }
    else if (t.mon == 7)
    {
      lcd.print("JUILLET");
    }
    else if (t.mon == 8)
    {
      lcd.print("AOUT");
    }
    else if (t.mon == 9)
    {
      lcd.print("SEPTEMBRE");
    }
    else if (t.mon == 10)
    {
      lcd.print("OCTOBRE");
    }
    else if (t.mon == 11)
    {
      lcd.print("NOVEMBRE");
    }
    else if (t.mon == 12)
    {
      lcd.print("DECEMBRE");
    }
    lcd.setCursor(1, 1);
    if (t.hour < 10)
      lcd.print("0");
    lcd.print(t.hour);
    lcd.print(":");
    if (t.min < 10)
      lcd.print("0");
    lcd.print(t.min);
    lcd.print(" ");
    lcd.print("CHAUDIERE:");
  }

  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////////////GESTION ACTIVATION CHAUDIERE/////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  if ((t.hour >= 8) && (t.hour <= 16) && (t.wday >= 1) && (t.wday <= 5) && (tz1 < 13))
  {
    digitalWrite(22, HIGH);
    digitalWrite(24, HIGH);
    lcd.setCursor(17, 1);
    lcd.print("ON ");
  }
  else
  {
    digitalWrite(22, LOW);
    digitalWrite(24, LOW);
    lcd.setCursor(17, 1);
    lcd.print("OFF");
  }
  delay(1000);
}

salut

j'ai un projet similaire à peu près fonctionnel qui serait facilement adaptable au tien :
https://forum.arduino.cc/index.php?topic=475329.0

Etternell:
Bref en l'état la chaudière se coupe a 13° alors que je voudrais qu'elle monte a 16° avant de se couper.
Sans aucun doute un problème de code dans mes conditions je continue a tester et farfouiller pour trouver la solution de moi même, mais je ne serais pas contre un peu d'aide.

une solution est de sortir ta condition température de la ligne

  if ((t.hour >= 8) && (t.hour <= 16) && (t.wday >= 1) && (t.wday <= 5) && (tz1 < 13))

et faire :
si heure et jour
{
si temp < 13 chauffe on;
si temp > 16 chauffe off;
}
sinon
chauffe off;
fin si

Pour faire quelque chose de simple à mettre en oeuvre et à modifier, je pense qu'il faudrait faire une machine à états. On trouve de tutos de MàE sur Arduino en cherchant un peu sur Internet, et des bibliothèques pour tout écrire simplement. Je pense que ton code pourrait résumer à une machine à 4 ou 5 états, et quelques fonctions pour définir les actions en entrée et sortie des états.
Quelqu'un sur ce forum a fait un tuto, tu le trouveras en cherchant un peu ...

ton code est pas si mal :slight_smile:

Ton seul test sur la température est tz1 < 13
C'est normal que ça coupe dès que tu atteins 13 degrés.

L'organigramme proposé par rnjc38 est très bien

si heure et jour
{
si temp < 13 chauffe on;
si temp > 16 chauffe off;
}
sinon
chauffe off;
fin si

Y'a juste que si tu démarres le système avec 13 < Temp < 16
il ne se passe rien. Mais c'est peut être correct, à toi de voir.

Oui merci RNJC38 ta méthode fonctionne parfaitement.

L'ensemble du code semble bien fonctionné je me penche maintenant sur la réduction de la zone gestion jour et l'intégration du bouton marche forcé.

Pour les jours si j'ai compris mon bouquin je peux utiliser le Switch Case Break mais je suis pas sur de moi.

Merci a tous.

Etternell:
pour les jours si j'ai compris mon bouquin je peux utiliser le Switch Case Break mais je suis pas sur de moi.

Oui c'est ça.
Et pour les mois aussi !

biggil:
Oui c'est ça.
Et pour les mois aussi !

Euuuuh, qu'est-ce que je raconte, moi ?
Il faut utiliser des tableaux !

const char* Jour[7] = { "Lundi, "Mardi", etc };
.../...
lcd.print ( Jour[t.wday-1] ); // -1 car t.wday commence à 1, le tableau commence à 0

J'ai basculé la température de départ a 12, en toute logique, réglé sur 13 ca va démarrer a 14... Enfin 13.9 ce qui raccourci l'hysterese a 2° eu lieu de 3.

Ce soir je m'occupe des tableaux et du bouton. Je vous remercie tous.

Bonjour, voila le code est épuré je suis passé a l'ajout du bouton "marche force"
je me heurt a un petit obstacle un peu bizarre.

voici les bouts de code concernant le bouton.

void setup()
{
  Wire.begin();
  DS3231_init(DS3231_INTCN);
  dhtz1.begin();
  dhtz2.begin();
  lcd.init(); //INITIALISATION ECRAN
  lcd.backlight(); //INITIALISATION RETROECLAIRAGE
  lcd.clear(); // NETTOYAGE ECRAN AU BOOT
  pinMode(8, INPUT); //ENTREE DHT22 ZONE2
  pinMode(2, INPUT); //ENTREE DHT22 ZONE1
  pinMode(20, INPUT); //ENTREE RTC SDA
  pinMode(21, INPUT); //ENTREE RTC SCL
  pinMode(SDA, OUTPUT); //SORTIE SDA ECRAN I2C
  pinMode(SCL, OUTPUT); //SORTIE SCL ECRAN I2C
  pinMode(22, OUTPUT); //SORTIE LED CHAUFFAGE
  pinMode(24, OUTPUT); //SORTIE RELAIS CHAUFFAGE
  pinMode(52, INPUT); //ENTREE INTERRUPTEUR
}

et

 if (digitalRead(52) == HIGH)
  {
    lcd.setCursor(15, 1);
    lcd.print("FORCE");
    digitalWrite(22, HIGH);
  }
  else if ((t.hour >= 8) && (t.hour <= 16) && (t.wday >= 1) && (t.wday <= 5))
  {
    if (tz1 < 13)
    {
      lcd.setCursor(15, 1);
      lcd.print("AUTO ");
    }
    if (tz1 > 16)
    {
      lcd.setCursor(15, 1);
      lcd.print("AUTO ");
    }
  }
  else
  {
    lcd.setCursor(15, 1);
    lcd.print("OFF  ");
  }

En fait si le bouton Marche Force est sur "1" je veux que la chaudière démarre quel que soit les conditions. Par contre si il est sur "0" ca doit retourner aux conditions "normales".

Pour les essai j'ai rajouter une LED et je demande a la carte de m'allumer la LED et m'afficher "FORCE" si le bouton est sur "1". Le problème c'est que même sans un fil connecté a la pin 52. la led et le message apparaisse et disparaisse un peu quand bon leur semble. Comme si une tension été détectée un laps de temps puis ca coupe et ca revient...

Ai-je mal compris la fonction digitalRead ?

Le bouton est câblé avec un 5VCC de la carte d'un coté et l'autre fil sur le pin 52. Manque t'il un composant pour lisser ou effacer le bruit électrostatique ?.

Merci bien

C'est simple : si le bouton est sur marche forcée,
au lieu de lire la tempétature sur le capteur,
tu forces T = 0 degrés. (par exemple)
Rien d'autre à changer !

Etternell:
Le bouton est câblé avec un 5VCC de la carte d'un coté et l'autre fil sur le pin 52. Manque t'il un composant pour lisser ou effacer le bruit électrostatique ?.

oui il manque une résistance de pull-down (10k) entre la pin 52 et le GND
une autre solution est de mettre le bouton entre le GND et la pin 52 et de mettre le pull-up interne et de travailler en inverse (LOW est actif)

En fait si le bouton Marche Force est sur "1" je veux que la chaudière démarre quel que soit les conditions. Par contre si il est sur "0" ca doit retourner aux conditions "normales".

c'est pas ce que tu avais dit dans ton premier post

Et je dois inclure encore le bouton de marche forcé qui allume la chaudière même si on est en dehors des conditions d'horaire et de jour mais pas de température.

dans ce cas il suffit de rajouter une condition dans ta ligne qui serait :
si (heures && jours) || forçage

Excuse moi en effet je veux aussi qu'elle se coupe a 16° en marche forcé.
J'ai rajouté une résistance 10K entre le GND et le PIN52 comme tu ma dis. Plus aucun soucis de ce coté la.

Voici le code fonctionnel. Si vous voyez des choses a optimiser hésitez pas.
Je vais commencer a faire le CI.
Vous auriez une idée du type de boite dans laquelle je peux placer mes DHT22 sans altérer leur rôle?
Genre petite boite plastique perforée ? Je vais check mon catalogue Gotronic.

Merci a tous pour l'aide.

#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ds3231.h>

#define DHTZ1PIN 2
#define DHTZ2PIN 8
#define DHTTYPEZ1 DHT22
#define DHTTYPEZ2 DHT22

struct ts t;

const char* Jour[7] = {"   LUNDI", "   MARDI", "MERCREDI", "   JEUDI", "VENDREDI", "  SAMEDI", "DIMANCHE"};
const char* Mois[12] = {"JANVIER", "FEVRIER", "MARS", "AVRIL", "MAI", "JUIN", "JUILLET", "AOUT", "SEPTEMBRE", "OCTOBRE", "NOVEMBRE", "DECEMBRE"};

DHT dhtz1(DHTZ1PIN, DHTTYPEZ1);
DHT dhtz2(DHTZ2PIN, DHTTYPEZ2);

LiquidCrystal_I2C lcd(0x3F, 20, 4);

void setup()
{
  Wire.begin();
  DS3231_init(DS3231_INTCN);
  dhtz1.begin();
  dhtz2.begin();
  lcd.init(); //INITIALISATION ECRAN
  lcd.backlight(); //INITIALISATION RETROECLAIRAGE
  lcd.clear(); // NETTOYAGE ECRAN AU BOOT
  pinMode(8, INPUT); //ENTREE DHT22 ZONE2
  pinMode(2, INPUT); //ENTREE DHT22 ZONE1
  pinMode(20, INPUT); //ENTREE RTC SDA
  pinMode(21, INPUT); //ENTREE RTC SCL
  pinMode(SDA, OUTPUT); //SORTIE SDA ECRAN I2C
  pinMode(SCL, OUTPUT); //SORTIE SCL ECRAN I2C
  pinMode(22, OUTPUT); //SORTIE LED CHAUFFAGE
  pinMode(24, OUTPUT); //SORTIE RELAIS CHAUFFAGE
  pinMode(52, INPUT); //ENTREE INTERRUPTEUR
}

void loop()
{
  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////////LECTURE TEMPERATURE ET HUMIDITE//////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  float hz1 = dhtz1.readHumidity();
  float tz1 = dhtz1.readTemperature();
  float hz2 = dhtz2.readHumidity();
  float tz2 = dhtz2.readTemperature();

  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////////////////AFFICHAGE TEMPERATURE DE LA ZONE1/////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  {
    lcd.setCursor(0, 2 );
    lcd.print("|Z1|");
    lcd.print(" T:");
    lcd.print(tz1, 1);
    lcd.print((char)223);
    lcd.print(" H:");
    lcd.print(hz1, 1);
    lcd.print("%");

    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////AFFICHAGE TEMPERATURE DE LA ZONE2/////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    lcd.setCursor(0, 3);
    lcd.print("|Z2|");
    lcd.print(" T:");
    lcd.print(tz2, 1);
    lcd.print((char)223);
    lcd.print(" H:");
    lcd.print(hz2, 1);
    lcd.print("%");
  }

  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  ///////////////////////////////////////////////////////////////////////////////////////GESTION DATE ET HEURE//////////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  {
    DS3231_get(&t);

    lcd.setCursor (0, 0);
    lcd.print (Jour[t.wday - 1]);
    lcd.setCursor (9, 0);
    if (t.mday < 10); lcd.print ("0");
    lcd.print (t.mday);
    lcd.setCursor (12, 0);
    lcd.print (Mois[t.mon - 1]);

    lcd.setCursor(0, 1);
    if (t.hour < 10)lcd.print("0");
    lcd.print(t.hour);
    lcd.print(":");
    if (t.min < 10)lcd.print("0");
    lcd.print(t.min);
    lcd.print("   ");
    lcd.print("MODE :");
  }

  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////////////GESTION ACTIVATION CHAUDIERE/////////////////////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  if ((digitalRead(52) == HIGH) && (tz1 < 16))
  {
    lcd.setCursor(15, 1);
    lcd.print("FORCE");
    digitalWrite(22, HIGH);
    digitalWrite(24, HIGH);
  }
  else if ((digitalRead(52) == LOW) && (t.hour >= 8) && (t.hour <= 16) && (t.wday >= 1) && (t.wday <= 5))
  {
    if (tz1 < 13)
    {
      lcd.setCursor(15, 1);
      lcd.print("AUTO ");
      digitalWrite(22, HIGH);
      digitalWrite(24, HIGH);
    }
    if (tz1 > 16)
    {
      lcd.setCursor(15, 1);
      lcd.print("AUTO ");
      digitalWrite(22, LOW);
      digitalWrite(24, LOW);
    }
  }
  else
  {
    lcd.setCursor(15, 1);
    lcd.print("OFF  ");
    digitalWrite(22, LOW);
    digitalWrite(24, LOW);
  }
  delay(1000);
}