Ardu? No!Les boutons ≫ Une touche est appuyée?

Une touche est appuyée?

Quand on utilise des boutons, il faut à un moment ou à un autre les prendre en compte. Il y a deux façons de procéder, soit on scanne régulièrement le clavier, soit l'appui sur un bouton déclenche une interruption. Il est assez rare d'utiliser une interruption car la solution est un peu plus compliquée. Mais quand on regarde régulièrement les boutons, on peut chercher à économiser le temps passé.

Prenons un exemple simple, avec quatre boutons, marche, arrêt, plus vite et moins vite. Pour ne pas perdre un appui sur un bouton, on va lire les boutons toutes les 20ms et cela va prendre un temps T à chaque fois. Si au lieu de lire les boutons, on peut écrire une fonction qui n'indique pas quel bouton est appuyé, mais qu'il y en a un, et que cette fonction dure un temps t plus court que T, cela peut devenir intéressant. Si aucun bouton n'a été appuyé, on va consommer un temps t au lieu de T, mais lors d'un appui, nous allons passer un temps t qui nous informera qu'il faut lire le bouton qui nous coûtera un temps T supplémentaire. cela fera à chaque appui t+T. Si on est face à un humain qui appuie souvent sur les dits boutons, mettons une fois par seconde, on va passer 20t+T chaque secondes au lieu de 20T. Pour peu que t ne soit que de moitié de T, cela peut être intéressant.

Dans d'autres cas, c'est le temps maximal qui nous importe, et dans ce cas, il vaut mieux utiliser la lecture même si la plupart du temps elle ne donne rien. D'autant plus que cela réduit le code.

Certaines pages seront consacrées à une façon de tester seulement la fonction uneToucheEstElleAppuyee.