Francenanorecif

Bienvenue, Invité
Nom d'utilisateur : Mot de passe : Se souvenir de moi

SUJET : Aide à la programmation Arduino

Aide à la programmation Arduino 27 Avr 2017 20:02 #477416

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.


#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.

P.S. : j'ai lu et relu le tuto ARDUINO by The_ccm bien que superbement fait, mon IDE me marque plein de message d'erreur...
Dernière édition: 27 Avr 2017 20:02 par Ludo32100.
L'administrateur a désactivé l'accès en écriture pour le public.

Aide à la programmation Arduino 27 Avr 2017 20:58 #477417

  • ostrakow
  • Portrait de ostrakow
  • Hors Ligne
  • Membre
  • Messages : 1069
  • Remerciements reçus 14
C'est assez difficile de déboguer du code ...
Tu devrais fournir les messages d'erreur ça aidera.
L'administrateur a désactivé l'accès en écriture pour le public.

Aide à la programmation Arduino 27 Avr 2017 22:32 #477418

Merci de ta réponse.

Voici ce qui est écrit en bas de l'interface arduino :

In file included from C:\Users\Emma\Documents\Arduino\Code_rampe\rampe_2\rampe_2.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);

                       ^

rampe_2:20: error: 'int time' redeclared as different kind of symbol

 int time;

     ^

In file included from C:\Users\Emma\Documents\Arduino\libraries\DS1307RTC/DS1307RTC.h:9:0,

                 from C:\Users\Emma\Documents\Arduino\Code_rampe\rampe_2\rampe_2.ino:3:

c:\users\emma\desktop\arduino\hardware\tools\avr\avr\include\time.h:122:21: note: previous declaration 'time_t time(time_t*)'

     time_t          time(time_t *timer);

                     ^

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

rampe_2: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\rampe_2\rampe_2.ino: In function 'void loop()':

rampe_2: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)

                       ^

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

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

            ^

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

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

            ^

exit status 1
'int time' redeclared as different kind of symbol
L'administrateur a désactivé l'accès en écriture pour le public.

Aide à la programmation Arduino 28 Avr 2017 14:26 #477421

  • pikwix
  • Portrait de pikwix
  • Hors Ligne
  • Membre
  • Messages : 391
  • Remerciements reçus 12
ca ressemble à une librairie qui n'est pas chargé.
"
L'administrateur a désactivé l'accès en écriture pour le public.

Aide à la programmation Arduino 28 Avr 2017 18:48 #477423

pikwix écrit:
ca ressemble à une librairie qui n'est pas chargé.

Oui c'est ce à quoi j'ai pensé, et je me suis rendu compte que je n'avais pas fait #include <Time> mais même en le faisant.... toujours des message d'erreur
J'ai même essayé de compiler l'intégralité du programme du tuto de The_ccm et pareil impossible de compiler sans erreur pourtant je pense que son programme a été testé et retesté....

Le truc c'est que même en incluant des librairies différentes (DS1307RTC,.....) toujours les mêmes messages.... ça me dépasse !

La solution serait peut-être de repartir sur un programme neuf et non pas des bouts piochés à droite et à gauche, mais là c'est une autre paire de manches car je ne suis pas sûr d'y arriver....
Dernière édition: 28 Avr 2017 20:01 par Ludo32100.
L'administrateur a désactivé l'accès en écriture pour le public.

Aide à la programmation Arduino 01 Mai 2017 18:51 #477439

  • ostrakow
  • Portrait de ostrakow
  • Hors Ligne
  • Membre
  • Messages : 1069
  • Remerciements reçus 14
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.
L'administrateur a désactivé l'accès en écriture pour le public.

Aide à la programmation Arduino 02 Mai 2017 22:36 #477451

ostrakow écrit:
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);

}
L'administrateur a désactivé l'accès en écriture pour le public.

Aide à la programmation Arduino 03 Mai 2017 13:13 #477455

  • ostrakow
  • Portrait de ostrakow
  • Hors Ligne
  • Membre
  • Messages : 1069
  • Remerciements reçus 14
Je suis (j’étais) programmeur, mais en elec, je suis nul ...
Désolé !
L'administrateur a désactivé l'accès en écriture pour le public.

Aide à la programmation Arduino 03 Mai 2017 13:26 #477456

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
Hello,

tu as donc 2*10 leds en série, tu dois être autour de 34/36V. Le LDD a un rendement autour de 90% au pire donc 36+10%, 39V. Donc 48V ça passe.
En aucun cas 12V ça ne passe car le ldd n'est pas un driver step-up (élévateur de tension).

Pour le programme tu t'es compliqué on a une super librairie ici qui te refait les courbes du jour en quelques lignes :)

www.francenanorecif.fr/communaute/forum/...e-v1-05?limitstart=0
L'administrateur a désactivé l'accès en écriture pour le public.
Cet utilisateur a été remercié pour son message par: Ludo32100

