La bibliothèque MTobjects
Gestion par événements pour UNO, Nano, Mega

Téléchargement version 1.0.4

Version 1.0.2 (14/05/2025): Correction pour changement de compilateur, 2 fichiers par objets
Version 1.0.3 (18/05/2025): Correction du bug sur les destructeurs, 2 fichiers seulement
Version 1.0.4 (22/05/2025): Accélérations pour les pas à pas

Sous forme de fichier ZIP: MTobjects.zip

Sous forme de fichiers texte:
        keywords.txt + MTobjects.h + MTobjects.cpp

 

La bibliothèque

MTobjects est une bibliothèque fourre-tout permettant une gestion par événements pour les cartes UNO, Nano, Mega (minipro non testé). Elle permet éventuellement de gérer plusieurs tâches apparemment indépendamment les unes des autres. On peut faire des tas de choses même pendant que le programme principal boucle y compris avec des delay().

La plupart du temps, un programme utilisant les objets de MTobjets n'utilise pas loop. Cela permet de faire tourner facilement un autre programme en même temps qu'il soit bloquant ou pas. De plus la bibliothèque s'initialise toute seule, il n'y a donc pas de MTobjets.begin();. Cela libère le setup.

Elle utilise complètement le timer 0, ce qui libère les autres timers pour d'autres applications. On peut par exemple utiliser la bibliothèque servo qui a besoin des timers 16 bits. Par contre on ne peut pas utiliser analogWrite pour les broches 5 et 6 des Uno/Nano ou 4 et 13 des Mega parce qu'elles utilisent le timer 0.

Les objets disponibles sont:

A voir aussi "Réglage de la bibliothèque" qui peut permettre de travailler au maximum de ses possibilités (par exemple de faire tourner des pas à pas au delà des 10000 micro-pas/s, jusqu'à 41000 micro-pas/s) ou le MTsoftPWM au delà de 5kHz (jusqu'à 31kHz).

Il est peut être possible, de rajouter des objets ou des fonctionnalités à ceux qui existent. Mais pour cela il faut m'en parler. Je peux aussi vous aider à utiliser cette bibliothèque, je suis très souvent sur le forum.

 

Les priorités

MTobjects utilise en gros trois couches de priorités:
- la gestion interne (mémorisation des appuis sur les boutons, avance des moteurs et des servos
- la gestion des événements (toutes les fonctions utilisateur appelées lors des événements)
- le contenu de setup() et de loop()

Que l'on fasse ce que l'on veut, même avec du code bloquant, cela n'empêchera pas les moteurs ou les servos de bouger, les boutons d'être pris en compte.
Un code bloquant dans loop() pourra faire bouger un servo si on appuie sur un bouton ou si une horloge l'active.
Si dans la gestion des événements, on a du code bloquant, cela va bloquer les autres fonctions ainsi que setup() ou loop(), mais n'empêche pas la prise en compte des boutons. Les autres événements seront activés à la fin du code bloquant.

 

Les ressources utilisées

MTobjects utilise complètement le timer 0. Un timer 16 bits et la sortie correspondante est utilisé par MThardPWM, par MTservo et par MTservo4fils.
Deux objets MThardPWM et/ou MT???servo peuvent utiliser deux timers 16 bits différents (seulement sur Mega) ou partager le même timer. Dans ce dernier cas, la fréquence doit être la même!

 

Plan de la documentaion