#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // Renseigner l'adresse I2C du LCD à 0x27 sur 4 lignes et 20 chars
int ledBleu = 9;
int SSR_relais = 10;
int btn_StartStop = 2; bool EtatBtnStartStop;
int btn_Reset = 3; bool EtatBtn_Reset;
int btn_RecordSet = 6; bool EtatBtn_RecordSet;
int btn_Set_TimeON = 4; bool EtatBtn_Set_TimeON;
int btn_Set_TimeOFF = 5; bool EtatBtn_Set_TimeOFF;
char tempsON[20], tempsOFF[20], tempBuffer[20];
char buffer[20], bufferON[20], bufferOFF[20];
bool etat_SSRrelais = HIGH;
bool FlagON = false;
bool etatBtnPresser;
bool EtatChronoOnOFF;
long Min = 60000, Sec = 1000;
long onTime = 5 * 60000;
long offTime = 2 * 60000;
long MyTimeON;
long MyTimeOFF;
unsigned long hh = 0, mm = 0, ss = 0;
long minutes_OFF = 0, minutes_ON = 0;
long TempsEcoule;
long Milliseconde, Seconde, Minute, Heure;
unsigned long currentTime = 0;
unsigned long previousTime = 0;
unsigned long startMillis; //some global variables available anywhere in the program
unsigned long currentMillis;
unsigned long period = 5000;
int Record;
int Start;
bool etatRecord = false;
// Fin des déclarations.
/**************************************************/
void setup() {
lcd.init(); lcd.backlight(); //lcd I2C 2004
pinMode(btn_StartStop, INPUT_PULLUP);
pinMode(btn_Reset, INPUT_PULLUP);
pinMode(btn_RecordSet, INPUT);
pinMode(btn_Set_TimeON, INPUT);
pinMode(btn_Set_TimeOFF, INPUT);
pinMode(ledBleu, OUTPUT);
pinMode(SSR_relais, OUTPUT);
etat_SSRrelais = LOW;
digitalWrite(SSR_relais, LOW);
//Affichage
lcd.setCursor(0, 0); lcd.print(" Chronometre: ");
lcd.setCursor(0, 2); lcd.print("Minuteur: ");
lcd.setCursor(0, 3); lcd.print(" Entrez le minutage ");
}
void loop() {
// Lit la broche d'entrée du btn_StartStop et stock ça valeur dans EtatBtnStartStop. Ect...
EtatBtnStartStop = digitalRead(btn_StartStop);
EtatBtn_Reset = digitalRead(btn_Reset);
EtatBtn_RecordSet = digitalRead(btn_RecordSet);
EtatBtn_Set_TimeON = digitalRead(btn_Set_TimeON);
EtatBtn_Set_TimeOFF = digitalRead(btn_Set_TimeOFF);
///static int Record = 0, Start = 0;
if (!FlagON && etatRecord) {
etat_SSRrelais = LOW; // Turn it off
//lcd.setCursor(7, 3); lcd.print(" ");
lcd.setCursor(0, 3); lcd.print(bufferON);
lcd.setCursor(14, 3); lcd.print(bufferOFF);
lcd.setCursor(7, 3); lcd.print(" OFF ");
digitalWrite(SSR_relais, LOW); // Update the actual relay
}
if (FlagON) { // Section minuteur
//currentMillis = millis();
///sprintf(tempBuffer, "%06d", MyTimeON);
///lcd.setCursor(10, 2); lcd.print(tempBuffer);
///MyTimeON = onTime;
lcd.setCursor(10, 2); lcd.print(tempBuffer);
if ((etat_SSRrelais == LOW) && (currentMillis - startMillis >= offTime))
{
etat_SSRrelais = HIGH;// turn it on
startMillis = currentMillis; // Remember the time
lcd.setCursor(7, 3); lcd.print(" ");
lcd.setCursor(7, 3); lcd.print(" ON ");
digitalWrite(SSR_relais, HIGH); // Update the actual relay
}
else if ((etat_SSRrelais == HIGH) && (currentMillis - startMillis >= onTime))
{
//digitalWrite(RELAY2, LOW);
etat_SSRrelais = LOW; // Turn it off
previousTime = currentMillis; // Remember the time
lcd.setCursor(7, 3); lcd.print(" ");
lcd.setCursor(7, 3); lcd.print(" OFF ");
digitalWrite(SSR_relais, LOW); // Update the actual relay
}
}
//*******************
fn_boutons();
//*******************
// Si EtatBtnStartStop == LOW et etatBtnPresser == 0 on exécute les actions entre {}
if (EtatBtnStartStop == LOW && etatBtnPresser == 0) {
// La variable etatBtnPresser prend la valeur de 1.
etatBtnPresser = 1;
FlagON = !EtatChronoOnOFF;
// Si EtatChronoOnOFF = 0 alors EtatChronoOnOFF = 1 et inversement.
EtatChronoOnOFF = !EtatChronoOnOFF;
}
// Si EtatBtn_Reset == LOW et EtatChronoOnOFF == 0 et etatBtnPresser == 0 on exécute les actions entre {}
if (EtatBtn_Reset == LOW && EtatChronoOnOFF == 0 && etatBtnPresser == 0) {
// La variable etatBtnPresser prend la valeur de 1.
etatBtnPresser = 1;
// La variable Milliseconde prend la valeur de 0.
Milliseconde = 0;
//Etc...
Seconde = 0;
Minute = 0;
Heure = 0;
}
// Si EtatBtnStartStop == HIGH et EtatBtn_Reset == HIGH on exécute les actions entre {}
if (EtatBtnStartStop == HIGH && EtatBtn_Reset == HIGH) {
// La variable etatBtnPresser prend la valeur de 0.
etatBtnPresser = 0;
}
//On stocke la valeur du timer interne du microcontrôleur récupéré grâce à millis() dans la variable currentTime
currentTime = millis();
//On calcule la valeur de TempsEcoule en effectuant une soustraction entre currentTime et previousTime.
TempsEcoule = currentTime - previousTime;
//On stocke la valeur du timer interne du microcontrôleur récupéré grace à millis() dans la variable previousTime
previousTime = millis();
if (EtatChronoOnOFF == 1) {
Milliseconde = Milliseconde + TempsEcoule;
lcd.setCursor(10, 2); lcd.print(tempBuffer);
if (Milliseconde > 999) {
Milliseconde = Milliseconde - 1000;
Seconde++;
MyTimeON--;
sprintf(tempBuffer, "%06d", MyTimeON);
//// lcd.setCursor(10, 2); lcd.print(tempBuffer);
}
if (Seconde > 59) {
Seconde = 0;
Minute++;
}
if (Minute > 59) {
Minute = 0;
Heure++;
}
}
//Affichage du chonomètre
// Placer le curseur sur la colonne 12, ligne 1 du LCD
// Section affichage du chrono
lcd.setCursor(12, 1);
lcd.print(":");
if (Milliseconde > 99) {
lcd.setCursor(13, 1);
lcd.print(Milliseconde);
}
else if (Milliseconde > 9 && Milliseconde < 100) {
lcd.setCursor(13, 1);
lcd.print("0");
lcd.setCursor(14, 1);
lcd.print(Milliseconde);
}
else if (Milliseconde > 0 && Milliseconde < 10) {
lcd.setCursor(13, 1);
lcd.print("00");
lcd.setCursor(15, 1);
lcd.print(Milliseconde);
}
else {
lcd.setCursor(12, 1);
lcd.print(":000");
}
lcd.setCursor(9, 1);
lcd.print(":");
if (Seconde < 10) {
lcd.setCursor(10, 1);
lcd.print("0");
lcd.setCursor(11, 1);
lcd.print(Seconde);
}
else {
lcd.setCursor(10, 1);
lcd.print(Seconde);
}
lcd.setCursor(6, 1);
lcd.print(":");
if (Minute < 10) {
lcd.setCursor(7, 1);
lcd.print("0");
lcd.setCursor(8, 1);
lcd.print(Minute);
}
else {
lcd.setCursor(7, 1);
lcd.print(Minute);
}
if (Heure < 10) {
lcd.setCursor(4, 1);
lcd.print("0");
lcd.setCursor(5, 1);
lcd.print(Heure);
}
else {
lcd.setCursor(4, 1);
lcd.print(Heure);
}
///lcd.setCursor(10, 2); lcd.print(tempBuffer);
}
void fn_boutons() {
//===================================
// Réglage du minuteur
if (EtatBtn_Set_TimeON) {
minutes_ON = minutes_ON + 1;
if (minutes_ON > 59) {
minutes_ON = 0;
}
sprintf(bufferON, "%02d secondes ON", minutes_ON);
lcd.setCursor(0, 3); lcd.print(" ");
lcd.setCursor(0, 3); lcd.print(bufferON);
delay(10);
while (EtatBtn_Set_TimeON) EtatBtn_Set_TimeON = digitalRead(btn_Set_TimeON);
}
if (EtatBtn_Set_TimeOFF) {
minutes_OFF = minutes_OFF + 1;
if (minutes_OFF > 59) {
minutes_OFF = 0;
}
sprintf(bufferOFF, "%02d secondes OFF", minutes_OFF);
lcd.setCursor(0, 3); lcd.print(" ");
lcd.setCursor(0, 3); lcd.print(bufferOFF);
delay(10);
while (EtatBtn_Set_TimeOFF) EtatBtn_Set_TimeOFF = digitalRead(btn_Set_TimeOFF);
}
// Enregitrement des temps ON/OFF du minuteur
if (EtatBtn_RecordSet) {
Record = Record + 1;
if (Record == 1) {
sprintf(bufferON, "%02d Sec", minutes_ON);
lcd.setCursor(0, 3); lcd.print(" ");
lcd.setCursor(0, 3); lcd.print(bufferON);
lcd.setCursor(0, 2); lcd.print("T ON");
onTime = minutes_ON;
MyTimeON = onTime;
}
if (Record == 2) {
sprintf(bufferOFF, "%02d Sec", minutes_OFF);
lcd.setCursor(15, 2); lcd.print("T OFF");
lcd.setCursor(0, 3); lcd.print(" ");
lcd.setCursor(0, 3); lcd.print(bufferON);
lcd.setCursor(14, 3); lcd.print(bufferOFF);
offTime = minutes_OFF;
MyTimeOFF = offTime;
}
if (Record == 3) {
lcd.setCursor(0, 3); lcd.print(" ");
lcd.setCursor(0, 3); lcd.print("All Times Recording! ");
delay(1000);
lcd.setCursor(0, 3); lcd.print(" ");
lcd.setCursor(0, 3); lcd.print(bufferON);
lcd.setCursor(14, 3); lcd.print(bufferOFF);
lcd.setCursor(7, 3); lcd.print("Ready!");
etatRecord = true;
delay(1000);
}
delay(50);
while (EtatBtn_RecordSet) EtatBtn_RecordSet = digitalRead(btn_RecordSet);
}
//*****************************************************************
}