Modification du délai de rafraîchissement pour 2 sonde ds18d20

Bonjour je suis nouveau et je voudrais essayer de modifié un programme pour rafraîchir la lecture de température de 2 sonde de température.

Merci d’avance pour l’aide que vous m’apporterait.


//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Fonctions $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
/* recuperation temperature des ds18b20 */
void temperature() {
  const uint8_t limiteTemperatureMinimum = 10; // temperature minimum, on en deduit que la sonde n'est pas presente // plus d'alerte en dessous de cette temperature
  const uint8_t limiteTemperatureMaximum = 85; // temperature maximum, on en deduit que la sonde n'est pas presente // plus d'alerte en dessous de cette temperature
  float stockMesure;
  // temperature Rampe
  stockMesure = sensors.getTempCByIndex(sauvegarde.adresseSondeRampe); // affecte la temperature recu a la variable
  DPRINTF("temp rampe : "); DPRINT(stockMesure); DPRINTLN();
  if (stockMesure <= limiteTemperatureMinimum || stockMesure >= limiteTemperatureMaximum) { // si relevé hors limite
    compteurErreurTempRampe++; // on incremente le compteur
    if (compteurErreurTempRampe >= compteurErreurMax) { // si le compteur est egal ou supperieur au nombre max d'erreur
      variable.temperatureRampe = zero; // = zero car trop de mesure erroné
    }
  }
  else if ((variable.temperatureRampe + 1 > stockMesure) && (variable.temperatureRampe - 1 < stockMesure)) {
    variable.temperatureRampe = stockMesure; // affecte la mesure
    compteurErreurTempRampe = zero; // met compteur d'erreur a zero
  }
  else {
    compteurErreurTempRampe++; // on incremente le compteur
    if (compteurErreurTempRampe >= compteurErreurMax) { // si le compteur est egal ou supperieur au nombre max d'erreur
      variable.temperatureRampe = stockMesure; // affecte la mesure
      compteurErreurTempRampe = zero; // met compteur d'erreur a zero
    }
  }
  // temperature Bac
  stockMesure = sensors.getTempCByIndex(sauvegarde.adresseSondeBac); // affecte la mesure
  DPRINTF("mesuré temp bac : "); DPRINT(stockMesure); DPRINTLN(); // debug
  if (stockMesure <= limiteTemperatureMinimum || stockMesure >= limiteTemperatureMaximum) { // si la mesure est hors limite
    compteurErreurTempBac++; // incremente le compteur d'erreur
    DPRINTF("mesure T hors limite : "); DPRINT(stockMesure); DPRINTLN(); // debug
    if (compteurErreurTempBac >= compteurErreurMax) { // si nombre d'erreur MAX atteind
      variable.temperatureBac = zero; // = zero car trop de mesure erroné
      DPRINTF("T en erreur : "); DPRINT(stockMesure); DPRINTLN(); // debug
    }
  }
  else if ((variable.temperatureBac + 1 > stockMesure) && (variable.temperatureBac - 1 < stockMesure)) {
    variable.temperatureBac = stockMesure; // affecte la mesure
    DPRINTF("ok temp bac : "); DPRINT(stockMesure); DPRINTLN(); // debug
    compteurErreurTempBac = zero; // met compteur d'erreur a zero
  }
  else {
    compteurErreurTempBac++; // incremente le compteur d'erreur
    DPRINTF("mesure temp bac sup ou inf de 1°/mesur eprecedente : "); DPRINT(stockMesure); DPRINTLN(); // debug
    if (compteurErreurTempBac >= compteurErreurMax) { // si nombre d'erreur MAX atteind
      variable.temperatureBac = stockMesure; // affecte la mesure
      compteurErreurTempBac = zero; // met compteur d'erreur a zero
      DPRINTF("T en erreur : "); DPRINT(stockMesure); DPRINTLN(); // debug
    }
  }
  ventilation(); // lance la fonction
  sensors.requestTemperatures(); // on lance une demande aux sondes pour prochain relevé de temperature
}

