RTClib et Timespan

Bonjour a tous !

Je suis en train de faire un code sur ce principe :

  • deux cycle de differente durée : 12 et 18 heure
  • ces deux cycle s'enclenche selon une variable
  • le tout basé sur l'horloge RTC

Ca c'est ok pour moi

La ou je peche c'est sur la verification du cycle. J'ai besoin de verifier que depuis le declenchement du cylcle ce sont bien ecoulé les 12 ou 18 heure pour pouvoir definir si je suis dans un cycle ou pas.

Pour l'instant j'utilise le modulo qui me donne un timeOff depuis un timeON mais quand je verifie if (Hour >= timeOn && Hour <= timeOff) si le timeOff depasse minuit ca ne fonctionne plus.

De ce fait j'aimerais utiliser Timespan de RTClib ( qui me semble compte les heures passée depuis un moment donné ). Mais je ne sais aps du tout comment le mettre en place. Quelqu'un pourrait m'aider ?

( attention c'est un epu le bazard code en cours de construction :wink: )

#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);
WidgetRTC rtc;

////////////////////////////////////////////////////////CONSTANTE///////////////////////////////////////////////////////////////////////////////////

int timeOn;
int timeOff;
int cycle;
int Hour = hour();

int cycleOn;
int cycleOff;

int tempSom;
int ThermoCycleOn;
int ThermoCycleOff;

////////////////////////////////////////////////////////BLYNK///////////////////////////////////////////////////////////////////////////////////

BLYNK_CONNECTED() {
  Blynk.syncAll();
}
BLYNK_WRITE(V1) {
  timeOn = param.asInt();
}
BLYNK_WRITE(V2) {
  cycle = param.asInt();
}
BLYNK_WRITE(V6) {
  ThermoCycleOn = param.asInt();
}
BLYNK_WRITE(V7) {
  ThermoCycleOff = param.asInt();
}
BLYNK_WRITE(V10) {
  tempSom = param.asInt();
}
char auth[] = "9gw7Oh3IFKwiP9ZYNDvYYLV7HbwcV8Se";
char ssid[] = "xx";
char pass[] = "xx";


////////////////////////////////////////////////////////SETUP///////////////////////////////////////////////////////////////////////////////////

void setup()
{
  // Debug console
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass, IPAddress(10, 3, 141, 1), 8080);

  rtc.begin();
  setSyncInterval(500);

  timer.setInterval(1000L, setupCycle);
  timer.setInterval(1000L, printTerminal);
  timer.setInterval(1000L, etatCycle);
  timer.setInterval(1000L, temperature);


  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.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)
  {
     cycleOn = 1; 
     cycleOff = 0; 
    Serial.println("Cycle On");
    terminal.println("Cycle On");
    Blynk.virtualWrite(V22, 255);
  }
  else
  {
    cycleOff = 1;
    cycleOn = 0;
    Serial.println("Cycle Off");
    terminal.println("Cycle Off");
    Blynk.virtualWrite(V22, 0);
  }

}

void temperature()
{
  
}

Peut-être:

(hour >= timeOn && hour <= timeOff) && (hour) && (hour < 24)

&& (hour) = tous des zéros 00h00m00s

&& (hour < 24) si le compteur compte réellement jusqu'à 24, il passe alors à 00, plutôt que de s'arrêter à 23:59:59.99

Haha il aime pas ca

> exit status 1
> invalid operands of types '<unresolved overloaded function type>' and 'int' to binary 'operator>='
> ```

Your other topic on the same subject deleted.

Please do not duplicate your questions as doing so wastes the time and effort of the volunteers trying to help you as they are then answering the same thing in different places.

Repeated duplicate posting could result in a temporary or permanent ban from the forum.

Could you take a few moments to Learn How To Use The Forum

It will help you get the best out of the forum in the future.

  • Your OS and version can be valuable information, please include it along with extra security you are using.

  • Always list the version of the IDE you are using and the board version if applicable.

  • Use quote or add error messages as an attachment NOT a picture.

  • How to insert an image into your post. ( Thanks @sterretje )

  • Add your sketch where applicable but please use CODE TAGS ( </> )

  • Add a SCHEMATIC were needed even if it is hand drawn

  • Add working links to any specific hardware as needed (NOT links to similar items)

  • Remember that the people trying to help cannot see your problem so give as much information as you can

COMMON ISSUES

  • Ensure you have FULLY inserted the USB cables.

  • Check you have a COMMON GROUND where required. ( Thanks @Perry)

  • Where possible use USB 2.0 ports or a USB 2.0 POWERED HUB to rule out USB 3.0 issues.

  • Try other computers where possible.

  • Try other USB leads where possible.

  • You may not have the correct driver installed. CH340/341 or CP2102 or FT232 VCP Drivers - FTDI

  • There may be a problem with the board check or remove your wiring first.

  • Remove any items connected to pins 0 and 1.

COMPUTER RELATED

  • Close any other serial programs before opening the IDE.

  • Ensure you turn off any additional security / antivirus just to test.

  • There may be a problem with the PC try RESTARTING it.

  • You may be selecting the wrong COM port.

  • Avoid cloud/network based installations where possible OR ensure your Network/Cloud software is RUNNING.

  • Clear your browsers CACHE.

  • Close the IDE before using any other serial programs.

  • Preferably install IDE’s as ADMINISTRATOR or your OS equivalent

ARDUINO SPECIFIC BOARDS

  • CH340/341 based clones do not report useful information to the “get board info” button.

  • NANO (Old Types) some require you to use the OLD BOOTLOADER option.

  • NANO (ALL Types) See the specific sections lower in the forum.

  • NANO (NEW Types) Install your board CORE’s.

  • Unless using EXTERNAL PROGRAMMERS please leave the IDE selection at default “AVRISP mkII”.

  • Boards using a MICRO usb connector need a cable that is both DATA and CHARGE. Many are CHARGE ONLY.

CREATE editor install locations.

  • On macOs ~/Applications/ArduinoCreateAgent-1.1/ArduinoCreateAgent.app/Contents/MacOS/config.ini

  • On Linux ~/ArduinoCreateAgent-1.1/config.ini

  • On Windows C:\Users[your user]\AppData\Roaming\ArduinoCreateAgent-1.1

Performing the above actions may help resolve your problem without further help.

Language problem ?

Try a language closer to your native language:

Thanks to all those who helped and added to this list.

	if (timeOff < timeOn)
		timeOff += 24 // hours
	if (Hour >= timeOn && Hour <= timeOff)

...et cetera...

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.