Ardu? No!MTobjectsExemples ≫ Exemple 7

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: