Programme définitif
J'avais deux librairies qui rentraient en conflit.
J'ai donc crée un premier programme uniquement pour entrer et modifier l'heure pour le réglage heure d'été heure d'hiver ou pour récupérer un éventuel décalage.
Le deuxième programme est le programme qui gère l'eclairage de jour et de nuit, le chauffage et l'affichage de l'heure.
RÉGLAGE DE L'HEURE
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
void setup() {
RTC.stop();
RTC.set(DS1307_SEC,00); //reglage secondes
RTC.set(DS1307_MIN,59); //reglage minutes
RTC.set(DS1307_HR,19); //reglage heures
RTC.set(DS1307_DOW,4); //reglage jour de la semaine
RTC.set(DS1307_DATE,13); //reglage date
RTC.set(DS1307_MTH,01); //reglage mois
RTC.set(DS1307_YR,11); //reglage annee
RTC.start();
}
void loop(){
}
PROGRAMME PRINCIPAL
#include <LiquidCrystal.h>
#include <WProgram.h>
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
/*
Arduino Masterbalby Controller
Analog Pin 0 = Temperature Sensor
Analog Pin 4 = SDA pour ds1307
Analog Pin 5 = SCL pour ds1307
Digital Pin 2 = LCD
Digital Pin 3 = LCD
Digital Pin 4 = LCD
Digital Pin 5 = LCD
Digital Pin 6 = LCD
Digital Pin 7 = LCD
Digital Pin 8 = Relais Chauffage
Digital Pin 9 = PWM moon_light
Digital Pin 11 = PWM day_light
Digital Pin 16 = Bouton poussoir 1 day light
Digital Pin 15 = Bouton poussoir 2 chauffage
*/
//LiquidCrystal lcd(rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int sensorPin = 0;
int chauffage = 8;
int pwm1 = 11;
int pwm2 = 9;
int time;
int BP1=16; //interrupteur Day_light
int BP2=15; //interrupteur Chauffage
int val_up=0;
int val_down=0;
long last_time1 = 0;
long last_time2 = 0;
void setup() {
Serial.begin(9600);
pinMode(chauffage, OUTPUT); // digital pin pour chauffage en sortie
pinMode(BP1, INPUT); //met la broche en entree
digitalWrite(BP1, HIGH) ; // activation du pullup de la broche en entree
pinMode(BP2, INPUT); //met la broche en entree
digitalWrite(BP2, HIGH) ; // activation du pullup de la broche en entree
analogWrite(pwm1,0);
analogWrite(pwm2,0);
lcd.begin(16, 2);
delay(10);
lcd.print("MasterBalby 3.4");
lcd.setCursor(0, 1) ;
lcd.print("Gestion Aqua");
delay(2000);
lcd.clear();
setSyncProvider(RTC.get);
if(timeStatus()!= timeSet)
lcd.println("Unable to sync");
else
lcd.println("RTC system time ");
delay(2000);
lcd.clear();
delay(10);
}
void loop() {
val_up = (map (minute(), 0, 59, 0, 150));
val_down = (map (minute(), 0, 59, 150, 0));
time = ((hour() * 100) + minute());
//Recuperer la temperature du LM35*******************************
int reading = analogRead(sensorPin);
float voltage = reading * 5.0 / 1024;
int temp = voltage * 100 ;
//Chauffage********************************
if((temp < 24) || (digitalRead(BP2)==LOW)) {
digitalWrite(chauffage, HIGH);
}
else if (temp > 26)
{
digitalWrite(chauffage, LOW);
}
//****************Day Lights*************************************
if (hour() == 15) { // entre 15:00:00 et 15:59:59
analogWrite (pwm1, val_up); // allumage progressif
}
else if (hour() == 20) { // entre 20:00:00 et 20:59:59
analogWrite (pwm1, val_down); // extinction progressive
}
else if ((hour() > 15 ) && (hour() < 20)) { // entre 16:00:00 et 19:59:59
analogWrite(pwm1, 150);
}
else if ((((hour() > 0 && hour() < 15)) && (digitalRead(BP1)==LOW)) || (((hour() > 20 && hour() < 24)) && (digitalRead(BP1)==LOW)) || ((hour() == 0) && (digitalRead(BP1)==LOW))){
analogWrite(pwm1, 150);
}
else if ((((hour() > 0 && hour() < 15)) && (digitalRead(BP1)==HIGH)) || (((hour() > 20 && hour() < 24)) && (digitalRead(BP1)==HIGH)) || ((hour() == 0) && (digitalRead(BP1)==HIGH))){
analogWrite(pwm1, 0);
}
//****************Moon Lights****************************
if ((hour() > 19) && (hour() < 24)) { // de 20:00:00 à 23:59:59
analogWrite(pwm2, 255);
}
else{
analogWrite(pwm2, 0);
}
//Affichage chauffage allumé**********************
lcd.setCursor(0,1);
if(digitalRead(chauffage) == HIGH)
{
lcd.println("Chauffage ON ");
}
else
{
lcd.println("Chauffage OFF ");
}
//Affichage heure********************************
if ( millis() >=(last_time1 + 1000))
{
lcd.setCursor(0, 0) ;
lcd.print(hour());
printDigits(minute());
printDigits(second());
last_time1 = millis();
}
//Affichage temperature**************************
if ( millis() >=(last_time2 + 5000))
{
lcd.setCursor(9,0);
lcd.print("T:");
lcd.print(temp);
lcd.println("C ");
last_time2 = millis();
}
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
lcd.print(":");
if(digits < 10)
lcd.print('0');
lcd.print(digits);
}