La division et le modulo ont même priorité donc on applique de la gauche vers la droite.
Division d'abord, puis modulo.
Une période de scrutation sur 2 la condition est vrai.
C'est indispensable car sinon elle sera réinitialisée à chaque entrée dans la loop.
Soit tu la déclares static soit tu la définis en global (en dehors d'une fonction).
Si elle est utilisée dans une seule fonction c'est mieux de la définir en static à l'intérieur de la fonction.
Si elle est utilisée dans plusieurs fonctions, il faut la définir en global.
oui l'idéal est de limiter la portée de la variable à la zone du programme où elle est pertinente. Souvent je mets ce qui doit se produire de temps en temps carrément dans une fonction à part avec sa variable statique. Comme ça la loop() n'a qu'à faire appel à cette fonction et on ne se prend pas la tête en lisant le code
Notez que je mets aussi souvent un paramètre optionnel qui permet de forcer l'exécution, ça peut permettre par exemple de garantir le rafraîchissement d'un affichage ou d'initialiser le chrono si vous lancez ce truc régulier tard dans le code.
Enfin, l'approche chrono += deltaT; au lieu de chrono = millis(); permet de re-synchroniser des retards si de temps en temps la loop() prend plus de deltaT ou que la fonction elle même prend longtemps à exécuter et que vous voulez vraiment que les ticks de déclenchements soient calés sur deltaT
Dernière question juste pour être sur. static unsigned long chrono = 0;
avec le mot static la variable chrono est initialisé à 0 seulement la première fois que cette fonction est appelé?
savoriano:
Dernière question juste pour être sur. static unsigned long chrono = 0;
avec le mot static la variable chrono est initialisé à 0 seulement la première fois que cette fonction est appelé?
oui, les variables locales statiques sont initialisées lors du premier passage dans le bloc qui englobe leur déclaration, sauf si l'initialization est à zéro ou une constante, auquel cas ça peut être traité globalement par le compilateur et la spécification précise que cette initialisation peut se passer avant l'entrée dans le bloc.
Et si vous vous posez la question, dans la signature de la fonction void faireQuelqueChoseDeTempsEnTemps(bool forceExecution = false)l'initialisation à false ne se fait que si vous appelez la fonction sans paramètre. si vous passez true ou false directement , c'est cette valeur que la variable forceExecution prendra.