MTobjets: Example 7
Event management for Uno, Nano, Mega

Bursts New and Delete

Problem posed

See on a forum:

I want to have on all pins of a UNO (except 0 and 1) bursts from 1 to 5 positive inpulse, from 5ms (easier to see the analyzer). All pseudo-alternatingly.

The program will therefore create a random Burst object, launch the function, then delete it to make a new one.

Complete program recommended

This program is completely under interruption, and releases loop which can be used to do something else.

// Generation of bursts on the 17 pins of a Uno
// from 1 to 5 inpulse of 5ms with a period of 10ms
// So maximum duration 50ms -> Shipping of a burst every 60ms

#include <MTobjects.h> // V1.0.6 See http://arduino.dansetrad.fr/en/MTobjects

void setup()
{
  // Is not usefull because MTsoftPWM puts the pin in OUTPUT. It would be done at  
 // first inpulse. But this first inpulse_width would merge with the input in the begining 
 // It also can have a clean start for all output
  for (uint8_t pin = 2; pin < 20; pin++) // Pin between 2 and 13 or between A0=14 and A5=19
  {
    digitalWrite(pin, LOW); // Because the inpulses will be positive
    pinMode(pin, OUTPUT);
  }
}

void loop()
{
  // Start the burst
  MTsoftPWM *Burst = new MTsoftPWM(2 + random(18), // Pin between 2 and 13 or between A0 and A5
          inpulses_width 5000L micro_seconds,
          periods_width 10000L micro_seconds,
          HIGH, // LOW to rest, first level HIGH
          (1 + random(5)) * 2 levels_and_stop); // An inpulses is 2 levels. Between 2 and 10

  // Space between two beginnings of bursts
  delay(60 milli_seconds); // Bursts will occur during this instruction

  delete Burst; // Destruction to make others
}

Result to the analyzer:

With a little zoom: