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
}
}
}
}