En déclarant temps=micros();
Les variables const unsigned long 10000000000 sont pas calculer ou un peu.
Comment déclarer la variable si beaucoup de chiffres ?
En déclarant temps=micros();
Les variables const unsigned long 10000000000 sont pas calculer ou un peu.
Comment déclarer la variable si beaucoup de chiffres ?
Je ne comprends pas ta question : un unsigned long peut aller jusqu'à plus de 4 milliards
Si tu veux y mettre 1 milliard, ça va rentrer. Quel est ton problème ?
Si tu veux déclarer une constante de 1 milliard, tu peux faire
const unsigned long milliard = 1000000000ul;
En multipliant une variable Tsec=1000000
Tsec×3600=heure;
Ne fonctionne pas si je laisse arduino calculer
En faisant la multiplication à la calculatrice en entrant
3600000000=heure;
Le programme a fonctionner
En enlevant const devant unsigned long.
Es qu il y aura un résultat ?
Es qu on a besoin d inclure une librairie pour les calculs long ?
On peut rajouter Tsec=1000000ul;
C est un calcul us.
Arduino initialise les us et reviens à 0 après un temps de comptage.
Explique ce que tu veux faire. Tu n'es pas obligé de surveiller l'horloge pendant 24 heures, tu peux surveiller 24 fois pendant une heure.
Si tu expliques, ce sera plus facile de t'aider : là je joue aux devinettes...
1000000 est un entier si on ne spécifie pas le contraire. Le compilateur évalue 1000000. Comme il ne tient pas dans un entier, il est tronqué modulo 65536. Puis il met le résultat dans Tsec, ce qui fait que
Tsec=1000000 donne Tsec contient 16960
La multiplication devrait sans doute donner 61 063 200 car une des deux opérandes est UL
Pour avoir les bonnes valeurs il faut faire
Tsec=1000000ul;
et si on n'est pas sûr de son coup faire
heureTsec×3600ul;
ainsi, on est sûr que tout se fait avec des unsigned long
Non, il suffit de rajouter ul devant les constantes
Oui, toutes les 70 minutes environ
Pour un calcul en millis le comptage continue 49,71 jours.
Plus grande valeur stockable dans un unsigned long = 4294967296
Ce sont des millisecondes. Divisé par 1000x3600x24 ça donne 49,71 jours.
Merci.
(unsigned long) variable × 3000ul; fonctionne aussi.
Pourquoi quand je met la variable en unsigned long long pour agrandir la variable et 1000 000ullx3600ullx24ull=86 400 000 000 pour 24h.
Arduino reset toujours à 70mn.
Es qu il y a une variable à définir ?
Merci.
Tout simplement parce que la variable interne utilisée par la fonction micros() est déclarée comme ceci :
unsigned long m;
https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c
La fonction unsigned long long n est pas encore intégrer mais a été compiler sans erreur.
Es que arduino peut intégrer la fonction unsigned long long avec son hardware ?
Si tu dois mesurer des durées de plus de 70mn, es tu sur que le résolution de 1µs est nécessaire?
Tu devrais plutôt utiliser millis()
On compte 1001666 us soit 1001ms pour 1 seconde, il manque 666 us, rectification car la seconde de arduino nano avance.
Je ne comprend pas ton calcul. La différence est de 666µs et non 1666µs.
De plus dans l'exemple que tu cites le temps mesuré est de l'ordre de 1s, très loin des 70mn que tu évoques au post #8
1000ms+1.666ms=1001.666 ms mais mettre une virgule n est pas exacte.
Il manque 666us
1000ms pour 1seconde
1001666us pour 1seconde exacte.
Dépassement de capacité en us à 70mn.
c++ - uint64 UTC time - Stack Overflow.
Arduino ne peut pas compter plus que 70mn en us
C'était pour compter en us sur 24h mais limiter à 70mn.
J'ai pas trop compris ce que tu voulés mais peut être caster en double serait une solution
unsigned long time;
double tmp;
time = micros();
tmp = static_cast<double>(time);
Ce n'est pas faute de répéter ![]()
Petit rappel : avec le réglage des timers fait par Arduino (voir le fichier init() ) le pas de mesure de la fonction micro n'est pas de 1 µs, mais de 4 µs, tout du moins avec la génération des microcontrôleurs 8 bits avr, les microcontrôleurs 32 bits comptent probablement avec un pas de 1µ sauf si par souci d'homogénéité Arduino les a dégradés.
Effectivement, mais là tu rentres dans le détail.
Personne n'a encore compris ce que @arduino322 voulait faire , alors que la résolution soit 1µs ou 4µs, ça ne change pas grand chose.
On peut utiliser millis() pour compter sur 49jours.
Si on arrêtait de jouer aux devinettes.
Qu'est-ce que tu veux faire?
Quel est ton besoin exact?
Et pitié développe un peu au lieu de jeter des phrases isolées.
Au passage, titiller la µs sur des temps relativement long avec une source d'horloge non calibrée n'a pas beaucoup de sens.