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:
- MTclock: appelle régulièrement une action utilisateur, par exemple pour affichage ou test régulier d'une valeur, pour l'envoi de N impulsions pour faire avancer un pas à pas d'un tour, pour retarder une action, ou déclenche une action au bout d'un certain temps (temporisateur)...
- MTdoubleClock: appelle alternativement deux actions utilisateur, par exemple pour l'allumage et extinction d'un ventilateur, pour faire tourner un servo une fois dans un sens, une fois dans l'autre
- MTbutton: gère un bouton usuel, en s'occupant des rebonds. Il appelle une fonction utilisateur à chaque appui. Il est utilisable même pendant un delay().
- MTcheckButton: transforme un poussoir réel en bouton genre va et vient, un appui allume, un appui éteint.
- MTradioButton: transforme un groupe de poussoirs réels en clavier genre vitesse d'une hotte: un appui sur l'un d'eux désactive ceux du groupe.
- MTsoftPWM: fait du PWM logiciellement, sur toutes les broches, mais lentement (pas plus de 50kHz). C'est bien pour faire clignoter une led, mettre en cycle marche/arrêt un moteur. Si on veut aller vite sans consommer des ressources, on choisira plutôt analogWrite() ou MThardPMW.
- MThardPWM: comme analogWrite(), mais en choisissant mieux sa fréquence
- MTservo: gestion de servo avec les timers 16 bits (peu de ressources consommées). Pour une gestion soft, il y a la bibliothèque servo.
- MTservo4fils: pareil mais avec un fil supplémentaire qui permet de ne pas bouger à l'initialisation.
- MTulnStepper: gestion de moteurs pas à pas pilotés comme avec un ULN2003. 10000 pas/s maxi par défaut.
- MTstepStepper: gestion de moteurs pas à pas pilotés avec un driver utilisant Step et Dir. 10000 pas/s maxi par défaut.
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
- Présentation
- Téléchargement
- Conventions
- Les boutons
- Les horloges
- Les PWM
- Les servos
- Les moteurs pas à pas
- Réglage de la bilbliothèque
- Exemples du forum