MTsoftPWM en détail

Ce PWM est géré soft, donc utilisable sur toutes broches indépendamment. Périodes possibles de 200µs à 5 jours.

Include à rajouter

#include "MTsoftPWM.h" // Voir http://arduino.dansetrad.fr/MTobjects

Je conseille fortement de laisser le commentaire, si une autre personne voulait essayer le programme, elle aurait directement un lien de téléchargement. C'est valable pour toutes les bibliothèques que vous utilisez.

Commentaires utiles

micro_seconde
micro_secondes
impulsion_de
impulsions_de
periode_de
periodes_de
pour_cent
niveau_et_arret
niveaux_et_arret
on_commence_par

Ces commentaires sont des mots que l'on peut rajouter n'importe où et qui sont ignorés par le compilateur.

Constructeurs

MTsoftPWM(pin, pulseMicrosecond, periodMicrosecond, depart, numberOfLevels, onStopFunction, active);
MTsoftPWM(pin, pulseMicrosecond, periodMicrosecond, depart, numberOfLevels, onStopFunction); // active = MT_ON
MTsoftPWM(pin, pulseMicrosecond, periodMicrosecond, depart, numberOfLevels); // onStopFunction = PAS_D_ACTION, active = MT_ON
MTsoftPWM(pin, pulseMicrosecond, periodMicrosecond, depart); // numberOfLevels = MT_INFINI, onStopFunction = PAS_D_ACTION, active = MT_ON
MTsoftPWM(pin, pulseMicrosecond, periodMicrosecond); // depart = HIGH, numberOfLevels = MT_INFINI, onStopFunction = PAS_D_ACTION, active = MT_ON
MTsoftPWM(pin, pulseMicrosecond); // periodMicrosecond = 20000 µs, depart = HIGH, numberOfLevels = MT_INFINI, onStopFunction = PAS_D_ACTION, active = MT_ON
MTsoftPWM(pin); // pulseMicrosecond = 10000 µs, periodMicrosecond = 20000 µs, depart = HIGH, numberOfLevels = MT_INFINI, onStopFunction = PAS_D_ACTION, active = MT_ON

pin (uint8_t): broche Arduino, toutes utilisables (sauf A6 et A7 de la Nano qui ne sont que des entrées)
pulseMicrosecond (float): durée de l'impulsion en millisecondes
periodMicrosecond (float): durée de la période en millisecondes
depart (uint8_t): niveau de l'impulsion (au départ)
  HIGH → impulsion normale (par défaut)
  LOW → impulsion inversée
numberOfLevels (unsigned long): nombre de niveaux avant l'arrêt
  2 niveaux_et_arret → une seule impulsion (repos puis 2 changements)
  <valeur numérique> niveaux_et_arret → donnera <valeur numérique>/2 impulsions
  MT_INFINI → en continu
onStopFunction: ce qui se passe quand on on a fait les numberOfLevels
  PAS_D_ACTION → rien ne se passe
  fonction → appel d'une fonction "void fonction(void) { …}"
active (boolean): fonctionne ou pas?
  MT_ON → fonctionnement normal
  MT_OFF → arrêt du fonctionnement (pas de changements de niveaux pour l'instant)

Fonctions utiles

void setPulse(float pulseMicrosecond);
void setDutyCycle(float dutyCycle);
void setPeriod(float periodMicrosecond);
void detach(void);
void attach(void);
void onStop(void);

setPulse change la durée de l'impulsion
setPulse sans paramètres choisi des impulsions de 10ms
setDutyCycle change la durée de l'impulsion grâce au rapport cyclique
setDutyCycle sans paramètres choisit un rapport cyclique de 50%
setPeriod change la période
setPeriod sans paramètres choisi une période de 20ms (50Hz)
detach déconnecte la broche, elle redevient "normale" en entrée (n'efface pas les temps programmés)
attach reconnecte la broche, si elle a été "détached"
onStop() fonction à surcharger appelée quand on vient de finir tous les niveaux

Fonctions bonus

float getPulse(void);
float getPeriod(void);
float getDutyCycle(void);
float getResolution(void);
void setNumberOfLevels(unsigned long numberOfLevels);
unsigned long getNumberOfLevels(void);
unsigned long getNumberOfLevelsRemains(void);
void stop(void);
void start(void);
boolean getActive(void)

getPulse retourne la durée de l'impulsion
getPeriod retourne la durée de la période
getDutyCycle retourne la valeur du rapport cyclique
getResolution retourne la résolution en μs (entre 62,5ns à 64μs)
setNumberOfLevels impose un nombre de niveaux avant de s'arrêter
getNumberOfLevels retourne le nombre programmé
getNumberOfLevelsRemains retourne le nombre de niveaux qu'il reste à faire
stop suspend l'activité
start reprend l'activité
getActive retourne true si actif

Exemples