Bonjour à tous,
tu fais simplement now = RTC.now(); avant le if (now.hour() ...
j'ai testé mais même problème, pas de click donc pas de réactualisation de l'heure.
j'ai également refait ma fonction Actu_heurs() avec now = RTC.now(); que j'appelé depuis ma machine à état... même problème.
Ce Simpleclick me désespère !!!
Je reposte mon code complet au cas ou!
#include <OneButton.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // Déclaration type ecran
RTC_DS1307 RTC;
const byte buttonPin = 3; // notre bouton poussoir sur pin 4
OneButton button(buttonPin, true); // true pour le mettre en INPUT_PULLUP
const byte pompe=4; // relais sur la pin 4 de l'arduino
const int ledPompeM=5; // Led Clignotement Pompe marche sur pin 5
const byte ledMarche=6; // Led Marche Système sur pin 6
int ledState = LOW;
// initialistaion millis pour clignotement LED
unsigned long previousMillis = 0;
const long interval = 1000;
// Fonction Pompe ON Forcé -----------------------------------------------------------------------
void PompeON_Force()
{
digitalWrite (pompe, HIGH); // Pompe ON
lcd.setCursor(0, 1);
lcd.print("---- MODE FORCE ---");
lcd.setCursor(0, 2);
lcd.print(" POMPE ON ");
}
// Fonction Pompe OFF Forcé ----------------------------------------------------------------------
void PompeOFF_Force()
{
digitalWrite (pompe, LOW); // Pompe ON
lcd.setCursor(0, 1);
lcd.print("---- MODE FORCE ---");
lcd.setCursor(0, 2);
lcd.print(" POMPE OFF ");
}
// Fonction Pompe OFF ----------------------------------------------------------------------
void PompeOFF()
{
digitalWrite (pompe, LOW); // Pompe OFF
lcd.setCursor(0,1);
lcd.print("---- MODE AUTO: ----");
lcd.setCursor(10,2);
lcd.print(" POMPE OFF");
}
// Fonction Pompe OFF ----------------------------------------------------------------------
void PompeON()
{
digitalWrite (pompe, HIGH); // Pompe ON
lcd.setCursor(0,1);
lcd.print("---- MODE AUTO: ----");
}
// Fonction Cligotement LED ----------------------------------------------------------------------
void Cligno_LED()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ledState == LOW) {
ledState = HIGH;
lcd.setCursor(10,2);
lcd.print(" POMPE ON ");
} else {
ledState = LOW;
lcd.setCursor(11,2);
lcd.print(" ");
}
digitalWrite(ledPompeM, ledState);
}
}
// Fonction LED OFF----------------------------------------------------------------------
void LED_OFF()
{
digitalWrite (ledPompeM, LOW);
}
// Fonction Acttualisation de l'heure----------------------------------------------------
//void Actu_heure(){
// DateTime now = RTC.now();
//}
// Machine à états-----------------------------------------------------------------------
enum {programme, pompe_ON, pompe_OFF} etatCourant; // la liste des états possible de notre système
void simpleclick(){
DateTime now = RTC.now();
switch (etatCourant) {
case programme:
Serial.println("mode programme");
now = RTC.now();
if(now.hour() == 9 && now.minute() <= 30) {
PompeON();
Cligno_LED();
lcd.setCursor(0,2);
lcd.print(" 9h->9h30 ");
}
if(now.hour() == 9 && now.minute() > 30) {
PompeOFF();
LED_OFF();
lcd.setCursor(0,2);
lcd.print("9h30->10h ");
}
if(now.hour() == 10 && now.minute() <= 30) {
PompeON();
Cligno_LED();
lcd.setCursor(0,2);
lcd.print("10h->10h30");
}
...
}
if(now.hour() == 17 || now.hour() == 18 || now.hour() == 19 || now.hour() == 20) {
PompeON();
Cligno_LED();
lcd.setCursor(0,2);
lcd.print(" 17h->21h ");
}
if(now.hour() == 21 || now.hour() == 22 || now.hour() == 23 || now.hour() == 00 || now.hour() == 1 || now.hour() == 2 || now.hour() == 3 || now.hour() == 4 || now.hour() == 5 || now.hour() == 6 || now.hour() == 7 || now.hour() == 8) {
PompeOFF();
LED_OFF();
lcd.setCursor(0,2);
lcd.print(" 21h->9h ");
}
etatCourant = pompe_ON;
break;
case pompe_ON:
Serial.println("pompe ON Forcé");
PompeON_Force();
etatCourant = pompe_OFF;
break;
case pompe_OFF:
Serial.println("pompe OFF Forcé");
PompeOFF_Force();
etatCourant = programme;
break;
}
}
void setup(){
pinMode(pompe, OUTPUT);
pinMode(ledPompeM, OUTPUT);
pinMode(ledMarche, OUTPUT);
digitalWrite (pompe, LOW);
digitalWrite (ledMarche, HIGH);
Serial.begin(57600);
Wire.begin();
RTC.begin();
button.attachClick(simpleclick); // On attache la fonction simpleClick() comme callBack
simpleclick();
etatCourant = programme;
//RTC.adjust(DateTime(__DATE__, __TIME__));
//Initialisation du LCD---------------------------------------------
lcd.init();
lcd.cursor_on();
lcd.blink_on();
lcd.backlight();
lcd.setCursor(0, 0);
}
void loop(){
//Affichage de l'heure
DateTime now = RTC.now();
button.tick();
//Actu_heure();
//Cligno_LED();
//if (etatCourant = programme) {
// Cligno_LED();
//}
// else {
// }
// Cligno_LED();
//Affichage HEURE ------------------------------------------------------
lcd.setCursor(12, 0);
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) {
lcd.print("0");
}
lcd.print(now.minute());
lcd.print(":");
if (now.second() < 10) {
lcd.print("0");
}
lcd.print(now.second());
//Affichage DATE ------------------------------------------------------
lcd.setCursor(0, 0);
if (now.day() < 10) {
lcd.print("0");
}
lcd.print(now.day());
lcd.print(" ");
switch (now.month()) {
case 1:
lcd.print("JAN");
break;
...
lcd.print("DEC");
break;
}
lcd.print(" ");
lcd.print(now.year());
lcd.cursor_off();
lcd.blink_off();
}