const byte bp_valid = 18;
const byte bp_menu = 19;
const byte bp_plus = 23;
const byte relais_statique = 5;
const byte relais_bypassA = 2;//2
const byte relais_bypassB = 4;//4
byte valid = HIGH;
byte menu = HIGH;
byte plus = HIGH;
byte compteur_menu = 0;
byte compteur_plus = 1;
unsigned long preMillis = 0;
unsigned long previousmillis = 0;
byte dec_h = 0;
byte heure = 0;
byte h = 9;
byte m = 7;
const int lcd_delay = 30000;
const int bypass_delay = 200;
bool drap_valid = false;
bool drap_menu = false;
bool drap_plus = false;
byte drap_etat_ond = false;
byte etat_ond = 0;
byte etat_pan = 0;
//#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup()
{
// initialize the LCD
lcd.init();
pinMode(bp_valid,INPUT_PULLUP);
pinMode(bp_menu,INPUT_PULLUP);
pinMode(bp_plus,INPUT_PULLUP);
pinMode(relais_statique,OUTPUT);
digitalWrite(relais_statique, LOW);
pinMode(relais_bypassA,OUTPUT);
digitalWrite(relais_bypassA, LOW);
pinMode(relais_bypassB,OUTPUT);
lcd.print("Visu Solaire");
digitalWrite(relais_bypassB,HIGH);
lcd.setCursor(19,1);
lcd.print("A");
delay(200);
digitalWrite(relais_bypassB,LOW);}
void loop(){
valid = digitalRead(bp_valid);
menu = digitalRead(bp_menu);
plus = digitalRead(bp_plus);
if (valid == LOW || menu == LOW || plus == LOW){
lcd.backlight();preMillis = millis();}
heure = (h+dec_h);
lcd.setCursor(13,0);
if(dec_h == 0){lcd.print(F("H "));}
else{lcd.print(F("E "));}
if(heure < 10){lcd.print(F("0"));}
lcd.print(heure);
lcd.print(F(":"));
if(m < 10){lcd.print(F("0"));}
lcd.print(m);
if(valid == HIGH){drap_valid = false;}
if(valid == LOW && drap_valid == false){
if(compteur_menu == 1){lcd.setCursor(12,0);}
if(compteur_menu == 2){lcd.setCursor(18,1);}
if(compteur_menu == 3){lcd.setCursor(18,2);}
lcd.print(" ");
compteur_menu = 0;
compteur_plus = 0;
drap_valid = true;}
if(menu == HIGH){drap_menu = false;}
if(menu == LOW && drap_menu == false){
compteur_menu ++;
if(compteur_menu == 4){compteur_menu = 1;}
drap_menu = true;
switch(compteur_menu){
case 1: lcd.setCursor(18,2);
lcd.print(" ");
lcd.setCursor(12,0);
break;
case 2: lcd.setCursor(12,0);
lcd.print(" ");
lcd.setCursor(18,1);
break;
case 3: lcd.setCursor(18,1);
lcd.print(" ");
lcd.setCursor(18,2);
break;}
lcd.print(F("*"));}
if(plus == HIGH){drap_plus = false;}
if(plus == LOW && drap_plus == false){
compteur_plus ++;
if(compteur_menu == 1){
if(compteur_plus >= 3){compteur_plus = 1;}
dec_h = compteur_plus - 1;}
if(compteur_menu == 2){
if(compteur_plus >= 3){compteur_plus = 1;}
etat_ond = compteur_plus - 1;}
if(compteur_menu == 3){
if(compteur_plus >= 3){compteur_plus = 1;}
etat_pan = compteur_plus - 1;}
drap_plus = true;}
lcd.setCursor(15,1);
lcd.print("Ond");
lcd.setCursor(19,1);
if(drap_etat_ond != etat_ond){
previousmillis = millis();
drap_etat_ond = etat_ond;
if(etat_ond == 1){
digitalWrite(relais_bypassA,HIGH);
lcd.print("M");}
else{
digitalWrite(relais_bypassB,HIGH);
lcd.print("A");}
}
if(millis() - previousmillis > bypass_delay){
digitalWrite(relais_bypassA,LOW);
digitalWrite(relais_bypassB,LOW);}
lcd.setCursor(19,2);
if(etat_pan == 1){
digitalWrite(relais_statique, HIGH);
lcd.print("M");}
else{
digitalWrite(relais_statique, LOW);
lcd.print("A");}
if(millis() - preMillis > lcd_delay){lcd.noBacklight();}
}