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: