Bonjour,
Je suis débutant en programmation et j'ai réalisé un programme pour faire un thermostat comportant 2 conditions : la température du local et la différence avec l'extérieur. Des ventilateurs se déclencheront lorsque la température intérieure dépassera un certain seuil (25°C) et que la température extérieure sera inférieure à celle du local (3°C).
Pour l'utilisation finale le délais entre 2 prises de température sera de 5 minutes.
J'ai ajouté une fonction test actionnée avec un bouton qui tourne sur un cycle d'une seconde afin de contrôler le bon fonctionnement lors de la mise en place.
Le programme fonctionne parfaitement sur un ESP32 mais sur un Nano il s'emballe au bout d'environ 45s. Je l'ai testé sur 2 cartes différentes et j'ai le même problème.
Quelqu'un a-t-il une idée ?
Merci
Voici le code :
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS_1 2
#define ONE_WIRE_BUS_2 5
OneWire oneWire_in(ONE_WIRE_BUS_1);
OneWire oneWire_out(ONE_WIRE_BUS_2);
DallasTemperature interieur(&oneWire_in);
DallasTemperature exterieur(&oneWire_out);
const int temp_lim = 25; // Température maximum intérieur
const int ecart = 3; // Ecart mini pour déclenchement
// const int delais_minutes = 1 ; // Délais entre chaque mesure en minutes
// const int delais = delais_minutes * 60 * 1000 ; // Conversion en ms
const int delais = 15000;
const int delais_test = 1000;
const int led = 13;
const int relais = 11;
const int test = A5;
int T0 = 0;
void setup(void) {
Serial.begin(9600);
delay(1500);
Serial.println("----------------------------");
Serial.println("Démarrage");
Serial.println("----------------------------");
interieur.begin();
exterieur.begin();
pinMode(relais, OUTPUT);
// pinMode(14, OUTPUT); // ESP32
// pinMode(15, OUTPUT); // ESP32
pinMode(led, OUTPUT); // NANO
pinMode(test, INPUT_PULLUP);
comp_temp();
}
void loop(void) {
unsigned long T1 = millis();
test_val = analogRead(test);
if (test_val > 800 && T1 - T0 >= delais) { // Fonctionnement normal
Serial.println("Mode normal");
comp_temp();
T0 = T1;
}
if (test_val < 500) { // Mode test
while (test_val < 200) {
Serial.println("Mode test");
comp_temp();
test_val = analogRead(test);
delay(delais_test); // délais test
}
T0 = millis() + delais + 100;
}
}
void comp_temp() {
interieur.requestTemperatures();
exterieur.requestTemperatures();
float T_int = interieur.getTempCByIndex(0);
float T_ext = exterieur.getTempCByIndex(0);
float ecart_calc = T_int - T_ext;
Serial.print("Intérieur: ");
Serial.print(T_int);
Serial.print(" \xC2\xB0");
Serial.println("C");
Serial.print("Extérieur: ");
Serial.print(T_ext);
Serial.print(" \xC2\xB0");
Serial.println("C");
Serial.print("Ecart: ");
Serial.print(ecart_calc);
Serial.print(" \xC2\xB0");
Serial.println("C");
Serial.println("----------------------------");
if (T_int > temp_lim && ecart_calc > ecart) {
// digitalWrite(15, LOW ); // ESP32
// digitalWrite(14, HIGH); // ESP32
digitalWrite(led, HIGH); // NANO
digitalWrite(relais, LOW);
}
else {
// digitalWrite(15, HIGH); // ESP32
// digitalWrite(14, LOW); // ESP32
digitalWrite(led, LOW); // NANO
digitalWrite(relais, HIGH);
}
}