/* declanchement des ventilateurs si besoin */
void ventilation() {
  const float temperatureDeFlotement = 0.2;// fourchette de temperature haute et basse ou il ne se passe rien // evite les ON/OFF lorsque la mesure est a cheval avec la valeur de declenchement
  // ventilation bac
  if (variable.temperatureBac >= sauvegarde.ventilationaquarium) { // si temperaure est superieur a la consigne
    digitalWrite(pinOutRelaisVentilateurBac, HIGH); // relais fermé = ventilation ON
    digitalWrite(pinOutRelaisChauffage, HIGH); // relais fermé = chauffage OFF // par securité car doit deja etre OFF
    if (etatVentilationBac == false) {
      etatVentilationBac = true; // icone ventilation
      DPRINTF("  ON ventilo bac : "); DPRINT(variable.temperatureBac); DPRINTLN();
    }
  }
  else if (((float)variable.temperatureBac + temperatureDeFlotement) >= sauvegarde.ventilationaquarium) { // temperature de flotement ou on ne fait rien
    DPRINTF("flottement ventilo bac : "); DPRINT(variable.temperatureBac); DPRINTLN();
  }
  else { // si temperature inferieur a la consigne
    digitalWrite(pinOutRelaisVentilateurBac, LOW); // relais ouvert = ventilateur OFF
    digitalWrite(pinOutRelaisChauffage, LOW); // relais ouvert = chauffage ON (temperature géré par thermostat independant de l'arduino)
    if (etatVentilationBac) {
      etatVentilationBac = false; // icone ventilation
      DPRINTF("OFF ventilo bac : "); DPRINT(variable.temperatureBac); DPRINTLN();
    }
  }
  // ventilation rampe
  if (variable.temperatureRampe >= sauvegarde.ventilationrampe) { // si temperature superieur a la consigne
    digitalWrite(pinOutRelaisVentilateurRampe, HIGH); // relais fermé = ventilation ON
    if (etatVentilationRampe == false) {
      etatVentilationRampe = true; // icone ventilation
      DPRINTF("ON ventilo rampe : "); DPRINT(variable.temperatureRampe); DPRINTLN();
    }
  }
  else if (variable.temperatureRampe + temperatureDeFlotement >= (sauvegarde.ventilationrampe)) { // temperature de flotement ou on ne fait rien
    DPRINTF("flottement ventilo rampe : "); DPRINT(variable.temperatureRampe); DPRINTLN();
  }
  else { // si temperature inferieur a la consigne
    digitalWrite(pinOutRelaisVentilateurRampe, LOW); // relais ouvert = ventilateur OFF
    if (etatVentilationRampe) {
      etatVentilationRampe = false; // icone ventilation
      DPRINTF("OFF ventilo rampe : "); DPRINT(variable.temperatureRampe); DPRINTLN();
    }
  }
}

/* affiche sur l'ecran et envoie SMS si temperature hors consigne */
void messageAlerteTemperature() {
  const uint8_t limiteTemperatureMinimum = 10; // temperature minimum, on en deduit que la sonde n'est pas presente // plus d'alerte en dessous de cette temperature
  const uint8_t limiteTemperatureMaximum = 85; // temperature maximum, on en deduit que la sonde n'est pas presente // plus d'alerte en dessous de cette temperature
  const float temperatureDeFlotement = 0.2;// fourchette de temperature haute et basse ou il ne se passe rien // evite les ON/OFF lorsque la mesure est a cheval avec la valeur de declenchement
  if (variable.temperatureBac > limiteTemperatureMinimum) {
    if (variable.temperatureBac >= sauvegarde.alertetemperaturehaute) { // si la temperature du bac est egal ou depasse la temperature d'alerte
      if (alerteTemperature) { // pour ne pas avoir de message a repetition
        completerMessageAlerteTemperature(texteNextionAlerte); // prepare texte du SMS a envoyer
        alarme(); // lance la fonction
        DPRINTF("alarme temp haut "); DPRINTLN() // debug
      }
    }
    else if (variable.temperatureBac <= sauvegarde.alertetemperaturebasse) { // si la temperature du bac est egal ou depasse la temperature d'alerte
      if (alerteTemperature ) { // pour ne pas avoir de message a repetition
        completerMessageAlerteTemperature(texteNextionAlerte); // prepare texte du SMS a envoyer
        alarme(); // lance la fonction
        DPRINTF("alarme temp bas "); DPRINTLN() // debug
      }
    }
    else if (((variable.temperatureBac + temperatureDeFlotement) <= sauvegarde.alertetemperaturehaute) && ((variable.temperatureBac - temperatureDeFlotement) >= sauvegarde.alertetemperaturebasse )) {
      if (alerteTemperature == false) { // pour ne pas avoir de message a repetition
        completerMessageAlerteTemperature(texteNextionFinAlerte); // prepare texte du SMS a envoyer
        alarmeOnOff = true; // remet l'alarme sonore On
        DPRINTF("alarme temp ok "); DPRINTLN() // debug
      }
    }
  }
}

Pour avoir une chnace d'avoir des réponses, le mieux est de commencer par lire Les bonnes pratiques du Forum Francophone
Perso, je ne sais pas lire un programme dans lequel il y a un alignement parfait de:

J’ai modifié dite moi si cela et bon.

Au moins le code est lisible.

Pour avoir des réponses, il faut penser que si celui qui lit n'a pas tous les éléments, il passe son chemin. Plus la demande est précise et complète, plus il y a de chances d'avoir des réponses.

