bon, ça n'avance guère...
mon tableau électrique est fini. c'est déjà ça.

j'ai repris l'ancien tableau, j'ai viré le module logique télémécanique, pour y loger un arduino.

le programme :
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include "Wire.h"
#include "RTClib.h"
RTC_DS1307 RTC;
const int boutonPin = 8;
// compteur d'impulsion du boutton poussoir. initialisé à 3 pour marche normale
int compteurBouton = 3;
// etat du bouton
int etatBouton;
// etat précédant du bouton
int precEtatBouton = LOW;
long nowDEC = 0;
long heures = 0;
int minutes = 0;
int secondes = 0;
int secAff = 1; // les tops secondes d'affichage
int ledpin = 13;
int canalTube = 9;
int canalLed = 10;
int pwmA;
int pwmB;
int ledV = 11;
int ledR = 12;
// début de montée de la courbe a du canal a en décimal. ici 11 h 39600
long dmaca = 39600;
// fin montée de la courbe a du canal a en décimal. ici 14h 50400
long fmaca = 50400;
// début descente de la courbe a du canal a en décimal. ici 17h 61200
long ddaca = 61200;
// fin descente de la courbe a du canal a. ici 20 h 72000
long fdaca = 72000;
// début montée de la courbe a du canal b. ici 8h 28800
long dmacb = 28800;
// fin montée de la courbe a du canal b. ici 11h 39600
long fmacb = 39600;
// début descente de la courbe a du canal b. ici 11h01 39660
long ddacb = 39660;
// fin descente de la courbe a du canal b. ici 14h 50400
long fdacb = 50400;
// début montée de la courbe b du canal b. ici 17h 61200
long dmbcb = 61200;
// fin montée de la courbe b du canal b. ici 20h 72000
long fmbcb = 72000;
// début descente de la courbe b du canal b. ici 20h01 72060
long ddbcb = 72060;
// fin descente de la courbe b du canal b. ici 23h82800
long fdbcb = 82800;
void setup () {
Serial.begin(9600);
Wire.begin();
RTC.begin();
pinMode (ledpin,OUTPUT);
pinMode (boutonPin, INPUT_PULLUP);
digitalWrite (ledpin, LOW);
pinMode (canalTube, OUTPUT);
pinMode (canalLed, OUTPUT);
pinMode (ledV, OUTPUT);
pinMode (ledR, OUTPUT);
// decomment pour essai install 1 sur 3
// nowDEC = dmacb;
// if (! RTC.isrunning()) {
// Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
//RTC.adjust(DateTime(__DATE__, __TIME__));
}
void loop () {
DateTime now = RTC.now();
heures = now.hour(),DEC;
minutes = now.minute(),DEC;
secondes = now.second(),DEC;
heures = heures * 3600;
minutes = minutes * 60;
// comment pour essai install 2 sur 3
nowDEC = heures + minutes + secondes;
// decomment pour essai install 3 sur 3
/* nowDEC +=1;
delay (2); */
// comptage d'appui du bouton poussoir
etatBouton = digitalRead (boutonPin);
// compare l'état actuel du bouton avec celui mémorisé précedemment
if (etatBouton != precEtatBouton){
if (etatBouton == HIGH) compteurBouton++;
// le bouton ne peut avoir que trois états. on limite alors le nombre de comptage à 3
precEtatBouton = etatBouton;
if (compteurBouton >= 4) compteurBouton = 1;
}
// gestion de l'affichage serie
if (secAff == secondes) {
Serial.print ("nowDEC ");
Serial.println (nowDEC);
Serial.print ("compteur bouton ");
Serial.println (compteurBouton);
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print ("pwmA ");
Serial.print (pwmA);
Serial.print (" pwmB ");
Serial.println (pwmB);
secAff +=10;
if (secAff > 51)secAff = 1;
}
analogWrite (canalTube, pwmA);
analogWrite (canalLed, pwmB);
// gestion des trois états du BP
switch (compteurBouton) {
case 1:
// marche forcée
digitalWrite (ledV, LOW);
digitalWrite (ledR, HIGH);
pwmA = 0;
pwmB = 127;
break;
case 2:
// extinction forcée
digitalWrite (ledV, LOW);
digitalWrite (ledR, LOW);
pwmA = 0;
pwmB = 0;
break;
case 3:
// fonctionnement normal
digitalWrite (ledV, HIGH);
digitalWrite (ledR, LOW);
// test de la condition avant lancement de l'éclairage et après extinction de l'éclairage
if (nowDEC < dmaca || nowDEC > fdaca) {
pwmA = 0;
}
// test la condition d'éclairage maxi
if (nowDEC > fmaca && nowDEC < ddaca) {
pwmA = 255;
}
// test de la condition de la courbe de montée
if (nowDEC >= dmaca && nowDEC <= fmaca) {
pwmA = map (nowDEC,dmaca,fmaca,25,255);
}
// test de la condition de la courbe de descente
if (nowDEC >= ddaca && nowDEC <= fdaca) {
pwmA = map (nowDEC,ddaca,fdaca,255,25);
}
// test de la condition eclairage mini canal b
if (nowDEC < dmacb || nowDEC > fdbcb) {
pwmB = 0;
}
if (nowDEC > fdacb && nowDEC < dmbcb) {
pwmB = 0;
}
// test la condition d'éclairage maxi
if (nowDEC > fmacb && nowDEC < ddacb) {
pwmB = 255;
}
if (nowDEC > fmbcb && nowDEC < ddbcb) {
pwmB = 255;
}
// test de la condition de la courbe de montée a
if (nowDEC >= dmacb && nowDEC <= fmacb) {
pwmB = map (nowDEC,dmacb,fmacb,25,255);
}
// test de la condition descente courbe a canal b
if (nowDEC >= ddacb && nowDEC <= fdacb) {
pwmB = map (nowDEC,ddacb,fdacb,255,25);
}
// test de la condition de montée de la courbe b canal b
if (nowDEC >= dmbcb && nowDEC <= fmbcb) {
pwmB = map (nowDEC,dmbcb,fmbcb,25,255);
}
// test de la condition de descente de la courbe b canal b
if (nowDEC >= ddbcb && nowDEC <= fdbcb) {
pwmB = map (nowDEC,ddbcb,fdbcb,255,25);
}
break;
}
}
le programme n'est sans doute pas très propre, mais il fonctionne.
c'est tout pour l'instant