Merci!
J'oubliai le plus important
#include <LiquidCrystal_I2C.h>
#include <Dusk2Dawn.h>
#include <EEPROM.h>
#include <Wire.h>
#include <math.h>
#include <RTClib.h>
int switchEnclos = A0;
int switchPoulailler = A1;
int in1Poulailler = 4;
int in2Poulailler = 5;
int in3Enclos = 6;
int in4Enclos = 7;
int downSensorClose1 = 10;
int upSensorOpen2 = 11;
int downSensorClose3 = 8;
int upSensorOpen4 = 9;
RTC_DS3231 rtc;
Dusk2Dawn maison(43.9163881, 1.357439, +1);
LiquidCrystal_I2C lcd(0x27,20,4);
DateTime now;
int sunrise;
int sunset;
int timeStamp;
int timeStampLeverPoulailler;
int timeStampCoucherPoulailler;
int timeStampLeverEnclos;
int timeStampCoucherEnclos;
int hiverEte = 60;
//int hiverEte = 0;
int decalageSoirPoulailler = hiverEte - 10;
int decalageSoirEnclos = hiverEte - 5;
int decalageMatinEnclos = hiverEte - 5;
int hOuverturePoulailler;
int mOuverturePoulailler;
int hFermeturePoulailler;
int mFermeturePoulailler;
int hOuvertureEnclos;
int mOuvertureEnclos;
int hFermetureEnclos;
int mFermetureEnclos;
int deltaRTC = 4;
const bool debug = false;
void setup() {
Serial.begin(9600);
pinMode(in1Poulailler, OUTPUT);
pinMode(in2Poulailler, OUTPUT);
pinMode(in3Enclos, OUTPUT);
pinMode(in4Enclos, OUTPUT);
pinMode(downSensorClose1, INPUT);
pinMode(upSensorOpen2, INPUT);
pinMode(downSensorClose3, INPUT);
pinMode(upSensorOpen4, INPUT);
pinMode(switchPoulailler, INPUT_PULLUP);
pinMode(switchEnclos, INPUT_PULLUP);
rtc.begin();
lcd.init();
if (debug){
Serial.println("Démarrage. MàJ du RTC.");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
else if (!debug){
Serial.println("Démarrage. Pas de MàJ du RTC. Heure et date à contrôler!");
}
}
void loop() {
now = rtc.now();
sunrise = maison.sunrise(now.year(), now.month(), now.day(), true);
sunset = maison.sunset(now.year(), now.month(), now.day(), true);
timeStamp = ((now.hour()) * 60) + ((now.minute() + 1));
timeStampLeverPoulailler = sunrise - hiverEte;
timeStampCoucherPoulailler = sunset - decalageSoirPoulailler;
timeStampLeverEnclos = sunrise - decalageMatinEnclos;
timeStampCoucherEnclos = sunset - decalageSoirEnclos;
displayLCD();
hourCalculation();
// checkAll();
if ((timeStamp >= timeStampLeverPoulailler && timeStamp <= timeStampCoucherPoulailler) && digitalRead(upSensorOpen2) == 0){
ouverturePoulailler();
}
else if (((timeStamp < timeStampLeverPoulailler || timeStamp > timeStampCoucherPoulailler) || digitalRead(switchPoulailler) == 0) && digitalRead(downSensorClose1) == 0){
fermeturePoulailler();
}
if ((timeStamp >= timeStampLeverEnclos && timeStamp <= timeStampCoucherEnclos) && digitalRead(upSensorOpen4) == 0){
ouvertureEnclos();
}
else if (((timeStamp < timeStampLeverEnclos || timeStamp > timeStampCoucherEnclos) || digitalRead(switchEnclos) == 0) && digitalRead(downSensorClose3) == 0){
fermetureEnclos();
}
}
void displayLCD(){
if (timeStamp < timeStampLeverPoulailler || timeStamp > timeStampCoucherPoulailler){
lcd.noBacklight();
}
else{
lcd.backlight();
}
lcd.setCursor(0, 0);
if (now.day() < 10){
lcd.print("0");
}
lcd.print(now.day());
lcd.print("/");
if (now.month() < 10){
lcd.print("0");
}
lcd.print(now.month());
lcd.print("/");
lcd.print(now.year());
lcd.setCursor(12, 0);
if (now.hour() < 10){
lcd.print("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());
lcd.setCursor(0,1);
lcd.print("Temp:");
lcd.setCursor(14, 1);
lcd.print(rtc.getTemperature() - deltaRTC);
lcd.print("C");
lcd.setCursor(0, 2);
lcd.print("Poules:");
lcd.setCursor(8, 2);
if (hOuverturePoulailler < 10){
lcd.print("0");
}
lcd.print(hOuverturePoulailler);
lcd.print(":");
if (mOuverturePoulailler < 10){
lcd.print("0");
}
lcd.print(mOuverturePoulailler);
lcd.setCursor(15, 2);
if (digitalRead(switchPoulailler) == 1){
lcd.print(hFermeturePoulailler);
lcd.print(":");
if (mFermeturePoulailler < 10){
lcd.print("0");
}
lcd.print(mFermeturePoulailler);
}
else if(digitalRead(switchPoulailler) == 0){
lcd.print("FORCE");
}
lcd.setCursor(0, 3);
lcd.print("Enclos:");
lcd.setCursor(8, 3);
if (hOuvertureEnclos < 10){
lcd.print("0");
}
lcd.print(hOuvertureEnclos);
lcd.print(":");
if (mOuvertureEnclos < 10){
lcd.print("0");
}
lcd.print(mOuvertureEnclos);
lcd.setCursor(15, 3);
if(digitalRead(switchEnclos) == 1){
lcd.print(hFermetureEnclos);
lcd.print(":");
if (mFermetureEnclos < 10){
lcd.print("0");
}
lcd.print(mFermetureEnclos);
}
else if(digitalRead(switchEnclos) == 0){
lcd.print("FORCE");
}
}
void hourCalculation(){
hOuverturePoulailler = (timeStampLeverPoulailler / 60);
mOuverturePoulailler = (timeStampLeverPoulailler % 60);
hFermeturePoulailler = (timeStampCoucherPoulailler / 60);
mFermeturePoulailler = (timeStampCoucherPoulailler % 60);
hOuvertureEnclos = (timeStampLeverEnclos / 60);
mOuvertureEnclos = (timeStampLeverEnclos % 60);
hFermetureEnclos = (timeStampCoucherEnclos / 60);
mFermetureEnclos = (timeStampCoucherEnclos % 60);
}
void ouvrePoulailler() {
digitalWrite(in1Poulailler,0);
digitalWrite(in2Poulailler,1);
Serial.println("P1 Enroule");
}
void fermePoulailler() {
digitalWrite(in1Poulailler,1);
digitalWrite(in2Poulailler,0);
Serial.println("P1 Déroule");
}
void ouvreEnclos() {
digitalWrite(in3Enclos,0);
digitalWrite(in4Enclos,1);
Serial.println("P2 Enroule");
}
void fermeEnclos() {
digitalWrite(in3Enclos,1);
digitalWrite(in4Enclos,0);
Serial.println("P2 Déroule");
}
void ouverturePoulailler(){
while(digitalRead(upSensorOpen2) == 0){
Serial.println("Ouverture");
ouvrePoulailler();
}
delay(650);
Serial.println("Coupure alimentation moteur");
arretPoulailler();
}
void fermeturePoulailler(){
while(digitalRead(downSensorClose1) == 0){
Serial.println("Fermeture");
fermePoulailler();
}
delay(500);
Serial.println("Coupure alimentation moteur");
arretPoulailler();
while(digitalRead(switchPoulailler) == 0){
Serial.println("Maintien du poulailler fermé à cause de l'interrupteur.");
delay(500);
}
}
void ouvertureEnclos(){
while(digitalRead(upSensorOpen4) == 0){
Serial.println("Ouverture");
ouvreEnclos();
}
delay(610);
Serial.println("Coupure alimentation moteur");
arretEnclos();
}
void fermetureEnclos(){
while(digitalRead(downSensorClose3) == 0){
Serial.println("Fermeture");
fermeEnclos();
}
delay(500);
Serial.println("Coupure alimentation moteur");
arretEnclos();
while(digitalRead(switchEnclos) == 0){
Serial.println("Maintien de l'enclos fermé à cause de l'interrupteur.");
delay(500);
}
}
void arretPoulailler() {
digitalWrite(in1Poulailler,0);
digitalWrite(in2Poulailler,0);
Serial.println("Alimentation Poulailler Off");
}
void arretEnclos() {
digitalWrite(in3Enclos,0);
digitalWrite(in4Enclos,0);
Serial.println("Alimentation Enclos Off");
}
void checkSwitchs(){
if (digitalRead(switchPoulailler) == 0){
Serial.print(digitalRead(switchPoulailler));
Serial.println(" - Switch poulailler appuyé");
}
else{
Serial.print(digitalRead(switchPoulailler));
Serial.println(" - Switch poulailler relaché");
}
if (digitalRead(switchEnclos) == 0){
Serial.print(digitalRead(switchEnclos));
Serial.println(" - Switch enclos appuyé");
}
else{
Serial.print(digitalRead(switchEnclos));
Serial.println(" - Switch enclos relaché");
}
delay(1000);
}
void checkDoors(){
Serial.print("capteur poulailler haut ");
Serial.println(digitalRead(upSensorOpen2));
Serial.print("capteur poulailler bas ");
Serial.println(digitalRead(downSensorClose1));
Serial.print("capteur enclos haut ");
Serial.println(digitalRead(upSensorOpen4));
Serial.print("capteur enclos bas ");
Serial.println(digitalRead(downSensorClose3));
Serial.println(" ");
delay(3000);
}
void checkDateHeure(DateTime now){
Serial.print("Date: ");
Serial.print(now.day());
Serial.print('/');
Serial.print(now.month());
Serial.print('/');
Serial.print(now.year());
Serial.print(" | Heure: ");
Serial.print(now.hour());
Serial.print(':');
Serial.print(now.minute());
Serial.print(':');
Serial.print(now.second());
Serial.println();
}
void checkSunsetSunriseTimeStamp(DateTime now){
Serial.print("Sunrise: ");
Serial.print(sunrise);
Serial.print(" - Sunset: ");
Serial.print(sunset);
Serial.print(" - timeStamp: ");
Serial.print(timeStamp);
Serial.println();
}
void checkAll(){
checkSwitchs();
checkDoors();
checkDateHeure(now);
checkSunsetSunriseTimeStamp(now);
Serial.println("");
delay(3000);
}