Pages: [1]   Go Down
Author Topic: [Resolu] IF sur une notion de temps en seconde  (Read 1100 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,

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

Code:
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 ?

« Last Edit: March 17, 2012, 04:23:01 pm by Jean-François » Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3625
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Les constantes en long doivent être suffixées avec un L
Code:
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:
current=(((long)RTC.hour*3600L)+((long)RTC.minute*60L)+(long)RTC.second);
« Last Edit: March 16, 2012, 03:41:26 pm by fdufnews » Logged

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
current=((RTC.hour()*3600)+(RTC.minute()*60)+RTC.second());

Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

« Last Edit: March 16, 2012, 04:53:38 pm by Stef84 » Logged

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
// # Naming Convention:
// # get... Get information from the DS1307 hardware
// # set... Write information to the DS1307 hardware
Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

du coup il y a une solution avec cette librairie ou faut la changer et dans ce cas laquelle prendre pour tourner sur une arduino 2560
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3625
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
du coup il y a une solution avec cette librairie
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 http://arduino.cc/en/Reference/IntegerConstants
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.
« Last Edit: March 17, 2012, 07:34:13 am by fdufnews » Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non j allais le lancer la maj, je me bats depuis ce matin avec mon congélo

ma réponse était par rapport à la réponse d osaka qui apparaissait négative

je tiens au courant
Logged

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En effet la lib n'est pas en cause (normalement) là c'était plutôt un coup de gueule perso.  smiley-twist
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.  smiley-lol
Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

j ai fait toute la modif comme fdufnews l avait conseillé, à priori ça a résolu le problème

merci

ps : comment met on [resolu] dans le titre
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ps : comment met on [resolu] dans le titre

En éditant le premier message..... c'est fait  smiley-wink
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Offline Offline
Full Member
***
Karma: 0
Posts: 111
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci
Logged

Pages: [1]   Go Up
Jump to: