Bonjour
Merci pour vos réponse.
Pour le soucis de batterie maintenant c'est bon j'ai plus de soucis.
Effectivement les fouines sont un soucis (pour l'instant rien mais j'en vois de temps en temps). C'est pour sa que pour le moment on ouvre et ferme manuellement mais l'été va être fini et c'est mieux quand il pleut de ne pas sortir mdr.
Le code de manière général je l'écrit complètement, je m'inspire de code d'autres personnes en essayant de comprendre comment y fonctionne et ensuite je le crée à ma façon (peut être pas toujours optimisé mais au moins je le comprend mdr).
Si vous voulez je vous partage mon code défois qu'il y ai un soucis dedans.
#include <Wire.h> // Bibliothèque pour l'I2C
#include "RTClib.h" // Bibliothèque pour le module RTC
#include <LiquidCrystal.h> // Bibliothèque pour l'écran
#include <Stepper.h> // Bibliothèque moteur
#include <EEPROM.h> // Bibliothèque pour la mémoire EEPROM
RTC_DS1307 RTC; // Instance du module RTC de type DS1307
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
static long timer;
int tempo = (15*1000); //tempo allumage ecran 15s
int pHeure = 0;
int pMinute = 0;
int heure = 0;
int minute_ = 0;
// Bouton
const int boutonPlus = 2;
const int boutonValider = 3;
const int fcUp = 15; // fin de course montée
const int fcDown = 16; // fin de course descente
int etatBouton = 0;
int coupureUp = 0;
int coupureDown = 0;
int retroLcd = 17;
int etatEcran = 0;
// EEPROM
int memP = 0; // Adresse pour le programme EEPROM
byte MemPrg ;
//int programme_default = 5;
int programme = 1;
int programme_choisi = 1;
int programmeMax = 9; // Nombre de programme maximum
int valide = 0;
String horaire = ("");
// Moteur
const int stepsPerRevolution = 32*64;
// (step,1N2,1N4,1N3,1N1)
Stepper moteur(stepsPerRevolution, 11, 13, 12, 10);
int motorSpeed = 10; // vitesse du moteur (rotation / minute)
void setup(void) {
//Initialisation de l'éran
Serial.begin(9600);
// Initialise la liaison I2C
Wire.begin();
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.setCursor(0, 1);
// Initialise le module RTC
RTC.begin();
timer=0;
pinMode (boutonPlus, INPUT_PULLUP);
pinMode (boutonValider, INPUT_PULLUP);
pinMode (fcUp, INPUT_PULLUP);
pinMode (fcDown, INPUT_PULLUP);
pinMode (retroLcd, OUTPUT);
//programme_choisi = programme_default;
//EEPROM.write(memP, programme); // Ecriture de la valeur dans la mémoire
//bootMoteur();
//Initialise la date et le jour au moment de la compilation
// /!\ /!\ Les lignes qui suivent sert à définir la date et l'heure afin de régler le module,
// pour les montages suivant il ne faut surtout PAS la mettre, sans à chaque démarrage
// le module se réinitialisera à la date et heure de compilation
//DateTime dt = DateTime(__DATE__, __TIME__);
//RTC.adjust(dt);
// /!\
////////////////////////////////////////////////////////////////////////////////////////////
}
void loop(){
MemPrg = EEPROM.read(memP); // Lecture de l'EEPROM
DateTime now=RTC.now(); //Récupère l'heure et la date courante
/*Serial.print(heure);
Serial.print(" : ");
Serial.println(minute_);*/
affiche_date_heure(now); //Converti la date en langue humaine
affiche_programme(); // Afiche le programme choisi
autre_programme(); // Pour modifié le programmme voulu
etatBouton = digitalRead(boutonPlus); // bouton vert
if (etatBouton == LOW)
{
ecran();
programme++;
}
etatBouton = digitalRead(boutonValider); // bouton rouge
if (etatBouton == LOW)
{
ecran();
valider_programme();
}
switch (programme)
{
case 1: //6h 22h
lcd.clear();
affiche_programme();
autre_programme();
lcd.setCursor (3, 1);
horaire = "6h - 22h";
break;
case 2: //6h30 21h
lcd.clear();
affiche_programme();
autre_programme();
lcd.setCursor (3, 1);
horaire = "6h30 - 21h";
break;
case 3: //7h 20h30
lcd.clear();
affiche_programme();
autre_programme();
lcd.setCursor (3, 1);
horaire = "7h - 20h30";
break;
case 4: //7h30 19h
lcd.clear();
affiche_programme();
autre_programme();
lcd.setCursor (3, 1);
horaire = "7h30 - 19h";
break;
case 5: //8h 18h
lcd.clear();
affiche_programme();
autre_programme();
lcd.setCursor (3, 1);
horaire = "8h - 18h";
break;
case 6: //Manuel montée
lcd.clear();
lcd.setCursor(1, 1);
lcd.print("Manuel montee");
affiche_programme();
break;
case 7: //Manuel descente
lcd.clear();
lcd.setCursor(1, 1);
lcd.print("Manuel descente");
affiche_programme();
break;
case 8: //affichage heure
lcd.clear();
lcd.setCursor(1, 1);
lcd.print("Heure : ");
lcd.print(heure);
lcd.print(" : ");
lcd.print(minute_);
break;
case 9: //test
lcd.clear();
affiche_programme();
autre_programme();
lcd.setCursor (3, 1);
horaire = "test";
break;
}
if(programme > programmeMax)
{
programme = 1;
}
if (millis()>=timer + tempo)
{
lcd.noDisplay(); // Coupure de l'ecran
digitalWrite(retroLcd, LOW); // Coupure du retro de l'ecran
}
if (programme_choisi == 6)
{
mode_manuel_monte();
}
if (programme_choisi == 7)
{
mode_manuel_descente();
}
programme_execution();
delay(200); // delais de 1 seconde
}
// affiche la date et l'heure sur l'écran
void affiche_date_heure(DateTime datetime){
heure = datetime.hour();
minute_ = datetime.minute();
}
void bootMoteur()
{
Serial.println("boot moteur");
moteur.setSpeed(motorSpeed);
moteur.step(10);
moteur.step(-10);
Serial.println("Moteur pret");
}
void affiche_programme()
{
lcd.setCursor(0, 0);
lcd.print("Programme ");
lcd.print(MemPrg);
}
void autre_programme()
{
lcd.setCursor(0, 1);
lcd.print(programme);
lcd.print(" : ");
lcd.print(horaire);
}
void valider_programme()
{
etatBouton = digitalRead(boutonValider);
if (etatBouton == LOW)
{
Serial.println("bouton OK");
valide++;
if (valide == 8)
{
programme_choisi = programme;
EEPROM.write(memP, programme_choisi);
valide = 0;
}
}
}
void ecran()
{
lcd.display(); // Allume l'ecran
digitalWrite (retroLcd, HIGH); // Allume le reto de l'ecran
timer=millis();
}
void programme_execution()
{
if(MemPrg==1)
{
if((heure==6) && (minute_==0))
{
fc1();
}
if((heure==22) && (minute_==0))
{
fc2();
}
}
if(MemPrg==2)
{
if((heure==6) && (minute_==30))
{
fc1();
}
if((heure==21) && (minute_==0))
{
fc2();
}
}
if(MemPrg==3)
{
if((heure==7) && (minute_==0))
{
fc1();
}
if((heure==20) && (minute_==30))
{
fc2();
}
}
if(MemPrg==4)
{
if((heure==7) && (minute_==30))
{
fc1();
}
if((heure==19) && (minute_==0))
{
fc2();
}
}
if(MemPrg==5)
{
if((heure==8) && (minute_==0))
{
fc1();
}
if((heure==18) && (minute_==0))
{
fc2();
}
}
}
void mode_manuel_monte()
{
fc1();
programme_choisi = MemPrg;
}
void mode_manuel_descente()
{
fc2();
programme_choisi = MemPrg;
}
void fc1()
{
Serial.println("Controle fcUp");
coupureUp = digitalRead(fcUp);
if (coupureUp == 1)
{
Serial.println("Appel moteurUp");
moteurUp();
Serial.println("moteur en haut retour menu");
}
}
void fc2()
{
Serial.println("Controle fcDown");
coupureDown = digitalRead(fcDown);
if (coupureDown == 1)
{
Serial.println("Appel moteurDown");
moteurDown();
Serial.println("moteur en bas retour menu");
}
}
void moteurUp()
{
Serial.println("moteur up");
moteur.setSpeed(motorSpeed);
moteur.step(100);
Serial.println("Appel controle fc1");
fc1();
}
void moteurDown()
{
Serial.println("moteur down");
moteur.setSpeed(motorSpeed);
moteur.step(-100);
Serial.println("Appel controle fc2");
fc2();
}