bon .. je le met quand même.. lol.. honte a moi .. :p
/******************************* Programme Arduino ******************************/
/***************************** par Teal'couné - 2011 ****************************/
/********************************** Version 3.0 *********************************/
/**************************** Que fait ce programme ? ***************************/
/* Gestion d'allumage 4 ranger de luminaire d'aquarium
reglage d'instensité de lumiere toute les 30min avec variation entre
chaque changement */
/********************** Inclusion des librairies utilisées **********************/
#include <Wire.h>
#include <DS1307new.h>
#include <EEPROM.h>
/************************** Déclaration des constantes **************************/
const int LED1=6;
const int LED2=9;
const int LED3=10;
const int LED4=11;
const int debRampe[4] = {0, 48, 96, 144};
/************************** Déclaration des variables ***************************/
/* tableau de lumiere */
int rampe1[24][2];
int rampe2[24][2];
int rampe3[24][2];
int rampe4[24][2];
/* variable entrer mode test */
boolean test = false;
int testR1 = 0;
int testR2 = 0;
int testR3 = 0;
int testR4 = 0;
/* variable de reception */
/*
data de la fonction test
data[0] = 0
data[1] = 0 off - 1 on
data[2-4] = rampe 1 exemple : 050 = 50%
data[5-7] = rampe 2
data[8-10] = rampe 3
data[11-13] = rampe 4
*/
/*
data pour les rampe
data[0] = 1
data[1] = 0 get - 1 set
data[2] = 0 : rampe1 - 1 : rampe 2 - 2 : rampe 3 - 3 : rampe 4
data[3-5] = valeur pour 00h00
data[6-8] = valeur pour 00h30
data[9-11] = valeur pour 01h00
data[12-14] = valeur pour 01h30
etc..
*/
/*
data pour set heure
data[0] = 2
data[1] = 0 get - 1 set
data[2-3] = heure exemple 17
data[4-5] = minute exemple 45
*/
int iData = 0;
boolean finTram = false;
int data[147];
/* Autre variable */
int oldMinute = 0;
/**************************** Programme ****************************/
void setup(void) {
Serial.begin(115200);
pinMode(LED1, OUTPUT); //met la broche en entree
pinMode(LED2, OUTPUT); //met la broche en entree
pinMode(LED3, OUTPUT); //met la broche en entree
pinMode(LED4, OUTPUT); //met la broche en entree
initRampe();
RTC.getTime();
oldMinute = RTC.minute;
ligneRampe(1);
ligneRampe(2);
ligneRampe(3);
ligneRampe(4);
}
void loop(void) {
RTC.getTime();
if(test == true) {
int value = 0;
value = ((255*testR1)/100);
analogWrite(LED1, value);
value = ((255*testR2)/100);
analogWrite(LED2, value);
value = ((255*testR3)/100);
analogWrite(LED3, value);
value = ((255*testR4)/100);
analogWrite(LED4, value);
} else {
if(RTC.minute != oldMinute) {
ligneRampe(1);
ligneRampe(2);
ligneRampe(3);
ligneRampe(4);
oldMinute = RTC.minute;
}
}
}
void ligneRampe(int nbRampe) {
int h = RTC.hour;
int m = RTC.minute;
int val1 = 0;
int val2 = 0;
int baseMinute;
int inter = 0;
int sortie = 0;
float valeur = 0;
int value = 0;
boolean sup = false;
if(m < 30) {
if(nbRampe == 1) {
val1 = rampe1[h][0];
val2 = rampe1[h][1];
}
if(nbRampe == 2) {
val1 = rampe2[h][0];
val2 = rampe2[h][1];
}
if(nbRampe == 3) {
val1 = rampe3[h][0];
val2 = rampe3[h][1];
}
if(nbRampe == 4) {
val1 = rampe4[h][0];
val2 = rampe4[h][1];
}
baseMinute = 0;
} else if(m >=30) {
if(nbRampe == 1) {
val1 = rampe1[h][1];
if(h==23) val2 = rampe1[0][0];
else val2 = rampe1[h+1][0];
}
if(nbRampe == 2) {
val1 = rampe2[h][1];
if(h==23) val2 = rampe2[0][0];
else val2 = rampe2[h+1][0];
}
if(nbRampe == 3) {
val1 = rampe3[h][1];
if(h==23) val2 = rampe3[0][0];
else val2 = rampe3[h+1][0];
}
if(nbRampe == 4) {
val1 = rampe4[h][1];
if(h==23) val2 = rampe4[0][0];
else val2 = rampe4[h+1][0];
}
baseMinute = 1;
}
if(val1 != val2) {
if(val1 < val2) inter = val2 - val1;
else if(val1 > val2) {
inter = val1 - val2;
sup = true;
}
valeur = float(inter)/float(30);
int time = (baseMinute==0)?0:30;
sortie = valeur * (m-time);
int u = 0;
if(nbRampe == 1) u = rampe1[h][baseMinute];
if(nbRampe == 2) u = rampe2[h][baseMinute];
if(nbRampe == 3) u = rampe3[h][baseMinute];
if(nbRampe == 4) u = rampe4[h][baseMinute];
if(sup) value = ((255*(u-sortie))/100);
else value = ((255*(u+sortie))/100);
if(nbRampe == 1) analogWrite(LED1, value);
if(nbRampe == 2) analogWrite(LED2, value);
if(nbRampe == 3) analogWrite(LED3, value);
if(nbRampe == 4) analogWrite(LED4, value);
} else {
value = (255*val1)/100;
if(nbRampe == 1) analogWrite(LED1, value);
if(nbRampe == 2) analogWrite(LED2, value);
if(nbRampe == 3) analogWrite(LED3, value);
if(nbRampe == 4) analogWrite(LED4, value);
}
}
void initRampe() {
int u = 0;
int i = 0;
int y = 0;
for(int b = 0; b <= 3; b++) {
y = debRampe[b] + 48;
for(int x = debRampe[b]; x <= y; x++) {
if(b == 0) rampe1[i][u] = (EEPROM.read(x) == 255) ? 0 : EEPROM.read(x);
if(b == 1) rampe2[i][u] = (EEPROM.read(x) == 255) ? 0 : EEPROM.read(x);
if(b == 2) rampe3[i][u] = (EEPROM.read(x) == 255) ? 0 : EEPROM.read(x);
if(b == 3) rampe4[i][u] = (EEPROM.read(x) == 255) ? 0 : EEPROM.read(x);
if(u == 1) {
u = 0;
i++;
}
else u = 1;
}
u = 0;
i = 0;
}
}
void serialEvent() {
while(Serial.available()) {
char serialRead = Serial.read();
if(serialRead != '|') {
data[iData] = (int)serialRead-48;
iData++;
} else {
finTram = true;
}
}
if(finTram) {
switch (data[0]) {
case 0:
teste();
break;
case 1:
if(data[1] == 1) setRampe();
if(data[1] == 0) getRampe();
break;
case 2:
if(data[1] == 1) setHeure();
if(data[1] == 0) getHeure();
break;
}
iData=0;
finTram = false;
}
}
void teste() {
if(data[1] == 1) {
test = true;
if(data[2] == 1) testR1 = 100;
else testR1 = data[3]*10 + data[4];
if(data[5] == 1) testR2 = 100;
else testR2 = data[6]*10 + data[7];
if(data[8] == 1) testR3 = 100;
else testR3 = data[9]*10 + data[10];
if(data[11] == 1) testR4 = 100;
else testR4 = data[12]*10 + data[13];
} else if(data[1] == 0) {
ligneRampe(1);
ligneRampe(2);
ligneRampe(3);
ligneRampe(4);
test = false;
}
}
void setRampe() {
int y;
int h = 0;
int m = 0;
y = debRampe[data[2]];
for(int i = 3; i <= 146; i++) {
int val;
if(data[i] == 1) val = 100;
else val = data[i+1]*10 + data[i+2];
i += 2;
EEPROM.write(y, val);
y++;
if(data[2] == 0) {
rampe1[h][m] = val;
}
if(data[2] == 1) rampe2[h][m] = val;
if(data[2] == 2) rampe3[h][m] = val;
if(data[2] == 3) rampe4[h][m] = val;
if(m == 1) {
m = 0;
h++;
} else m = 1;
}
ligneRampe(data[2]+1);
}
void getRampe() {
int val;
Serial.print("1");
Serial.print(data[2]);
for(int i = 0; i <= 23; i++) {
if(data[2] == 1) val = rampe1[i][0];
if(data[2] == 2) val = rampe2[i][0];
if(data[2] == 3) val = rampe3[i][0];
if(data[2] == 4) val = rampe4[i][0];
if(val < 100) Serial.print("0");
if(val < 10) Serial.print("0");
Serial.print(val);
if(data[2] == 1) val = rampe1[i][1];
if(data[2] == 2) val = rampe2[i][1];
if(data[2] == 3) val = rampe3[i][1];
if(data[2] == 4) val = rampe4[i][1];
if(val < 100) Serial.print("0");
if(val < 10) Serial.print("0");
Serial.print(val);
}
Serial.print("|");
}
void setHeure() {
int h = (data[2]*10 + data[3]);
int m = (data[4]*10 + data[5]);
RTC.stopClock();
RTC.fillByHMS(h,m,0);
RTC.setTime();
RTC.startClock();
RTC.getTime();
}
void getHeure() {
int minutes = RTC.minute;
int heures = RTC.hour;
String mess = "0";
if(heures < 10) mess += "0";
mess += (String) heures;
if(minutes < 10) mess += "0";
mess += (String) minutes;
mess += "|";
Serial.print(mess);
}