Bonjour a tous!
Cela fait quelques temps que je survol le monde de l'arduino et j'avoue que je n'y comprend pas grand chose...
Après plusieurs essais, je me suis résigné à viser plus bas...
Je compte utiliser l'arduino à l'aide de relai afin d'en faire un "bête" programmateur afin de gérer allumage extinction de plusieurs éléments.
J'utilise donc un module RTC, un arduinno mega, et une carte 8 relais.
J'ai repris un programme en libre accès que j'ai légèrement modifié afin qu'il gère 8 relais, mais je bloque quand même...
Actuellement, ça ne fonctionne pas correctement, les différents éléments s'allument (selon l'heure prévu: si je lance le programme a 15h, tous les éléments qui doivent fonctionner à 15h sont allumés. Les autres non, bref, normal) lors du lancement du programme, mais ne s'allument pas par la suite (ça ne redémarre pas le lendemain par exemple), Ça s’éteint bien a l'heure prévue. Et l'un des éléments (bleus dans le code) fonctionne sans souci jusqu’à ce qu'il soit le seul allumé, dès lors il s'allume et s'éteint a intervalle irrégulier (de l'ordre des 5 à 15 secondes)
//**********************GESTION DES 8 RELAIS***************
//Date : Juin 2014
//*************************************************************
#include <LiquidCrystal.h>
#include <Wire.h>
#include <RTClib.h>
#define LCD_WIDTH 20
#define LCD_HEIGHT 4
char lcdbuf[LCD_WIDTH];
uint8_t DsHour ,DsMin ,DsSec;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
RTC_DS1307 rtc;
int minute;
int heure;
int seconde;
int date;
int mois;
int annee;
int temps_perso;
int lastSeconde;
//Configuration des Pin du relai
int refuge = A0;
int bleus = A1;
int blancBleu = A2;
int blanc = A3;
int divers = A4;
int osmo = A5 ;
int pomposmo = A6 ;
int RAH= A7 ;
//Configuration des heures allumage/extinction (format HHMM )
int refuge_on_time = 1300; //allume refuge
int refuge_off_time = 2130; //éteint refuge
int bleus_on_time = 0730; //allume bleu
int bleus_off_time = 2230; //éteint bleu
int blancBleu_on_time = 0830; //allume blanc bleu
int blancBleu_off_time = 2130; //éteint blanc bleu
int blanc_on_time = 0930; //allume blanc
int blanc_off_time = 2030; //éteint blanc
int divers_on_time = 0900; //allume divers
int divers_off_time = 2100; //éteint divers
int osmo_on_time = 1230; //allume module osmo
int osmo_off_time = 1245; //éteint module osmo
int pomposmo_on_time = 1230; //allume pomposmo
int pomposmo_off_time = 1245; //éteint pomposmo
int RAH_on_time = 1200; //allume RAH
int RAH_off_time = 1215; //éteint RAH
void setup(void)
{
Serial.begin(9600);
pinMode(refuge, OUTPUT); // digital pin pour refuge
pinMode(bleus, OUTPUT); // digital pin pour bleus
pinMode(blancBleu, OUTPUT); // digital pin pour blanc bleu
pinMode(blanc, OUTPUT); // digital pin pour blanc
pinMode(divers, OUTPUT); // digital pin pour divers
pinMode(osmo, OUTPUT); // digital pin pour module osmo
pinMode(pomposmo, OUTPUT); // digital pin pour pomposmo
pinMode(RAH, OUTPUT); // digital pin pour RAH
Wire.begin();
rtc.begin();
lcd.begin(LCD_WIDTH, LCD_HEIGHT,1);
// Section de mise à l'heure automatique basée sur l'heure de compilation
// pour une mise à jour de l'heure, ajouter 2 slashs de commentaire devant if, Serial et }
if (! rtc.isrunning()) {
Serial.println("Module RTC non initialise!");
rtc.adjust(DateTime(__DATE__, __TIME__));
}
// une fois la mise à l'heure faite, retirer les 2 slashs devant if, Serial et }, recompiler et renvoyer le prog.
// Fin de la section de mise à l'heure automatique
lcd.clear();
}
void GetTimeFromRTC()
{ DateTime now = rtc.now();
DsHour = now.hour();
DsMin = now.minute();
DsSec = now.second();
temps_perso = (DsHour * 100) + DsMin ;
}
void loop(void)
{
// Leds refuge on/off k1
if( (temps_perso >= refuge_on_time) && (temps_perso < refuge_off_time) )
{
digitalWrite(refuge, HIGH);
lcd.setCursor(0, 3);
lcd.print("refuge");
delay(15);
}
else
{
digitalWrite(refuge, LOW);
lcd.setCursor(0, 3);
lcd.print(" ");
}
// Leds bleus on/off k2
if( (temps_perso >= bleus_on_time) && (temps_perso < bleus_off_time) )
{
digitalWrite(bleus, HIGH);
lcd.setCursor(6, 3);
lcd.print("bleus");
delay(15);
}
else
{
digitalWrite(bleus, LOW);
lcd.setCursor(6, 3);
lcd.print(" ");
}
// Leds blancBleu on/off k3
if( (temps_perso >= blancBleu_on_time) && (temps_perso < blancBleu_off_time) )
{
digitalWrite(blancBleu, HIGH);
lcd.setCursor(11, 3);
lcd.print("blancBleu");
delay(15);
}
else
{
digitalWrite(blancBleu, LOW);
lcd.setCursor(11, 3);
lcd.print(" ");
}
// Leds blanc on/off k1
if( (temps_perso >= blanc_on_time) && (temps_perso < blanc_off_time) )
{
digitalWrite(blanc, HIGH);
lcd.setCursor(0, 3);
lcd.print("blanc");
delay(15);
}
else
{
digitalWrite(blanc, LOW);
lcd.setCursor(0, 3);
lcd.print(" ");
}
// Leds divers on/off k1
if( (temps_perso >= divers_on_time) && (temps_perso < divers_off_time) )
{
digitalWrite(divers, HIGH);
lcd.setCursor(0, 3);
lcd.print("divers");
delay(15);
}
else
{
digitalWrite(divers, LOW);
lcd.setCursor(0, 3);
lcd.print(" ");
}
// osmo on/off k1
if( (temps_perso >= osmo_on_time) && (temps_perso < osmo_off_time) )
{
digitalWrite(osmo, HIGH);
lcd.setCursor(0, 3);
lcd.print("osmo");
delay(15);
}
else
{
digitalWrite(osmo, LOW);
lcd.setCursor(0, 3);
lcd.print(" ");
}
// pomposmo on/off k1
if( (temps_perso >= pomposmo_on_time) && (pomposmo < refuge_off_time) )
{
digitalWrite(pomposmo, HIGH);
lcd.setCursor(0, 3);
lcd.print("pomposmo");
delay(15);
}
else
{
digitalWrite(pomposmo, LOW);
lcd.setCursor(0, 3);
lcd.print(" ");
}
// RAH on/off k4
if( (temps_perso >= RAH _on_time) && (RAH < blanc_off_time) )
{
digitalWrite(RAH , HIGH);
lcd.setCursor(16, 3);
lcd.print("RAH");
delay(15);
}
else
{
digitalWrite(RAH, LOW);
lcd.setCursor(16, 3);
lcd.print(" ");}
// Gestion de l'heure
GetTimeFromRTC();
Serial.print("Heure RTC : ");
Serial.println(lcdbuf);
delay(900);
// Gestion de l'affichage
lcd.clear();
lcd.setCursor(1, 0) ;
lcd.print("RedSeaReef Arduino");
lcd.setCursor(6,1);
sprintf(lcdbuf, "%.2d:%.2d:%.2d",DsHour,DsMin,DsSec);
lcd.print(lcdbuf);
lcd.setCursor(0, 2) ;
lcd.print("Circuit en fonction:");
}
// Fin du programme
Bref, tout cela pour demander si quelqu'un avait le courage de relire le code et de me dire si oui ou non il est censé fonctionner (et s'allumer tous les jours),
A défaut, savoir si il existe d'autres programmes pour faire "programmateurs".