Go Down

Topic: [Resolu] IF sur une notion de temps en seconde (Read 1 time) previous topic - next topic

Stef84

Mar 16, 2012, 07:47 pm Last Edit: Mar 17, 2012, 10:23 pm by Jean-François Reason: 1
Bonsoir,

j ai un soucis avec ma condition qui bascule du if à else  alors que la valeur current est dans les bornes:

Code: [Select]
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 ?


fdufnews

#1
Mar 16, 2012, 09:35 pm Last Edit: Mar 16, 2012, 09:41 pm by fdufnews Reason: 1
Les constantes en long doivent être suffixées avec un L
Code: [Select]
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.
Code: [Select]
current=(((long)RTC.hour*3600L)+((long)RTC.minute*60L)+(long)RTC.second);

osaka

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

Code: [Select]
current=((RTC.hour()*3600)+(RTC.minute()*60)+RTC.second());


Stef84

#3
Mar 16, 2012, 10:42 pm Last Edit: Mar 16, 2012, 10:53 pm by Stef84 Reason: 1
oups j ai oublié la librairie c est la ds1307new. avant dernière version, la dernière étant pour l arduino1.0 (je suis actuellement en 23)

je vais jeté un coup d oeil sur vos remarques par rapport à la lib

alors dans le h

    uint8_t second;
    uint8_t minute;
    uint8_t hour;
    uint8_t dow;         // day of week, 0 = sunday
    uint8_t day;
    uint8_t month;

si je rajoute les (), j ai une erreur en vérification


osaka

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 ...
Code: [Select]

// # Naming Convention:
// # get... Get information from the DS1307 hardware
// # set... Write information to the DS1307 hardware

Go Up