MTtripleButton: Exemple 1

Un bouton est branché entre A0 et GND. Le programme va allumer la led LED_BUILTIN sur triple clic et l'éteindre sur simple clic.

Le bouton

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

#include "MTtripleButton.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.

On va commencer par donner des noms symboliques aux broches utilisées. Ici, il y en a qu'une, pour le bouton:

const uint8_t PIN_BUTTON = A0; // Bouton câblé entre GND et A0

Pour la led, le nom symbolique est déjà défini par Arduino: LED_BUILTIN

Définissons notre bouton:

MTtripleButton Bouton(PIN_BUTTON, allume, PAS_D_ACTION, eteint);

Cela définit un bouton nommé "Bouton". Il est du type MTtripleButton car on a besoin de reconnaître les triple clics. Il y a trois paramètres à passer:
- le nom de la broche
- le nom de la fonction qui va être appelée si on fait un triple clic (on allume la led)
- le nom de la fonction qui va être appelée si on fait un double clic (ici on ne fera rien)
- le nom de la fonction qui va être appelée si on fait un simple clic (on éteint la led)
Les fonctions appelées ne doivent pas avoir de paramètres et ne doivent rien retourner.

MTtripleButton admet un dernier paramètre qui doit donner l'état de repos. Il est plus simple de brancher le bouton entre A et GND (pas besoin de résistance) et c'est cet état qui est pris par défaut, on n'a donc pas besoin de rajouter ce paramètre. On pourrait aussi ne pas préciser la deuxième fonction si ce n'était pas le bouton qui éteignait la led.

Notez que dans la définition de "Bouton" on parle de "allume" et "eteint" qui doivent être définies auparavant. Il va donc falloir les définir avant cette ligne. Voici leur définition:

void allume(void)
{
  digitalWrite(LED_BUILTIN, HIGH);
}

void eteint(void)
{
  digitalWrite(LED_BUILTIN, LOW);
}

Pas plus de commentaires avec des noms explicites. Notez que l'on peut définir ces deux fonctions dans l'ordre qui nous convient, mais il faut les mettre avant la définition du bouton.

setup et loop

On a tout fait pour le bouton, mais il faut aussi s'occuper de la led. Dans le setup(), il faut la définir en sortie:

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
}

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

void loop(){}

J'ai tout mis sur la même ligne mais vous pouvez en prendre deux ou trois. Même si la fonction est vide et ne nous sert à rien apparemment, il faut la définir. En fait, elle va servir de boucle d'attente quand notre programme ne va pas s'intéresser au bouton.

Programme complet

Voici donc le programme complet:

// Ce programme allume une led si on fait un double clic sur le bouton et
// éteint la led sur un simple clic. 

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

const uint8_t PIN_BUTTON = A0; // Bouton câblé entre GND et A0


void allume(void)
{
  digitalWrite(LED_BUILTIN, HIGH);
}

void eteint(void)
{
  digitalWrite(LED_BUILTIN, LOW);
}

MTtripleButton Bouton(PIN_BUTTON, allume, PAS_D_ACTION, eteint);



void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop(){}