Menu calibrage de sondes ds18B20 et erreurs

salut as tous mon projets : projet_Gainable Copy - Wokwi ESP32, STM32, Arduino Simulator

je rencontre des soucie de code au niveau de la ligne 771 , l'afficheur ne reagit pas pareil qu'as ligne 723

faite des essais en enlevant les //
qu'en penser vous ???

je cherche aussi as detecter les erreurs de sondes (mal brancher ou defectueuse )

et as afficher a la place de mes temperature lue voir ligne 837 a 842
les differente temperatureLue par les sondes s'affiche les une apres les autre
et je voudrait afficher les temperatures calibrer ligne 70 74
je n'arrive pas a creer une struct en incluant ces temperaturecalibrer pour faire comme celle des vitesses ou des consignes .

et d'arrondir mes sondes au 0,5 voir 0,25 sur l'affichage ou autre merci

j'espere que vous m'avez compris !

la ligne 771 est vide dans le wokwi...

j'ai fais des modifs
793 pardons reaction differentes qu' a la ligne 745 :

au final j'ai reussi a faire une fonction pour les temperature calibrer :

j'ai donc creer c'est variables

// calibrage sondes
float tempExtLueCalibre;
float tempUnitExtLueCalibre;
float tempEchangeurExtLueCalibre;
float tempUnitIntLueCalibre;
float tempEchangeurIntLueCalibre;

puis calculer :

avec :

struct Calibrage {
  const char* nom;
  float calibrage;
};

struct Calibrage calibrages[] = {
  { "calSExt", 0 },
  { "calSUExt", 0 },
  { "calSEExt", 0 },
  { "calSUInt", 0 },
  { "calSEInt", 0 }
};
constexpr size_t nombreDeCalibrages = sizeof calibrages / sizeof * calibrages;
size_t indexCalibrageEnCours = 0;

plus :

Sonde sondes[] = {
  { 2, "T""\xDF""Ext:" },  // pin sonde Exterieur
  { 3, "T""\xDF""UnitExt:" },  // pin sonde Unite Exterieur
  { 4, "T""\xDF""EchaExt:" },  // pin sonde Echangeur Exterieur
  { 5, "T""\xDF""UnitInt:" },  // pin sonde Unite Interieur
  { 6, "T""\xDF""EchaInt:" }   // pin sonde Echangeur Interieur
};
constexpr size_t nombreDeSondes = sizeof sondes / sizeof * sondes;
size_t indexSondeEnCours = 0;

enum : byte { SondeExterieur,
              UniteExterieur,
              EchangeurExterieur,
              UniteInterieur,
              EchangeurInterieur
            };
#define tempExtLue (sondes[SondeExterieur].temperature())
#define tempUnitExtLue (sondes[UniteExterieur].temperature())
#define tempEchangeurExtLue (sondes[EchangeurExterieur].temperature())
#define tempUnitIntLue (sondes[UniteInterieur].temperature())
#define tempEchangeurIntLue (sondes[EchangeurInterieur].temperature())

ce qui :

  tempExtLueCalibre = tempExtLue + calibrages[0].calibrage;
  tempUnitExtLueCalibre = tempUnitExtLue + calibrages[1].calibrage;
  tempEchangeurExtLueCalibre = tempEchangeurExtLue + calibrages[2].calibrage;
  tempUnitIntLueCalibre = tempUnitIntLue + calibrages[3].calibrage;
  tempEchangeurIntLueCalibre = tempEchangeurIntLue + calibrages[4].calibrage;

et creation de la fonction :

void afficheTempsCalibre() {

  if (millis() - tempoAfficheTemps >= 25000) {
    tempoAfficheTemps = millis();
  } else {
    if (millis() - tempoAfficheTemps >= 20000) {
      affiche(sondes[4].nom, tempEchangeurIntLueCalibre, 1);
    } else if (millis() - tempoAfficheTemps >= 15000) {
      affiche(sondes[3].nom, tempUnitIntLueCalibre, 1);
    } else if (millis() - tempoAfficheTemps >= 10000) {
      affiche(sondes[2].nom, tempEchangeurExtLueCalibre, 1);
    } else if (millis() - tempoAfficheTemps >= 5000) {
      affiche(sondes[1].nom, tempUnitExtLueCalibre, 1);
    } else {
      affiche(sondes[0].nom, tempExtLueCalibre, 1);
    }
  }
}

