MTcheckButton: Exemple 1

Le programme va allumer la led LED_BUILTIN quand on appuie sur un bouton branché entre A0 et GND. La led va s'éteindre si on appuie une seconde fois. C'est comme un bouton de lumière.

Le bouton

Pour la fonction j'appuie ça s'allume, je rappuie ça s'éteint correspond à l'objet MTcheckButton de base. C'est donc lui que nous allons utiliser.

On va commencer par donner des noms symboliques à la broche utilisée par le bouton:

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

Définissons notre bouton:

MTcheckButton Bouton(PIN_BUTTON, allume, eteint);

Cela définit un bouton nommé "Bouton". Il est du type MTcheckButton car c'est un bouton type case à cocher. Il y a trois paramètres à passer:
- le nom de la broche
- le nom de la fonction qui va être appelée si on appuie une première fois sur le bouton (appuis impairs)
- le nom de la fonction qui va être appelée si on appuie une seconde fois le bouton (appuis pairs)
Les fonctions appelées ne doivent pas avoir de paramètres et ne doivent rien retourner.

MTcheckButton 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.

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

#include "MTcheckButton.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()

On a tout fait pour le bouton, mais il faut aussi s'occuper de la led. Le nom symbolique est déjà défini par Arduino: LED_BUILTIN. 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 appuie sur un bouton. 

#include "MTcheckButton.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);
}

MTcheckButton Bouton(PIN_BUTTON, allume, eteint);



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

void loop(){}