Go Down

Topic: Sujet aquariophile - gestion d'éclairage via ARDUINO (Read 1 time) previous topic - next topic

Ludo32100

Bonjour,

Tout d'abord je tiens à dire que ceci est mon premier montage sur Arduino.

Voilà mon sujet :

Je souhaite contrôler l'allumage et l'extinction progressive de ma rampe led. ((2*10)*3w)

C'est une rampe led diy qui comporte 2 canaux (1 bleu et 1 blanc) tous deux pilotés par des driver Meanwell LDD-1000H pour la fonction "dimmable" contrôlés par les sorties PWM de la carte.

De plus, via un ou deux relais, je souhaite piloter la mise en marche de 3 petits ventilateurs 12V (2 pour la rampe et 1 pour refroidir l'intérieur du boitier électrique)

Coté matériel : (je ne cite pas les alimentations, et les led's)

Arduino Nano
Module DS1307
Module D'affichage LCD 5 V Série IIC/I2C/TWI - 16x2 HD44780
Module relais 2 canaux

Le montage ne me pose aucun souci, c'est plutôt coté programmation que ça commence à piquer !!!

J'ai beaucoup cherché sur le net pour trouver quelque chose de simple et je suis tombé sur ce programme qui pourrait correspondre à ce que je veux faire.


Code: [Select]


#include <LiquidCrystal.h>
#include <Wire.h>
#include <RTClib.h>


/*
Ports utilisés :
Analog Pin 4 = SDA pour ds1307
Analog Pin 5 = SCL pour ds1307
Digital Pin 9 = PWM Blanc
Digital Pin 11 = PWM Bleu
Digital pin 3 = relais pour le ventilo

Pour info :
PWM1 = intensité des blancs
PWM2 = intensité des bleus
relais = état du relais du ventilo des drivers
*/
int pwm1=9;
int pwm2=11;
int time;
int val_up=0;
int val_down=0;
int relais=3;

void setup() {
Serial.begin(9600); //initialise la communication pour le DS1307
analogWrite(pwm1,0); //initialise à 0 les leds blanches
analogWrite(pwm2,0); //initialise à 0 les leds bleues
setSyncProvider(RTC.get); //récupère les données du DS1307
pinMode(relais, OUTPUT); //initialise le port du relais en sortie
digitalWrite(relais, LOW); //le relais est éteint à l'initialisation
}
void loop() {
val_up = (map (minute(), 0, 59, 0, 255)); //permet d'attribuer une valeur d'intensité des leds croissante sur 59 minutes, comprise entre 0 et
255 (valeur maximale du signal PWM)
val_down = (map (minute(), 0, 59, 255, 0)); //permet d'attribuer une valeur d'intensité des leds pcroissante sur 59 minutes, comprise entre
255 et 0 (valeur minimale du signal PWM)
//****************LEDS BLEUES***************************************************
if (hour() == 11) { // entre 11:00:00 et 11:59:59
analogWrite (pwm2, val_up); // allumage progressif sur 59 minutes
}
else if (hour() == 21) { // entre 21:00:00 et 21:59:59
analogWrite (pwm2, val_down); // extinction progressive sur 59 minutes
}
else if ((hour() > 11 ) && (hour() < 21)) { // entre 12:00:00 et 20:59:59
analogWrite(pwm2, 255); // allumage maximum
}
else {
analogWrite(pwm2, 0);//le reste du temps les leds bleues sont éteintes
}
//****************LEDS BLANCHES*************************************************
if (hour() == 12) { //entre 12:00:00 et 12:59:59
analogWrite (pwm1, val_up*0.8); //allumage progressif
}
else if (hour() == 20) { //entre 20:00:00 et 20:59:59
analogWrite (pwm1, val_down*0.8); // extinction progressive
}
else if ((hour() > 12 ) && (hour() < 20)) { //entre 13:00:00 et 19:59:59
analogWrite(pwm1, 255*0.8); //allumage max
}
else {
analogWrite(pwm1, 0);//le reste du temps les leds blanches sont éteintes
}
//****************Ventilateur ********************************************
if (pwm1 > 0) {//Si les leds blanches sont allumées
digitalWrite(relais, HIGH);//relais ventilo ON
}
else {//sinon
digitalWrite(relais, LOW);//relais ventilo OFF
}
if (pwm2 > 0) {//Si les leds bleues sont allumées
digitalWrite(relais, HIGH);//relais ventilo ON
}
else {//sinon
digitalWrite(relais, LOW);//relais ventilo OFF
}



C'est en gros ce que va faire ma rampe mais quand je le copie sur l'interface du logiciel Arduino, des messages d'erreur apparaissent et des lignes sont en surbrillance. (peut-être que le programme date un peu et que certains codes ont changés)
Il manque certainement des choses pour que cela fonctionne correctement.

Etant complètement novice en programmation j'ai l'impression de lire du chinois.

J'espère ne rien avoir oublié pour que vous puissiez me venir en aide.

Je vous remercie d'avance pour votre participation et surtout pour votre patience et indulgence.

Merci.






J-M-L

Bonjour

Quote
C'est en gros ce que va faire ma rampe mais quand je le copie sur l'interface du logiciel Arduino, des messages d'erreur apparaissent et des lignes sont en surbrillance. (peut-être que le programme date un peu et que certains codes ont changés)
Quote
J'espère ne rien avoir oublié pour que vous puissiez me venir en aide.
euh si :) les erreurs sont souvent utiles pour comprendre le problème...

Vous pouvez lire cela, je pense que vous avez du code un peu vieux pour la gestion du temps

Téléchargez la librairie DS1307RTC et installez la et remplacez la ligne #include <RTClib.h> par  #include <DS1307RTC.h>

assurez vous aussi que les commentaires ne passent pas à la ligne et il manque une accolade à la fin du code


le code devient alors cela
Code: [Select]
#include <LiquidCrystal.h>
#include <Wire.h>
#include <DS1307RTC.h>

/*
  Ports utilisés :
  Analog Pin 4 = SDA pour ds1307
  Analog Pin 5 = SCL pour ds1307
  Digital Pin 9 = PWM Blanc
  Digital Pin 11 = PWM Bleu
  Digital pin 3 = relais pour le ventilo

  Pour info :
  PWM1 = intensité des blancs
  PWM2 = intensité des bleus
  relais = état du relais du ventilo des drivers
*/
const byte pwm1 = 9;
const byte pwm2 = 11;
int time;
int val_up = 0;
int val_down = 0;
const byte relais = 3;

void setup() {
  Serial.begin(9600); //initialise la communication pour le DS1307
  analogWrite(pwm1, 0); //initialise à 0 les leds blanches
  analogWrite(pwm2, 0); //initialise à 0 les leds bleues
  setSyncProvider(RTC.get); //récupère les données du DS1307
  pinMode(relais, OUTPUT); //initialise le port du relais en sortie
  digitalWrite(relais, LOW); //le relais est éteint à l'initialisation
}

void loop() {
  val_up = map(minute(), 0, 59, 0, 255); //permet d'attribuer une valeur d'intensité des leds croissante sur 59 minutes, comprise entre 0 et 255 (valeur maximale du signal PWM)
  val_down = map(minute(), 0, 59, 255, 0); //permet d'attribuer une valeur d'intensité des leds pcroissante sur 59 minutes, comprise entre 255 et 0 (valeur minimale du signal PWM)
  //****************LEDS BLEUES***************************************************
  if (hour() == 11) { // entre 11:00:00 et 11:59:59
    analogWrite (pwm2, val_up); // allumage progressif sur 59 minutes
  }
  else if (hour() == 21) { // entre 21:00:00 et 21:59:59
    analogWrite (pwm2, val_down); // extinction progressive sur 59 minutes
  }
  else if ((hour() > 11 ) && (hour() < 21)) { // entre 12:00:00 et 20:59:59
    analogWrite(pwm2, 255); // allumage maximum
  }
  else {
    analogWrite(pwm2, 0);//le reste du temps les leds bleues sont éteintes
  }
  //****************LEDS BLANCHES*************************************************
  if (hour() == 12) { //entre 12:00:00 et 12:59:59
    analogWrite (pwm1, val_up * 0.8); //allumage progressif
  }
  else if (hour() == 20) { //entre 20:00:00 et 20:59:59
    analogWrite (pwm1, val_down * 0.8); // extinction progressive
  }
  else if ((hour() > 12 ) && (hour() < 20)) { //entre 13:00:00 et 19:59:59
    analogWrite(pwm1, 255 * 0.8); //allumage max
  }
  else {
    analogWrite(pwm1, 0);//le reste du temps les leds blanches sont éteintes
  }
  //****************Ventilateur ********************************************
  if (pwm1 > 0) {//Si les leds blanches sont allumées
    digitalWrite(relais, HIGH);//relais ventilo ON
  }
  else {//sinon
    digitalWrite(relais, LOW);//relais ventilo OFF
  }
  if (pwm2 > 0) {//Si les leds bleues sont allumées
    digitalWrite(relais, HIGH);//relais ventilo ON
  }
  else {//sinon
    digitalWrite(relais, LOW);//relais ventilo OFF
  }
}
et ça compile sans erreur pour nano. ensuite je n'ai pas regardé si ça faisait ce que vous souhaitez
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Ludo32100

Bonjour J-M-L

merci beaucoup pour votre réponse, après modification du code et un nouvel essais encore quelque message d'erreur

Code: [Select]
In file included from C:\Users\Emma\Documents\Arduino\Code_rampe\Code_rampe.ino:3:0:

C:\Users\Emma\Documents\Arduino\libraries\DS1307RTC/DS1307RTC.h:19:22: error: 'tmElements_t' has not been declared

     static bool read(tmElements_t &tm);

                      ^

C:\Users\Emma\Documents\Arduino\libraries\DS1307RTC/DS1307RTC.h:20:23: error: 'tmElements_t' has not been declared

     static bool write(tmElements_t &tm);

                       ^

C:\Users\Emma\Documents\Arduino\Code_rampe\Code_rampe.ino: In function 'void setup()':

Code_rampe:29: error: 'setSyncProvider' was not declared in this scope

   setSyncProvider(RTC.get); //récupère les données du DS1307

                          ^

C:\Users\Emma\Documents\Arduino\Code_rampe\Code_rampe.ino: In function 'void loop()':

Code_rampe:35: error: 'minute' was not declared in this scope

   val_up = map(minute(), 0, 59, 0, 255); //permet d'attribuer une valeur d'intensité des leds croissante sur 59 minutes, comprise entre 0 et 255 (valeur maximale du signal PWM)

                       ^

Code_rampe:38: error: 'hour' was not declared in this scope

   if (hour() == 11) { // entre 11:00:00 et 11:59:59

            ^

Code_rampe:51: error: 'hour' was not declared in this scope

   if (hour() == 12) { //entre 12:00:00 et 12:59:59

            ^

exit status 1
'setSyncProvider' was not declared in this scope


J'ai réussi à télécharger la librairie DS1307RTC, j'ai la version Arduino 1.8.1, je pense que les codes utilisés dans le programme que j'ai trouvé sont effectivement caduques peut-être faut-il que je reparte de zéro

J-M-L

en copiant mon code ci dessus ??

chez moi ça compile sans pb. éventuellement installez la dernière version de l'IDE.
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Ludo32100

Oui même en copiant votre code et en installant la dernière version de l'IDE, ça indique des erreurs sur toutes les lignes en relation avec "time"

J-M-L

Changez le nom de cette variable dans votre code
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Ludo32100

#6
Apr 29, 2017, 11:49 am Last Edit: Apr 29, 2017, 12:25 pm by Ludo32100
Bon, j'ai tout repris à la base en copiant le programme d'un très bon tuto sur un autre forum.
Code: [Select]
#include <LiquidCrystal.h>
#include <Wire.h>
#include <RTClib.h>


#define DS1307_I2C_ADDRESS 0x68
#define LCD_WIDTH 20
#define LCD_HEIGHT 4

#define ARRAYSTEP 15
#define WHITE_LED 11

char lcdbuf[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;

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
};

void setup(void)
{

pinMode(WHITE_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;

}



void SetPWMForLed()
{

int indice, sstep, t1, t2,min_cnt,pwmmod ;

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];
    }
  else
  {
     pwmmod = average(&whiteled[t1], &whiteled[t2], sstep);
  }
    

Serial.print("pwmmod:");
Serial.println(pwmmod);

analogWrite(WHITE_LED, pwmmod);

lcdw=pwmmod;

}


// 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 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);


}

void loop(void)
{

GetTimeFromRTC();  

if( (long)( millis() - LastTimer ) >= 0)  
{
SetPWMForLed();
LastTimer+= 60000;
}    

Serial.print("Heure RTC : ");
Serial.println(lcdbuf);

FlushLCD();

delay(900);

}



Ca compile nickel avec prise en charge de l'écran LDC, la mise à l'heure....
Il est fait pour gérer les LED's blanches.

Je souhaite maintenant y insérer la gestion des LED's Bleues sur le même principe.
Si j'ai bien compris le système il me faut donc rajouter
Code: [Select]
#define BLUE_LED 10 // commande des LED's bleues sur la broche 10 par exemple

Ensuite le tableau des % d'éclairage en fonction de l'heure
Code: [Select]
uint8_t DsHour ,DsMin ,DsSec;
  LiquidCrystal lcd(30, 31, 32, 36, 37, 38, 39);
  RTC_DS1307 rtc;
  int lcdw;


  byte blueled[96] = {
  0, 0, 0, 0, 0, 0, 0, 0,  //0 - 1
  0, 0, 0, 0, 0, 0, 0, 0,  //2 - 3
  0, 0, 0, 0, 0, 0, 0, 0,  //4 - 5
  0, 0, 0, 0, 0, 0, 0, 0,  //6 - 7
  1, 16, 32, 55, 80, 110, 140, 255,  //8 - 9
  255, 255, 255, 255, 255, 255, 255, 255,  //10 - 11
  255, 255, 255, 255, 255, 255, 255, 255,  //12 - 13
  255, 255, 255, 255, 255, 255, 255, 255,  //14 - 15
  255, 255, 255, 255, 255, 255, 255, 255,  //16 - 17
  255, 255, 255, 255, 255, 255, 255, 255,  //18 - 19
  110, 90,  70,  55,  40 ,  20,  10,   8, //20 - 21
  6  , 3 ,   3,   1,   1,    1,   0,   0  //22 - 23
  };


Après c'est dans la partie "setup()" que je suis un peu largué et sur l'endroit où insérer la commande pour mes ventilateurs 12V


Ludo32100

#7
Jun 13, 2017, 04:36 pm Last Edit: Jun 13, 2017, 04:43 pm by Ludo32100
Re,

Je dépoussière un peu le sujet afin d'y apporter les dernières modifications.

Voici le code définitif qui compile bien sans erreur :

Code: [Select]

#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal.h>
 
#define DS1307_I2C_ADDRESS 0x68
#define LCD_WIDTH 16
#define LCD_HEIGHT 2
 
#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
  0, 0, 0, 0, 1, 16, 32, 55,  //8 - 9h45
  80, 110, 140, 153, 153, 153, 153, 153,  //10 - 11h45
  153, 153, 153, 153, 153, 153, 153, 153,  //12 - 13h45
  153, 153, 153, 153, 153, 153, 153, 153,  //14 - 15h45
  153, 153, 153, 153, 153, 153, 153, 153,  //16 - 17h45
  153, 153, 153, 153, 153, 153, 153, 140,  //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, 153,  //8 - 9h45
  179, 179, 179, 179, 179, 179, 179, 179,  //10 - 11h45
  179, 179, 179, 179, 179, 179, 179, 179,  //12 - 13h45
  179, 179, 179, 179, 179, 179, 179, 179,  //14 - 15h45
  179, 179, 179, 179, 179, 179, 179, 179,  //16 - 17h45
  179, 179, 179, 179, 179, 179, 153, 140,  //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);
 
}



Par contre mon écran est en I2C donc je souhaite savoir ce qu'il faut modifier dans les programme originale pour qu'il prenne en compte l'I2C de l'écran ?
Est ce qu'en rajoutant simplement la librairie « LiquidCrystal_I2C.h » et en déclarant l'adresse de mon écran (0x3F) ça fonctionnerait ?
Hormis les numéro de pin différent sur le schéma et sur le programme, voyez-vous des erreurs ?
Merci.




J-M-L

regardez les exemples pour LiquidCrystal_I2C.h, globalement c'est similaire à ce que vous avez - faut juste changer la façon d'instancier votre LCD
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Ludo32100

Merci J-M-L, par contre que voulez-vous dire par "la façon d'instancier votre LCD" ?

Désolé si ma question est peut-être un peu stupide.

J-M-L

instancier ça veut dire créer l'objet informatique pointé par la variable lcd qui va représenter votre LCD

Vous avez cela:
LiquidCrystal lcd(30, 31, 32, 26, 27, 22, 23);
...
  lcd.begin(LCD_WIDTH, LCD_HEIGHT, 1);


et il faudra juste faire (avec la bonne adresse)

LiquidCrystal_I2C lcd(0x27, LCD_WIDTH, LCD_HEIGHT);

ensuite les lcd.print() vont fonctionner de la même façon
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Ludo32100

Super !!!!  ;)
Un grand merci, j'y vois un peu plus clair maintenant.
C'est pas évident au début.....mais c'est un petit appareil très intéressant je pense.

Merci beaucoup de votre patience.

Go Up