et ces bon pour ca !

voir a la ligne 860 de mon code pour le menu projet_Gainable Copy (2) - Wokwi ESP32, STM32, Arduino Simulator

je m'aperçois qu'il faut que je modifie mon code sur la lecture des sondes .
car ! de lire trop rapidement la temperature exterieur creer des valeurs pas tres stable ,vent, soleil et pluie ... m'affiche des temperature trop changeante .
par contre pour l'unité interieur qui comporte 2 sondes la je peut etre plus rapide a lire les temperature ,car moins de contrainte climatique .
et celles de l'unité exterieure (2 sondes) là ! je me posent des questions ! car il y en as une a l'aspiration ( dehors accrocher sur la grille d'aspiration) et l'autre qui controle la temperature de l'echangeur (a l'abri dans le groupe) !
ci vous avez des idées??

bref , je n'arrive pas a arrondir les relever de temperature de mes sondes !

donc j'ai reussi pour l'arrondi de mes sondes . j'ai ajouté a ma classe sondes :
_temperature = floor(10*_temperature+0.5)/10;

#include "Sonde.h"

Sonde::Sonde(const byte pinNumber, const char* nom, const uint32_t periodeMaJ)
  : _oneWire(pinNumber), _capteur(&_oneWire) {
  this->pinNumber = pinNumber;
  this->nom = nom;
  _periodeMaJ = periodeMaJ;
  _chrono = -periodeMaJ;
  _temperature = -127.0;
}

void Sonde::begin() {
  _capteur.setResolution(12);
  _capteur.setWaitForConversion(false);
  _capteur.begin();
  _capteur.requestTemperatures();
}

float Sonde::temperature() {
  if (millis() - _chrono >= _periodeMaJ) {
    if (_capteur.isConversionComplete()) {
      _temperature = _capteur.getTempCByIndex(0);
      _capteur.requestTemperatures();
      _chrono = millis(); // Mettre à jour le chrono
      _temperature = floor(10*_temperature+0.5)/10;
    }
  }
  return _temperature;
}

les sondes devraient pouvoir donner la valeur brute, peut être avoir 2 fonctions, une pour l'arrondi et une pour la valeur brute - ou simplement demander d'arrondir au moment de l'impression

reste plus qu'a comprendre pourquoi le mode DETAIL_CONSIGNE agit mieux que celui de DETAIL_CALIBRAGE sur l'affichage !
en fait la fonction consigneSondes (ligne 357) fonctionne bien
par rapport a la fonction calibrageSondes (ligne 322).
c'est deux fonction affiche la temperature en temp reel dans le menu (DETAIL_CONSIGNE et DETAIL_CALIBRAGE

en faisant l'arrondie a cette endroit ! ca camouffle le probleme des 2 sondes qui n'affichait pas le meme arrondit ( 2 sondes 15.5 et les 3 autres sondes 15.48)
la elle affiche toute le meme arrondie !

certes on peut planquer les choses sous le tapis :slight_smile:

ca me soule cette histoire de menu ! :hot_face:

j'ai trouver ! mais qu'elle trou du cul que je suis!! j'avais oublier un BREAK a la fin d'un etat

le compilateur ne vous l'a pas signalé avec un warning ?

Non !

Vous avez tous les warnings activés?

Non je pense pas ! Car même sur l’idée d’arduino pas de warning ! Je vais jeter un orteil pour voir ou cela ce configure

bon je me suis apercu aussi au niveau de mon affichage des etats et des sympboles de fonctionnement qu'il y as des caracteres qui reste du menu consigne ou calibre quand je revient automatiquement sur le menu automatique( affichage gainable et affichetempscalibre )je vais me pencher dessu demain ! ligne 1095 a 1236

et si desfoi vous ariez une idee pour evite ce phenomene ! merci

au final je me suis debrouiller ! j'ai juste eviter d'avoir acces au consigne et calibrage pendant le fonctionnement automatique!

resolu

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