Aide à la programmation Arduino 03 Mai 2017 19:11 #477459

:woohoo:
Effectivement ça a l'air bien plus simple....la rampe que je fais va être un peu surdimensionné, du coup au zénith elle va être aux alentours de 60%, les réglages vont être plus faciles pour moi qui suis une quiche en programmation .... :laugh:
Si je comprends bien, ce programme est le même que celui de ton tuto mais en beaucoup plus simple. il faut juste rajouter la déclaration de l'écran avec la librairie "liquidCrystal" et les paramètres associés ainsi que la partie void FlushLCD()

Coté alim, j'ai des drivers comme ça que j'ai depuis longtemps, ça peut le faire ou pas ? Où il vaut mieux une alim à découpage ?


L'administrateur a désactivé l'accès en écriture pour le public.

Aide à la programmation Arduino 03 Mai 2017 22:04 #477461

  • the_ccm
  • Portrait de the_ccm
  • Hors Ligne
  • Administrateur Technique
  • Messages : 1197
  • Remerciements reçus 25
oui ça peut le faire, après je suis pas fan de ce genre d'alim niveau sécurité, pas de fusible en entrée, pas de varistance (contre les pics de tension), les composants sont collés entre eux donc risque de chauffe. mais après ça fonctionne :)

pour le prog c'est ça.
L'administrateur a désactivé l'accès en écriture pour le public.

Aide à la programmation Arduino 23 Juil 2017 21:22 #478015

Bonsoir,

Je reviens vers vous concernant ce projet.
J'ai fait un petit montage "Crash Test" sur le même principe pour mon bac à boutures. Coté programme, c'est le même que cité plus haut, basé sur le programme de the_ccm, sauf que je n'ai qu'un seul canal, j'ai donc supprimé tout ce qui se rapporte au canal des led bleues.

Tout fonctionne bien sauf qu'au moment où l'intensité de l'éclairage commence à diminuer, les LED clignotent à un rythme d'environ 1 fois par seconde, puis reprennent un fonctionnement normal en dessous des 10% jusqu'à l'extinction.

Ma question : Se peut-il que mon driver soit trop faiblard et ne délivre pas assez de courant pour faire fonctionner le LDD-1000H ?

En effet j'ai bricolé ça avec un kit que j'avais et je viens de m'apercevoir que le driver ne sort que 600mA, il est prévu pour entre 6 et 12 LED de 3w, ma rampe en compte 9.
Je joins le schéma de câblage ainsi que le programme.

Merci de vos réponses.
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Wire.h>


#define LiquidCrystal_I2c_ADRESS 0x3F
#define DS1307_I2C_ADDRESS 0x68
#define LCD_WIDTH 16
#define LCD_HEIGHT 2

#define ARRAYSTEP 15
#define WHITE_LED 11


char lcdbuf[LCD_WIDTH];
char lcdbufb[LCD_WIDTH];

int DsHour , DsMin , DsSec;

//LiquidCrystal_I2C lcd(0x3F,LCD_WIDTH, LCD_HEIGHT);
LiquidCrystal_I2C lcd(0x3F,LCD_WIDTH, LCD_HEIGHT);

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
  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, 140, 110, 90, 70, 55,  //18 - 19h45
  40, 20,  10,  8,  6 ,  3,  1,   1, //20 - 21h45
  0  , 0 ,   0,   0,   0,    0,   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.init();                      // initialize the lcd 
  lcd.backlight();
  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];
    
  }
  else
  {
    pwmmod = average(&whiteled[t1], &whiteled[t2], sstep);
    
  }


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

  analogWrite(WHITE_LED, pwmmod);
  
  lcdw = pwmmod;
  
}

void GetTimeFromRTC()
{
  DateTime now = rtc.now();

  DsHour = now.hour();
  DsMin = now.minute();
  DsSec = now.second();
}


void FlushLCD()
{
  

  lcd.setCursor(0, 0);

  sprintf(lcdbuf, "%.2d:%.2d:%.2d", DsHour, DsMin, DsSec);
  lcd.print(lcdbuf);

  lcd.setCursor(0, 1);

  // Ex: Blanc : 32%
  sprintf(lcdbuf, "Eclairage : %d%%", lcdw * 100 / 255);
  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);

}

L'administrateur a désactivé l'accès en écriture pour le public.
Modérateurs: unjall, tulottes
Temps de génération de la page : 0.293 secondes

Une bouteille à la mer

billyboyk - 17:19

20 kilos de PV avec du mou, ça tiendra 2 jours dans un bidon brassé/chauffé ;)

billyboyk - 08:22

:D Bonne année à tous !!! xD

habaqouq - 22:06

bonsoir comme insérer une image dans un post merci

delphizorglub - 18:08

Ouaou :p super

babe91800 - 12:18

Bonjour à tous :) petit come back après un moment d'absence

The shoutbox is unavailable to non-members