hello
prg testé et fait ce que j'ai compris de ce que tu veux
il faudra remettre tes codes pour le lcd en ligne 4 et 65
une fois le prg téléversé, regarde le moniteur en 115200 bauds
sur le lcd, j'ai également fait afficher la tempo ( sera à virer )
j'ai également fait clignoter un bit de vie qui te permet de savoir si le µ est fonctionnel
#include <OneWire.h> //Librairie du bus OneWire
#include <DallasTemperature.h> //Librairie du capteur
#include <LiquidCrystal_I2C.h>
//LiquidCrystal_I2C lcd(0x3F, 16, 2); //l adresse 0x27 est a changé en fonction de votre écran
LiquidCrystal_I2C lcd(0x27, 16, 2);
OneWire oneWire(10); //Bus One Wire sur la pin 10 de l'arduino
DallasTemperature sensors(&oneWire); //Utilistion du bus Onewire pour les capteurs
DeviceAddress sensorDeviceAddress; //Vérifie la compatibilité des capteurs avec la librairie
unsigned long temp[31] [2] = {
{ 40, 17000},//température et temporisation associée
{ 39, 16500},//température et temporisation associée
{ 38, 16000},//température et temporisation associée
{ 37, 15500},//température et temporisation associée
{ 36, 15000},//température et temporisation associée
{ 35, 13500},//température et temporisation associée
{ 34, 13000},//température et temporisation associée
{ 33, 12500},//température et temporisation associée
{ 32, 12000},//température et temporisation associée
{ 31, 11500},//température et temporisation associée
{ 30, 11000},//température et temporisation associée
{ 29, 10500},//température et temporisation associée
{ 28, 10000},//température et temporisation associée
{ 27, 9500},//température et temporisation associée
{ 26, 9000},//température et temporisation associée
{ 25, 8500},//température et temporisation associée
{ 24, 8000},//température et temporisation associée
{ 23, 7500},//température et temporisation associée
{ 22, 7000},//température et temporisation associée
{ 21, 6500},//température et temporisation associée
{ 20, 6000},//température et temporisation associée
{ 19, 5500},//température et temporisation associée
{ 18, 5000},//température et temporisation associée
{ 17, 4500},//température et temporisation associée
{ 16, 4000},//température et temporisation associée
{ 15, 3500},//température et temporisation associée
{ 14, 3000},//température et temporisation associée
{ 13, 2500},//température et temporisation associée
{ 12, 2000},//température et temporisation associée
{ 11, 1500},//température et temporisation associée
{ 10, 1000} //température et temporisation associée
};
const byte relais = 4; // Pin du relais4 pour temperature entre 16 et 24°C
const byte impulsion = 14;
float temperature = 0.0; // temperature en Celsius
unsigned long tempo_pompe = 0;
unsigned long deb_tempo = 0;
unsigned long deb_impulsion = 0;
unsigned long duree_impulsion = 0;
boolean flag_impulsion = false;
boolean flag_premiere_impulsion = false;
boolean flag_deuxieme_impulsion = false;
boolean flag_tempo_pompe_en_cours = false;
boolean premier_passage = false;
byte bit_vie = 0;
unsigned long tempo_vie = 0;
void setup(void)
{
PORTD |= 0b00010000; //UNO uniquement port D à HIGH.
DDRD |= 0b00010000; //UNO uniquement port D en sortie sauf RX. 1 = sortie
Serial.begin(115200); //Permet la communication en serial
sensors.begin(); //Activation des capteurs
sensors.getAddress(sensorDeviceAddress, 0); //Demande l'adresse du capteur à l'index 0 du bus
sensors.setResolution(sensorDeviceAddress, 12); //Résolutions possibles: 9,10,11,12
lcd.begin(); // initialize the lcd
//lcd.init(); // initialize the lcd
lcd.backlight();
tempo_vie = millis();
Serial.println(F("fin setup"));
}
void loop()
{
vie();
temperature_eau();
if ((analogRead(impulsion) > 650) && (flag_impulsion == false))
{ //1ere impulsion à la mise sous tension
Serial.println(F("1ere impulsion parasite"));
delay(1000); //prise en compte neutralisée pendant 1 seconde
flag_impulsion = true;
}
else //il est l'heure et ce n'est pas la 1ere impulsion
{
if ((analogRead(impulsion) > 650) && (flag_impulsion == true) && (premier_passage == false))
{
Serial.println(F("1ere impulsion validée de la journée "));
premier_passage = true; //1er passage de la journée
deb_tempo = millis(); //armement de la tempo de pompe
init_tempo_pompe(); //init de la durée de la tempo
//impulsion_relais();
}
}
if ((millis() - deb_tempo) < tempo_pompe)
{ lcd.setCursor(0, 1); lcd.print((millis() - deb_tempo));
if (!flag_premiere_impulsion)
{ flag_deuxieme_impulsion = false;
Serial.println(F("1ere impulsion ON par relais telerupteur "));
deb_impulsion = millis(); impulsion_relais(); flag_premiere_impulsion = true;
}
}
else //tempo pompe terminée
{
if ((flag_premiere_impulsion) && (!flag_deuxieme_impulsion))
{ flag_premiere_impulsion = false;
Serial.println(F("deuxieme impulsion OFF par relais telerupteur "));
deb_impulsion = millis(); impulsion_relais(); flag_deuxieme_impulsion = true;
}
flag_tempo_pompe_en_cours = false;
premier_passage = false;
}
}
void init_tempo_pompe()
{
if (flag_tempo_pompe_en_cours == false) //si pas de temporisation en cours
{
for (byte f = 0; f <= 30; f++)
{
if ((int(temperature)) == temp[f][0]) //recherche plage temperature
{
tempo_pompe = temp[f][1]; //init de la durée correspondante
flag_tempo_pompe_en_cours = true; //armement du flag de temporisation en cours
Serial.print(tempo_pompe); Serial.println("\t");
}
if (flag_tempo_pompe_en_cours) {
break;
}
}
}
}
void impulsion_relais()
{
if ((millis() - deb_impulsion) < duree_impulsion)
{
digitalWrite(relais, LOW); //relais activé
}
else
{
digitalWrite(relais, HIGH); //relais désactivé
}
}
void temperature_eau()
{
sensors.requestTemperatures(); //Demande la température aux capteurs
temperature = sensors.getTempCByIndex(0); // lire temperature en Celsius
lcd.setCursor(0, 0);
lcd.print("Temp eau piscine : ");
lcd.setCursor(1, 1);
lcd.setCursor(6, 1);
lcd.print(sensors.getTempCByIndex(0));
lcd.print(" C ");
Serial.print(sensors.getTempCByIndex(0)); Serial.println("\t");
}
void vie()
{
if ((millis() - tempo_vie) > 1000) {
tempo_vie = millis(); bit_vie++;
if (bit_vie % 2) {
lcd.setCursor(15, 1);
lcd.print("*");
} else {
lcd.setCursor(15, 1);
lcd.print("O"); bit_vie = 0;
}
}
}


