#include <Plaquette.h>
//////////Ramp basique comme fader////////////////////
Ramp flashFader(0.5); // durée du fondu
//////////Ramp basique + easing ////////////////////
Ramp bouncyFader(1.0); // durée du fondu
DigitalIn rampPauseButton(2, INTERNAL_PULLUP);
////////////objets de square wave period + ramp//////
Ramp periodRamp(10.0);
Alarm highFrequencyAlarm(1.5); // (option) maintient la valeur haute fréquence du ramp
Wave mySquareWave(1.0);
////////////LEDS/////////////////////////////////////
DigitalOut violetLed(10); //lié a flashFader
AnalogOut blueLed(11); //lié a mySquareWave
AnalogOut pinkLed(9); //lié a bouncyFader
Metronome myMetro(3.0); // initialise le métronome avec une période de 3 secondes
Plotter plotter(9600);
void begin() {
// petit debounce pour le bouton
rampPauseButton.debounce();
// on personnalise les objets Ramp dans begin()
flashFader.fromTo(1.0, 0.0); // redéfinit les valeurs de début et de fin
bouncyFader.fromTo(1.0, 0.0);
bouncyFader.easing(easeOutElastic);
bouncyFader.start();
periodRamp.fromTo(3.0, 0.1);
periodRamp.start(); // démarre immédiatement le ramp de fréquence
}
void step() {
//////////Visualisation des signaux en plotter///////////
// periodRamp >> plotter;
// highFrequencyAlarm >> plotter;
// mySquareWave >> plotter;
bouncyFader >> plotter;
// newFader >> plotter;
// flashFader >> plotter;
///////activation des faders basiques
if (myMetro) { // à chaque battement du métronome
flashFader.start(); //on demarre flashFader chaque tick
if (!rampPauseButton) // ignore les metros pour bouncyFader si le bouton est actif
bouncyFader.start();
}
//////// pour stocker une version remappée de bouncyFader
// float newFader = mapFloat(bouncyFader, -0.4, 1.0, 0.0, 1.0);
flashFader >> blueLed;
////////////section bouncyFader/////////////////////
bouncyFader >> pinkLed;
// attention : même en pause, de nouveaux fades pourraient relancés à chaque battement du métronome
if (rampPauseButton.rose())
bouncyFader.pause(); // le signal est mis en pause...
if (rampPauseButton.fell())
bouncyFader.resume(); // ...et reprend lorsque le bouton est relâché
////////////section Ramp modificateur du wave/////////////////////
periodRamp >> mySquareWave.Period();
if (periodRamp.finished()) {
highFrequencyAlarm.start();
}
///I delayed the onset of the next Ramp with an alarm because I thought it looked better
if (highFrequencyAlarm.rose()) {
periodRamp.start();
}
mySquareWave >> violetLed;
}