j ai un soucis avec ma condition qui bascule du if à else alors que la valeur current est dans les bornes:
long current;
long heureN=72000; // 20h
long heureJ=28800; //8 h
loop :
current=((RTC.hour*3600)+(RTC.minute*60)+RTC.second);
if ((heureJ<current) && (current<heureN)) {
...}
else
{....}
je suis passé du int au long, car j avais pas fait gaffe qu il y avait une longueur dans les entiers
est ce qu il faut que je fasses un unsigned long à la place du long ?
Les constantes en long doivent être suffixées avec un L
long current;
long heureN=72000L; // 20h
long heureJ=28800L; //8 h
Pareil pour le reste de ton code je ne connais pas la librairie RTC. Mais je suppose que les variables hour, minute et second associés à l'objet RTC retournent des entiers. il faudrait faire un cast pour que le résultat soit exprimé en long.
Je viens de regarder la lib rtc, et ils retournent tous un unsigned char (uint8_t) sauf year un unsigned int (uint16_t), enfin il ne devrait pas y avoir de problème pas besoin de cast normalement le compilateur a parfaitement compris.
Par contre je sais pas si c'est la même lib mais il ne manquerait pas quelque chose comme des () ?
Je suppose que ce ne sont pas des attributs public ...
Ah be c'est du propre, je vois même pas pourquoi ils s'amusent avec une classe si c'est pour violé une règle de base de la poo, je suppose qu'ils n'ont jamais entendu parlé d'encapsulation, d'accesseur, etc ...
Et ils ont le culot de parlé de convention ...
// # Naming Convention:
// # get... Get information from the DS1307 hardware
// # set... Write information to the DS1307 hardware
La librairie n'est pas en cause. Elle est peut être codée avec les pieds mais le problème pour lequel tu nous questionnes n'est pas là.
As-tu seulement essayé ce que j'ai proposé?
A minima il faut ajouter L à la fin des constantes long. C'est comme ça, c'est les règles de codage du C on ne peut pas déroger! Sinon les constantes sont tronquées à 16 bits. C'est même écrit dans la documentation Arduino Integer Constants - Arduino Reference
Tel que ton code est écrit, les calculs se font sur l'espace des entiers signés soit -32768 à 32767.
Maintenant le cast devant les variables c'était ceinture et bretelles. Dans les opérations s'il y a un opérande en int et un en long le compilateur fait l'opération sur un long. Mais c'est une bonne habitude de le préciser comme ça on sait ce que l'on fait. C'est une bonne pratique.
En effet la lib n'est pas en cause (normalement) là c'était plutôt un coup de gueule perso. ]
Je suppose qu'il a fais le teste et que c'était effectivement ça 'L' parce que sinon je vois pas.
Il aurait fallu donner la valeur constatée de "current", on aurais pu confirmé.
J'y pensais depuis un moment, mais pour le coup j'ai commandé un module RTC. XD