De retour après un long weekend a la campagne sans internet.
Pas mieux, je dirai qu'il te manque des #include.
Concernant le DS1307, j'avais remarque que les librairies étaient différentes d'un vendeur a l'autre.
C'était tout à fait ça.....une librairie caduque et des fragments de programme manquants alié à une IDE de l'arduino dépassée.....bref c'était la m......
J'ai donc tous repris à la base avec un autre programme que j'ai trouvé dans le super tuto de The_ccm
Avec l'aide de membres de plusieurs forum il est maintenant adapté à mes besoins (rajout de la gestion des LED's bleues)
Reste maintenant à y rajouter la gestion des 3 ventilateurs 12v via un relais arduino (ou pas ???) et ça sera nickel.
J'ai une question subsidiaire qui n'a rien à voir avec le programme mais peut-être que tu vas pouvoir me renseigner....
C'est concernant l'alimentation de tout ça (2 canaux de 10 LED's 3w - 3.2-3.4v- 750mAh dimmées en PWM par des LDD-1000H) certains conseillent des alim de 48v d'autres disent qu'avec 12v ça passe crème.....du coup c'est le flou ! je gratte toutes les infos pour faire au mieux c'est ma première rampe diy.
#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#define DS1307_I2C_ADDRESS 0x68
#define LCD_WIDTH 20
#define LCD_HEIGHT 4
#define ARRAYSTEP 15
#define WHITE_LED 11
#define BLUE_LED 10
char lcdbuf[LCD_WIDTH];
char lcdbufb[LCD_WIDTH];
int DsHour , DsMin , DsSec;
//LiquidCrystal lcd(30, 31, 32, 36, 37, 38, 39);
LiquidCrystal lcd(30, 31, 32, 26, 27, 22, 23);
RTC_DS1307 rtc;
int lcdw, lcdwb;
static unsigned long LastTimer ;
byte whiteled[96] = {
0, 0, 0, 0, 0, 0, 0, 0, //0 - 1h45
0, 0, 0, 0, 0, 0, 0, 0, //2 - 3h45
0, 0, 0, 0, 0, 0, 0, 0, //4 - 5h45
0, 0, 0, 0, 0, 0, 0, 0, //6 - 7h45
1, 16, 32, 55, 80, 110, 140, 255, //8 - 9h45
255, 255, 255, 255, 255, 255, 255, 255, //10 - 11h45
255, 255, 255, 255, 255, 255, 255, 255, //12 - 13h45
255, 255, 255, 255, 255, 255, 255, 255, //14 - 15h45
255, 255, 255, 255, 255, 255, 255, 255, //16 - 17h45
255, 255, 255, 255, 255, 255, 255, 255, //18 - 19h45
110, 90, 70, 55, 40 , 20, 10, 8, //20 - 21h45
6 , 3 , 3, 1, 1, 1, 0, 0 //22 - 23h45
};
byte blueled[96] = {
0, 0, 0, 0, 0, 0, 0, 0, //0 - 1h45
0, 0, 0, 0, 0, 0, 0, 0, //2 - 3h45
0, 0, 0, 0, 0, 0, 0, 0, //4 - 5h45
0, 0, 0, 0, 0, 0, 0, 0, //6 - 7h45
1, 16, 32, 55, 80, 110, 140, 255, //8 - 9h45
255, 255, 255, 255, 255, 255, 255, 255, //10 - 11h45
255, 255, 255, 255, 255, 255, 255, 255, //12 - 13h45
255, 255, 255, 255, 255, 255, 255, 255, //14 - 15h45
255, 255, 255, 255, 255, 255, 255, 255, //16 - 17h45
255, 255, 255, 255, 255, 255, 255, 255, //18 - 19h45
110, 90, 70, 55, 40 , 20, 10, 8, //20 - 21h45
6 , 3 , 3, 1, 1, 1, 0, 0 //22 - 23h45
};
void setup(void)
{
pinMode(WHITE_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
Serial.begin(9600);
Serial.println("Entrée dans Setup()");
Wire.begin();
rtc.begin();
lcd.begin(LCD_WIDTH, LCD_HEIGHT, 1);
if (! rtc.isrunning()) {
Serial.println("Module RTC non initialisé !");
//Si le DS1307 ne tourne pas (changement de pile et pas d'alim, montage tout neuf, on le règle avec la date/l'heure de la compilation
rtc.adjust(DateTime(__DATE__, __TIME__));
}
lcd.clear();
LastTimer = 0;
}
// renvoie la valeur intermédiaire
byte average( byte *pt1, byte *pt2, int lstep)
{
byte result;
float fresult;
// Les 2 valeurs des indices sont égales donc on ne change rien
if (*pt1 == *pt2) {
result = *pt1; // Pas de changement
}
// Cas 1 on augmente la luminosité
else if (*pt1 < *pt2)
// Calcul de la valeur intermédiaire (cf Tuto)
{ fresult = ((float(*pt2 - *pt1) / 15.0) * float(lstep)) + float(*pt1);
result = byte(fresult);
}
else
// Cas 2 on diminue la luminosité
{
fresult = -((float(*pt1 - *pt2) / 15.0) * float(lstep)) + float(*pt1);
result = byte(fresult);
}
return result;
}
void SetPWMForLed()
{
int indice, sstep, t1, t2, min_cnt, pwmmod, pwmmodb;
Serial.println("Entrée SetPWMForLed");
min_cnt = (DsHour * 60) + DsMin;
// on calcule l'indice ((heure * 60) + minute) divisé par le pas du tableau
indice = min_cnt / ARRAYSTEP;
// Fonction modulo qui donne la partie décimale du calcul ci dessus (donc valeur entre 0 et le pas soit entre 0 et 15) .
sstep = min_cnt % ARRAYSTEP;
t1 = indice;
// cas où l'indice est le dernier du tableau, le suivant est donc le premier !
if (t1 == 95) {
t2 = 0;
}
// sinon indice suivant
else {
t2 = t1 + 1;
}
// on est tombé sur un indice entier (multiple de 1/4h), donc on envoie directement la valeur
if (sstep == 0)
{
pwmmod = whiteled[t1];
pwmmodb = blueled[t1];
}
else
{
pwmmod = average(&whiteled[t1], &whiteled[t2], sstep);
pwmmodb = average(&blueled[t1], &blueled[t2], sstep);
}
Serial.print("pwmmod:");
Serial.println(pwmmod);
Serial.print("pwmmodb:");
Serial.println(pwmmodb);
analogWrite(WHITE_LED, pwmmod);
analogWrite(BLUE_LED, pwmmodb);
lcdw = pwmmod;
lcdwb = pwmmodb;
}
void GetTimeFromRTC()
{
DateTime now = rtc.now();
DsHour = now.hour();
DsMin = now.minute();
DsSec = now.second();
}
void FlushLCD()
{
lcd.setCursor(0, 1);
// Ex: Blanc : 32%
sprintf(lcdbuf, "Blanc : %d%%", lcdw * 100 / 255);
lcd.print(lcdbuf);
lcd.setCursor(0, 0);
sprintf(lcdbuf, "%.2d:%.2d:%.2d", DsHour, DsMin, DsSec);
lcd.print(lcdbuf);
// BLEU
sprintf(lcdbufb, "Bleu : %d%%", lcdwb * 100 / 255);
lcd.print(lcdbufb);
lcd.setCursor(1, 0);
sprintf(lcdbufb, "%.2d:%.2d:%.2d", DsHour, DsMin, DsSec);
lcd.print(lcdbufb);
}
void loop(void)
{
GetTimeFromRTC();
if ( (long)( millis() - LastTimer ) >= 0)
{
SetPWMForLed();
LastTimer += 60000;
}
Serial.print("Heure RTC : ");
Serial.println(lcdbuf);
Serial.println(lcdbufb);
FlushLCD();
delay(900);
}