MTobjets: Exemple 7
Gestion par événements pour UNO, Nano, Mega
Salves, New et Delete
Problème posé
Vu sur un forum:
Je veux avoir sur toutes les sorties d'une Uno (sauf 0 et 1) des salves 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 Salve 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 salves 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 salve toutes les 60ms #include <MTobjects.h> // V1.0.6 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 salve MTsoftPWM *Salve = 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 salves delay(60 milli_secondes); // Les salves se produiront pendant cette instruction delete Salve; // Destruction pour en faire d'autres }
Résultat à l'analyseur:

Avec un petit zoom:
