Savoir déclencher une ou plusieurs temporisations non bloquantes
Savoir utiliser la nouvelle fonction quickDelay()
Etc.
Importance
Une temporisation non bloquante est très importante dans la commande des systèmes, la surveillance des défauts, le contrôle commande, etc. Elle est particulièrement intéressante pour la synthèse des actions temporisées, gestion du temps sans blocage de la boucle loop(). Contrairement aux fonctions delay() et delayMicroseconds() qui bloquent le déroulement du programme, la nouvelle fonction quickDelay() déclenche une ou plusieurs temporisations avec une exécution rapide de la boucle principale.
void quickDelay(unsigned long TimerX[][4],bool TimerCtrl[][3], byte NumTimer)
la fonction prend en entrée deux tableaux 2D (TimerX & TimerCtrl). Le premier tableau TimerX de taille Nx4 est dédié aux paramètres temporelles de la temporisation, le tableaux TimerCtrl de taille Nx3 pour les variables de contrôles. N étant le nombre de temporisations noté NumTimer. Ci-dessous la signification des champs des tableaux :
TimerX[X][0] : La durée du tempo en µS, à définir dans la fonction setup()
TimerX[X][1] : Le temps du début du tempo (variable interne à la fonction)
TimerX[X][2] : Le temps de la fin du tempo (variable interne à la fonction)
TimerX[X][3] : La valeur du tempo (incrémentation de 0 à TimerX[X][0] )
L’ensemble des paramètres du tableau TimerX sont accessibles en lecture à l’extérieure de la fonction. On peut à tout moment lire la valeur du tempo (TimerX[X][0] ), le temps du start/stop, etc.
unsigned long Time_us =TimerX[NumTimer][0];
unsigned long t_start =TimerX[NumTimer][1];
unsigned long t_stop =TimerX[NumTimer][2];
unsigned long t_val =TimerX[NumTimer][3];
TimerCtrl[X][0] : Activation/désactivation du tempo (true/false)
TimerCtrl[X][1] : Indicateur du lancement du tempo
TimerCtrl[X][2] : Signal d’expiration du tempo (Overflow). Ce paramètre est fondamental pour savoir quand ce qu’une temporisation est expirée. Le signal Overflow dure une itération de la boucle principale. Vous pouvez par exemple déclencher une action dès l’expiration du tempo, etc.
Voir le tuto pour plus de détails
bool TimerEN =TimerCtrl[NumTimer][0];
bool TimerIsStart =TimerCtrl[NumTimer][1];
bool TimerState =TimerCtrl[NumTimer][2];
L’ensemble des paramètres du tableau TimerCtrl sont accessibles en lecture à l’extérieure de la fonction.
unsigned long Time_us =TimerX[NumTimer][0];
unsigned long t_start =TimerX[NumTimer][1];
unsigned long t_stop =TimerX[NumTimer][2];
unsigned long t_val =TimerX[NumTimer][3];
Déclaration
void quickDelay(unsigned long TimerX[][4],bool TimerCtrl[][3], byte NumTimer) { unsigned long Time_us =TimerX[NumTimer][0]; unsigned long t_start =TimerX[NumTimer][1]; unsigned long t_stop =TimerX[NumTimer][2]; unsigned long t_val =TimerX[NumTimer][3];
t_start=0; t_stop=0; TimerIsStart=false; TimerState=false; t_val=0; } // Mise à jour des valeurs du Timer TimerX[NumTimer][0]=Time_us; TimerX[NumTimer][1]=t_start; TimerX[NumTimer][2]=t_stop; TimerX[NumTimer][3]=t_val;
void quickDelay(unsigned long TimerX[][4],bool TimerCtrl[][3], byte NumTimer) { unsigned long Time_us =TimerX[NumTimer][0]; unsigned long t_start =TimerX[NumTimer][1]; unsigned long t_stop =TimerX[NumTimer][2]; unsigned long t_val =TimerX[NumTimer][3];
t_start=0; t_stop=0; TimerIsStart=false; TimerState=false; t_val=0; } // Mise à jour des valeurs du Timer TimerX[NumTimer][0]=Time_us; TimerX[NumTimer][1]=t_start; TimerX[NumTimer][2]=t_stop; TimerX[NumTimer][3]=t_val;
Vous pouvez remplacer la fonction micros() avec millis() afin d’augmenter la durée maximale du tempo. En utilisant la fonction millis(), la durée passe du 71 minutes au 49.7 Jours!
Nous utilisons des technologies telles que les cookies pour stocker et/ou accéder aux informations relatives aux appareils. Nous le faisons pour améliorer l’expérience de navigation et pour afficher des publicités (non-)personnalisées. Consentir à ces technologies nous autorisera à traiter des données telles que le comportement de navigation ou les ID uniques sur ce site. Le fait de ne pas consentir ou de retirer son consentement peut avoir un effet négatif sur certaines fonctonnalités et caractéristiques.
Fonctionnel
Toujours activé
Le stockage ou l’accès technique est strictement nécessaire dans la finalité d’intérêt légitime de permettre l’utilisation d’un service spécifique explicitement demandé par l’abonné ou l’utilisateur, ou dans le seul but d’effectuer la transmission d’une communication sur un réseau de communications électroniques.
Préférences
L’accès ou le stockage technique est nécessaire dans la finalité d’intérêt légitime de stocker des préférences qui ne sont pas demandées par l’abonné ou l’internaute.
Statistiques
Le stockage ou l’accès technique qui est utilisé exclusivement à des fins statistiques.Le stockage ou l’accès technique qui est utilisé exclusivement dans des finalités statistiques anonymes. En l’absence d’une assignation à comparaître, d’une conformité volontaire de la part de votre fournisseur d’accès à internet ou d’enregistrements supplémentaires provenant d’une tierce partie, les informations stockées ou extraites à cette seule fin ne peuvent généralement pas être utilisées pour vous identifier.
Marketing
Le stockage ou l’accès technique est nécessaire pour créer des profils d’utilisateurs afin d’envoyer des publicités, ou pour suivre l’utilisateur sur un site web ou sur plusieurs sites web ayant des finalités marketing similaires.