Ce que je vois:

  • le programme n'est pas complet, sensors n'est pas défini, il n'y a pas setup() et loop()
  • on ne sait pas ce qu'est censé faire ce programme
  • on ne sait pas quelle modification il faut faire
  • on n'a pas d'idée sur le matériel utilisé
1 Like

Bonsoir

Je ne sais pas comment je peux vous transférer le programme en entier met il et rechargeable sur GitHub - djbouns/AQUABOUNS-V2.0: Aquabouns, l'automate pour aquarium récifal entierement GRATUIT
Si la modification que je demande et trop complexe à faire ne vous cassez pas les dents dessus je ferai sans.

Merci d’avance.

Christophe.

L’auteur @djbouns a un compte ici. Vous pouvez essayer de lui envoyer un MP ou alors dans le loooooog fil de discussion sur l’Aquabouns

Je les déjà contacter malheureusement pour moi il ne veux pas faire de personnalisation pour chaque personne utilisant le programme du coup j’ai essayé par moi même de trouver quel élément ou variable a ajouté pour faire se dont je veux faire met je suis encore novice dans la programmation.

Christophe.

Ça paraît naturel … il a déjà bien assez à faire pour maintenir et développer une version !

En quoi le délai de rafraîchissement est un souci ?

1 Like

Bonjour a tous,
Content de voir que l’on parle de l’aquabouns sans que j’en sois l’auteur :relaxed:

C’est la question que je me pose...
Les mesures sont prises ~1 min et Je n’ai jamais vu un aquarium avoir des variations de température significatives dans ce laps de temps.

C’est le deuxième « utilisateur » ( je mets entre guillemets car l’aquabouns n’est pas encore sur l’aquarium) qui veut faire des modifs sur la température car une fois la sonde dans leur main, lors de leur test après montage, la température ne change pas instantanément sur l’écran.

Si il y a une quelconque raison valable a faire cette modif, bien sûr je la généraliserais, mais dans le cas contraire, il me semble inutile d’utiliser des ressources pour rien.

Bonjour

Ben soit y a un problème dans mon montage ou dans le programme que j’ai télé versé car moi quand je fait des test sa dépasse les 2 voir 3 minute. Je voulais juste le mettre réellement à 1 minute je vais essayer de vous donner le temps exact si j’ai le temps aujourd’hui.

refreshSwitch valant 1000 millis, le temps exact de roulement est de 45 sec :

void loopDesFonctions() {
  if (millis() - roulementPrecedent1 > refreshSwitch) { // si compteur ateind
    roulementPrecedent1 = millis(); // reinitialise le compteur
    roulement1++;
    rafraichirHeureSiSurMenu(); // rafraichi l'heure
    flotteurs();
    oscillateur();
    coupureEdf();
    if (pageActuelNextion == orph) {
      etalonnageEnCours();
    }
    if (progressionPuissanceBrassage) {
      progressionPuissanceBrassage = false;
      Brassage();
      rafraichirBrassage1Nextion();
      rafraichirBrassage2Nextion();
      rafraichirBrassage3Nextion();
    }
    if (roulement1 == 3) { // quand compteur ateint
      roulement1 = 0;
      if (pageActuelNextion != orph) {
        salinite();
      }
      switch (roulement2) {
        case 1:
          eclairage();
          break;
        case 2:
          rafraichirEclairageBlancNextion();
          break;
        case 3:
          rafraichirEclairageBleuNextion();
          break;
        case 4:
          if (pageActuelNextion != orph) {
            ph();
          }
          break;
        case 5:
          if (pageActuelNextion != orph) {
            alertePhBac();
          }
          break;
        case 6:
          if (pageActuelNextion != orph) {
            redox();
          }
          break;
        case 7:
          if (pageActuelNextion != orph) {
            rafraichirSaliniteNextion();
          }
          break;
        case 8:
          temperature();
          break;
        case 9:
          rafraichirTemperatureBacNextion();
          break;
        case 10:
          rafraichirTemperatureRampeNextion();
          break;
        case 11:
          Brassage();
          break;
        case 12:
          rafraichirBrassage1Nextion();
          break;
        case 13:
          rafraichirBrassage2Nextion();
          break;
        case 14:
          rafraichirBrassage3Nextion();
          break;
        case 15:
          etatGSM();
          etatWifi();
          coupureBatterie();
          roulement2 = 0;
          break;
      }
      roulement2++;
    }
  }
}

Bizarre que cela prend plus de temps sur mon montage

Oui, cherche du côté Hardware

J’ai effectué un relevé pour le temp les 2 sonde se rafraichit toute les 5 minute

Ajouter a ton problème d’écran que tu m’as montré su FB, revois l’intégralité de ton montage car il y a de gros problème

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.