MTobjets: Exemple 6
Gestion par événements pour UNO, Nano, Mega
Salves, New et Delete
Problème posé
Vu sur un forum:
Je veux sur une sortie avoir sur toutes les sorties d'une Uno (sauf 0 et 1) des slaves de 1 à 5 impulsions positives, de 5ms (plus facile à voir à l'analyseur). Le tout pseudo-aléatoirement.
Le programme va donc créer un objet Slave aléatoire, lancer le fonctionnement, puis le supprimer pour en faire un nouveau.
Programme complet recommandé
Ce programme se fait complètement sous interruption, et libère loop qui peut être utilisé pour faire autre chose.
// Génération de slaves d'impulsion sur les 17 sorties d'une Uno // De 1 à 5 impulsions de 5ms avec un période de 10ms // Donc durée maximale 50ms -> envoi d'une slave toutes les 60ms #include <MTobjects.h> // V1.0.2 Voir http://arduino.dansetrad.fr/MTobjects void setup() { // Ne sert à rien à priori car MTsoftPWM met la broche en sortie. Ce serait fait à la // première impulsion. Mais cette première impulsion se confondrait avec l'entrée en // l'air. Cela pemet aussi d'avoir un démarrage propre pour toutes les sorties for (uint8_t pin = 2; pin < 20; pin++) // Broche entre 2 et 13 ou entre A0=14 et A5=19 { digitalWrite(pin, LOW); // Car les impulsions seront positives pinMode(pin, OUTPUT); } } void loop() { // Démarrer la slave MTsoftPWM *Slave = new MTsoftPWM(2 + random(18), // Broche entre 2 et 13 ou entre A0 et A5 impulsions_de 5000L micro_secondes, periodes_de 10000L micro_secondes, HIGH, // LOW au repos, premier niveau HIGH (1 + random(5)) * 2 niveaux_et_arret); // Une impulsion c'est 2 niveaux. Entre 2 et 10 // Espace entre deux débuts de slaves delay(60 milli_secondes); // Les slaves se produiront pendant cette instruction delete Slave; // Destruction pour en faire d'autres }
Résultat à l'analyseur:

Avec un petit zoom:
