Étape 15 : Bouton interrupteur à bascule
Parfois, vous serez intéressés au moment précis, un bouton est enfoncé ou relâché, donc vous pouvez déclencher un événement dans votre dessin. Dans ce cas, vous aurez besoin stocker l’état actuel de la touche et comparez-le avec le dernier état enregistré. Si le currentState est élevée et la lastState est faible, alors vous savez que juste avoir pressé la touche. Examinez le code ci-dessous :J’ai utilisé quelque chose de nouveau dans mon si déclaration :
Si (currentState == HIGH & & lastState == faible)Cela se lit comme « si currentState est élevé et lastState est faible », & & permet de vérifier la véracité de beaucoup de choses dans le même si déclaration. Vous pouvez également utiliser || ("ou") pour tester est une chose ou l’autre a la valeur true. Lire la suite ici.
Vous noterez également que la ligne suivante apparaît deux fois dans le code ci-dessus :
Delay(1) ;
Ce retard a été mis là pour donner le temps de touche pour s’établir à tension constante, avant de commencer à mesurer encore une fois, c’est ce qu’on appelle bouton debouncing; elle nous empêche de compter une seule pression comme deux presses à cause de bouton chatter. Utilisant un délai pour le bouton debouncing est très bien pour cet exemple simple, mais si vous mesuraient beaucoup de boutons les retards vont s’additionnent et rendre votre code exécute très lentement. Cela pourrait finir par votre matériel du donnant une impression de retard. Je vais aborder des meilleures techniques pour faire debouncing plus loin dans cette classe.
Ce code introduit également un nouveau type de données : boolean. Valeurs booléennes sont utilisés pour stocker 1 bit éléments d’information, des choses comme vrai/faux, marche/arrêt, 1/0, de HIGH/LOW. Dans mon code je l’ai utilisé pour stocker le courant et le dernier état du bouton (en haut ou en bas).
Voici comment nous pourrions utiliser ceci pour activer/désactiver une LED sur et off chaque fois que la touche :
Dans le code ci-dessus, j’ai créé une variable appelée « ledState » pour stocker l’état actuel de la LED, puis chaque fois que la touche a été pressée, j’ai utilisé digitalWrite pour définir la LED à l’état opposé et sauvé une ledState nouvelle.
Allant encore plus loin, vous pouvez utiliser le code du bouton bascule avec le code de fondu de l’exemple de LED RVB pour les éléments suivants :
J’ai ajouté une fonction d’assistance supplémentaire dans le code ci-dessus pour aider à choisir la couleur suivante à s’estomper à :
int getNextColor (int couleur) {}
Si (couleur == rouge) retour vert ;
Si (couleur == vert) retour bleu ;
Si (couleur bleu de ==) retourne rouge ;
}
J’ai déclaré la fonction avec un int pour dire Arduino qu’il devrait s’attendre à la fonction pour retourner un nombre (dans ce cas, le nombre de la goupille de Arduino qui s’est connecté à l’une des broches de la LED RGB. Le si des déclarations Regardez un peu différentes que ce que nous avons vu avant, j’aurais écrit la fonction comme ceci :
.. .et cela fonctionnerait de la même manière exacte. Si vous devez uniquement exécuter une seule ligne dans un if instruction, vous pouvez utiliser le raccourci :
Si (quelque chose) doSomething ;
sans accolades ou sauts de ligne.
Continuer à la partie 2 de cette série ici, ou apprendre comment raccorder le MIDI pour les entrées et les sorties de l’Arduino.