MThardPWM: Exemple 1

Ce programme va faire clignoter LED_BUILTIN

On va utiliser le PWM hard. Sur une Mega, LED_BUILTIN correspond à une broche acceptant ce PWM hard, il n'y a rien à faire de plus. Sur une Uno/Nano, la broche LED_BUILTIN ne l'acceptant pas, on peut utiliser la sortie 9 pour faire le PWM et mettre un fil de pontage entre la broche 9 et la broche 13. Si on ne dit rien, la broche 13 sera en entrée ce qui est ce qu'il faut.

Le PWM

Nous allons prendre un objet MThardPWM. Avec une Uno/Nano, le signal va sortir sur la broche 9:

MThardPWM Clignotant(9, ...

Avec une Mega, on mettra directement LED_BUILTIN à la place de 9.

Cela va créer un objet (en gros une variable) de type MThardPWM.

Si l'on veut un cycle allumé pendant 0,5s et éteint pendant 0,5s en prenant un MThardPWM, il faut donner le temps de l'impulsion (état HIGH ou les allumée) et la période. Le temps à HIGH est de 0,5s te doit être exprimée en microsecondes. On peut écrire:

MThardPWM Clignotant(... 500000, ...

Mais pour documenter le code et pour rajouter des commentaires, nous allons écrire:

MThardPWM Clignotant(... impulsions_de 500000 micro_secondes, ...

Ainsi, nous saurons d'une part que c'est le temps de l'impulsion, et d'autre part que le temps est exprimé en microsecondes. Les mots impulsions_de 500000 micro_secondes sont des mots commentaires ignorés par le compilateur. On reconnaît ces mots à la présence d'un caractère "_" au milieu de plein de lettres minuscules sans avoir ce caractère en début.

De même pour donner la période, on préférera l'écriture:

MThardPWM Clignotant(... periodes_de 1000000 micro_secondes);

La définition complète de notre PWM est donc (pour une Uno/Nano):

MThardPWM Clignotant(9, impulsions_de 500000 micro_secondes, periodes_de 1000000 micro_secondes);

Il faut comme dans tous les programmes qui utilisent MTobjets, inclure la bibliothèque utile. Ici on utilise comme seul objet un PWM (le nom de l'objet est MThardPWM):

#include "MThardPWM.h" // V1.0.0 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.

setup() et loop()

Il n'y a rien à faire de plus, setup() et loop() ne nous servent à rien. Il vont rester vide. Mais vous pouvez y mettre un autre programme, celui que nous avons fait est indépendant. Donc:

void setup(){}

void loop(){}

J'ai tout mis sur la même ligne mais vous pouvez en prendre deux ou trois. Même si les fonctions sont vides et ne nous servent à rien apparemment, il faut les définir. En fait, loop() va servir de boucle d'attente car notre programme ne fait pus rien après initialisation.

Démarrage du clignotant

Le clignotant ne peut être mis en place lors de sa définition car juste avant le setup() Arduino initialise ses propres valeurs pour les PWM et cela effacerait les nôtres. Pour contrer cela, les bibliothèques utilisent souvent une fonction begin() qui met en place manuellement certaines fonctions (on connaît par exemple Serial.begin). Pour MTobjects, ce choix n'a pas été retenu, l'objet s'initialise tout seul 16ms après sa définition.

Programme complet

Voici donc le programme complet:

// Ce programme fait clignoter une led. Il faut un pontage (fil) entre la
// broche 9 et 13 pour une Uno/Nano

#include "MThardPWM.h" // V1.0.0 Voir http://arduino.dansetrad.fr/MTobjects

// Sur Uno/Nano les broches utilisables sont: 9, 10 et le pontage 9-13
MThardPWM Clignotant(9, impulsions_de 500000 micro_secondes, periodes_de 1000000 micro_secondes);
// Sur Mega: 2, 3, 5, 6, 7, 8, 11, 12, 13, 44, 45, 46
//MThardPWM Clignotant(LED_BUILTIN, impulsions_de 500000 micro_secondes, periodes_de 1000000 micro_secondes);


void setup(){}

void loop(){}