TimeOn and TimeOff are variables between 00 and 23 ( hour )
TimeOn and TimeOff define a cycle (which lasts 12 hours or 18 hours)
I need to start from timeOn to count 12 hours or 18 hours and to arrive at timeOff. Between timeOn and timeOff I am in cycleOn else i'm in cycleOff.
During this cylcleOn I perform actions.
Here is a copy of the code with my old modulo system. ( see void etatCycle and void setupCycle ) But it doesn't work properly, that's why I wanted to use TimeSpan.
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
BlynkTimer timer;
///////////////////////////////////////////VPIN RECEVEUR///////////////////////////////////////////////
WidgetBridge bridge1(V10); //Temp Som
////////////////////////////////////////////////////////WIDGET///////////////////////////////////////////////////////////////////////////////////
WidgetTerminal terminal(V100);
WidgetLED ledGrow(V20);
WidgetLED ledFlow(V21);
WidgetLED etatCyle(V22);
WidgetLED ledRV1(V23);
WidgetLED ledRV2(V24);
WidgetLED ledLampe(V25);
WidgetRTC rtc;
////////////////////////////////////////////////////////CONSTANTE///////////////////////////////////////////////////////////////////////////////////
int timeOn;
int timeOff;
int cycle;
int Hour = hour();
int cycleOn;
int cycleOff;
int tempSom;
int thermoCycleOn;
int thermoCycleOff;
int relaisV1 = 16; //relaisD0
int relaisV2 = 5; //relaisD1
int relaisLamp = 4; //relaisD2
int hysteresisV2 = 2;
int hysteresisV1 = 1;
////////////////////////////////////////////////////////BLYNK///////////////////////////////////////////////////////////////////////////////////
BLYNK_CONNECTED() {
Blynk.syncAll();
}
BLYNK_WRITE(V1) {
timeOn = param.asInt();
}
BLYNK_WRITE(V2) {
cycle = param.asInt();
}
BLYNK_WRITE(V6) {
thermoCycleOn = param.asFloat();
}
BLYNK_WRITE(V7) {
thermoCycleOff = param.asFloat();
}
BLYNK_WRITE(V10) {
tempSom = param.asInt();
}
char auth[] = "qDBecyJbbi_zoSijVAHK7gy0FX4AH_Bo";
char ssid[] = "BlynkServeur";
char pass[] = "azeqsd123";
////////////////////////////////////////////////////////SETUP///////////////////////////////////////////////////////////////////////////////////
void setup()
{
// Debug console
Serial.begin(9600);
Blynk.begin(auth, ssid, pass, IPAddress(10, 3, 141, 1), 8080);
rtc.begin();
setSyncInterval(500);
pinMode(16, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(16, HIGH);
pinMode(5, HIGH);
pinMode(4, HIGH);
timer.setInterval(1000L, setupCycle);
timer.setInterval(1000L, printTerminal);
timer.setInterval(1000L, etatCycle);
timer.setInterval(1000L, temperatureCycleOn);
timer.setInterval(1000L, temperatureCycleOff);
timer.setInterval(1000L, lampe);
terminal.clear();
terminal.println("Controleur Indoor V1.2");
terminal.println("");
terminal.println("---------------------------");
terminal.flush();
}
void loop() {
Blynk.run();
timer.run();
}
////////////////////////////////////////////////////////DEBUG///////////////////////////////////////////////////////////////////////////////////
void printTerminal() {
int Hour = hour();
Serial.println("---------------------------");
Serial.println("");
Serial.print("Time On : ");
Serial.println(timeOn);
Serial.print("Time Off: ");
Serial.println(timeOff);
Serial.print("Heure actuelle : ");
Serial.println(Hour);
Serial.print("Temperature Sommité : ");
Serial.println(tempSom);
Serial.print("THermostat cycleOff : ");
Serial.println(thermoCycleOff);
Serial.print("THermostat cycleOn : ");
Serial.println(thermoCycleOn);
Serial.println("");
Serial.println("---------------------------");
terminal.print("Time On : ");
terminal.println(timeOn);
terminal.print("Time Off: ");
terminal.println(timeOff);
//terminal.print("Heure actuelle : ");
//terminal.println(Hour);
terminal.println("");
terminal.println("---------------------------");
terminal.println("");
terminal.flush();
}
////////////////////////////////////////////////////////SELECTION CYCLE///////////////////////////////////////////////////////////////////////////////////
void setupCycle() {
int Hour = hour();
if (cycle == HIGH) {
timeOff = (timeOn + 18) % 24;
Blynk.virtualWrite(V20, 255);
Blynk.virtualWrite(V21, 0);
}
if (cycle == LOW) {
timeOff = (timeOn + 12) % 24;
Blynk.virtualWrite(V20, 0);
Blynk.virtualWrite(V21, 255);
}
}
////////////////////////////////////////////////////////ETAT CYCLE///////////////////////////////////////////////////////////////////////////////////
void etatCycle() {
int Hour = hour();
if (Hour >= timeOn && Hour <= timeOff) // pour tester si cycleOn doit passer à 1
{
cycleOn = 1;
cycleOff = 0;
Serial.println("Cycle On");
terminal.println("Cycle On");
Blynk.virtualWrite(V22, 255);
}
if (Hour >= timeOff && Hour <= timeOn) // pour tester si cycleOn doit passer à 0
// necessaire pour arrêter quand Hour = timeOff
// sinon le cycle ne sera pas respecté, un else ne convient pas
{
cycleOff = 1;
cycleOn = 0;
Serial.println("Cycle Off");
terminal.println("Cycle Off");
Blynk.virtualWrite(V22, 0);
}
}
void temperatureCycleOn()
{
if (tempSom >= (thermoCycleOn + hysteresisV1) && cycleOn == 1)
{
digitalWrite(relaisV1, LOW); ///// HIGH = 0
Blynk.virtualWrite(V23, 255);
Serial.println("relais V1 On / Cycle On ");
}
if (tempSom <= (thermoCycleOn - hysteresisV1) && cycleOn == 1)
{
digitalWrite(relaisV1, HIGH); ///// HIGH = 0
Blynk.virtualWrite(V23, 0);
Serial.println("relais V1 Off / Cycle On ");
}
if (tempSom >= (thermoCycleOn + hysteresisV2) && cycleOn == 1)
{
digitalWrite(relaisV2, LOW); ///// HIGH = 0
Blynk.virtualWrite(V24, 255);
Serial.println("relais V2 On / Cycle On ");
}
if (tempSom <= (thermoCycleOn - hysteresisV2) && cycleOn == 1)
{
digitalWrite(relaisV2, HIGH); ///// HIGH = 0
Blynk.virtualWrite(V24, 0);
Serial.println("relais V2 Off / Cycle On ");
}
}
void temperatureCycleOff()
{
if (tempSom >= (thermoCycleOff + hysteresisV1) && cycleOff == 1)
{
digitalWrite(relaisV1, LOW); ///// HIGH = 0
Blynk.virtualWrite(V23, 255);
Serial.println("relais V1 On / Cycle Off ");
}
if (tempSom <= (thermoCycleOff - hysteresisV1) && cycleOff == 1)
{
digitalWrite(relaisV1, HIGH); ///// HIGH = 0
Blynk.virtualWrite(V23, 0);
Serial.println("relais V1 Off / Cycle Off ");
}
if (tempSom >= (thermoCycleOff + hysteresisV2) && cycleOff == 1)
{
digitalWrite(relaisV2, LOW); ///// HIGH = 0
Blynk.virtualWrite(V24, 255);
Serial.println("relais V2 On / Cycle Off ");
}
if (tempSom <= (thermoCycleOff - hysteresisV2) && cycleOff == 1)
{
digitalWrite(relaisV2, HIGH); ///// HIGH = 0
Blynk.virtualWrite(V24, 0);
Serial.println("relais V2 Off / Cycle Off ");
}
}
void lampe()
{
if ( cycleOn == 1 )
{
digitalWrite(relaisLamp, LOW);
Blynk.virtualWrite(V25, 255);
}
else
{
digitalWrite(relaisLamp, HIGH);
Blynk.virtualWrite(V25, 0);
}
}