iznobe:
pour ceux qui cherchent aussi , voici le code :
#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <DS3231.h>
#define PINRELAIS 2
#define ADRESSE_I2C_RTC 0x68
LiquidCrystal_I2C lcd(0x27, 20, 4);
RF24 radio(9,10);
RF24Network network(radio);
const uint16_t this_node = 000;
struct payload_t
{
byte senderID;
float sens1;
};
float tempref=2;
float tempext;
float tempeau;
DS3231 Clock;
bool Century=false;
bool h12;
bool h24;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits; // Alarm
bool ADy, A12h, Apm; // Alarm
void setup(void)
{
digitalWrite(2, LOW);
Wire.begin();
lcd.begin();
lcd.clear();
lcd.backlight();
lcd.display();
lcd.setCursor(2,0);
lcd.print("Automatique Pool");
lcd.setCursor(0,1);
lcd.print("TExt:");
lcd.setCursor(0,2);
lcd.print("TEau:");
Serial.begin(9600);
Serial.println("RF24 Network Rx-DS18B20");
SPI.begin();
radio.setPALevel(RF24_PA_MAX);
radio.begin();
network.begin(/channel/ 88, /node address/ this_node);
}
void loop(void)
{
{
lcd.setCursor(12,1);
// nom du jour
switch (Clock.getDoW())
{ case 1: lcd.print("Lundi "); break;
case 2: lcd.print("Mardi "); break;
case 3: lcd.print("Mercredi"); break;
case 4: lcd.print("Jeudi "); break;
case 5: lcd.print("Vendredi"); break;
case 6: lcd.print("Samedi "); break;
case 7: lcd.print("Dimanche"); break;
}
// jour
lcd.setCursor(12,2);
if (Clock.getDate() <10){
lcd.print("0");
}
lcd.print(Clock.getDate(), DEC);
lcd.print("/");
lcd.print(Clock.getMonth(Century), DEC);
//lcd.print("/");
// mois
//switch (Clock.getMonth(Century))
//{ case 1: lcd.print("Janvier"); break;
// case 2: lcd.print("Fevrier"); break;
// case 3: lcd.print("Mars"); break;
// case 4: lcd.print("Avril"); break;
// case 5: lcd.print("Mai"); break;
// case 6: lcd.print("Juin"); break;
// case 7: lcd.print("Juillet"); break;
// case 8: lcd.print("Aout"); break;
// case 9: lcd.print("Septembre"); break;
// case 10: lcd.print("Octobre"); break;
// case 11: lcd.print("Novembre"); break;
// case 12: lcd.print("Decembre");
// }
lcd.setCursor(17,2);
lcd.print("/");
lcd.print(Clock.getYear(), DEC);
// Heure
lcd.setCursor(12,3);
if (Clock.getHour(h24,PM) <10){
lcd.print("0");
}
lcd.print(Clock.getHour(h24,PM), DEC);
lcd.print(":");
// Minute
if (Clock.getMinute() <10){
lcd.print("0");
}
lcd.print(Clock.getMinute(), DEC);
lcd.print(":");
// Seconde
if (Clock.getSecond() <10){
lcd.print("0");
}
lcd.print(Clock.getSecond(), DEC);
// Temperature en degré celsius
lcd.setCursor(0,3);
lcd.print("TInt:");
lcd.setCursor(5,3);
lcd.print(Clock.getTemperature(), 1);
}
network.update();
while ( network.available())
{
//lcd.clear();
RF24NetworkHeader header;
payload_t payload;
network.read(header,&payload,sizeof(payload));
Serial.print("Sensor: ");
Serial.print(payload.senderID);
Serial.print(" ");
Serial.print("Temp: ");
Serial.print(payload.sens1,1);
Serial.println(" C");
{
if (payload.senderID==1){
lcd.setCursor(0,1);
lcd.print("TExt:");
lcd.setCursor(5,1);
lcd.print(" ");
lcd.setCursor(5,1);
Serial.println("ext");
lcd.print(payload.sens1,1);
float tempext=payload.sens1;
Serial.println(tempext);
if (tempext < tempref) {
lcd.setCursor(10,1); //on place le curseur de l'écran LCD au début de la 1ère ligne
lcd.print("G");
digitalWrite(2, HIGH);}
else
{
digitalWrite(2, LOW); // le relais est bas si la consigne de temperature n'est pas atteinte
lcd.setCursor(10,1); //on place le curseur de l'écran LCD au début de la 1ère ligne
lcd.print("N");
}
}
else
{
(payload.senderID==2);
lcd.setCursor(0,2);
lcd.print("TEau:");
lcd.setCursor(5,2);
lcd.print(" ");
Serial.println("eau");
lcd.setCursor(5,2);
lcd.print(payload.sens1,1);
float tempeau=payload.sens1;
Serial.println(tempeau);
}
}
}
}
ca n ' a pas l' air tres compliqué a faire .
il faut convertir ( temperatureEau / 2 ) en temps puis l ' ajouter a tempsDuMatin ( 8 H 30 ? )
certainement qu ' une conversion en temps unix simplifiera les choses .
Reflexion faite , ce n' est pas si clair que ca , que veux tu faire exactement ?
obtenir une durée de fonctionnement de la pompe pour chaque jour en fonction de la temperature divisee par 2 ?
je ne vois pas trop l ' interet , si la temperature est de 0 , ca devrait faire quoi ?
si la temperature est de 10 ° , ca devrait faire quoi ?
si la temperature est de **- 10 °** , ca devrait faire quoi ?
L'hiver, le système fonctionnera de 2h00 à 7h00 avec un système antigel (Pas de sujet de 0° à 10°...)
Autrement une fois la piscine en mode d'utilisation normale, le système doit réguler le temps de fonctionnement de la pompe (en général de fin avril à octobre et l'eau est au minimum à 17°)