Arduino 03
MEMOIRE FRONT MONTANT et DESCENDANT
Sommaire
| MEMOIRE FRONT MONTANT et DESCENDANT |
Le fait d'avoir des messages incessants n'est pas intéréssant ! On introduit alors la notion de mémoire, de front montant et descendant :
On va créer une variable "bp_etat", car on va utiliser cet état plusieurs fois, et on a intérêt à lire l'entrée une seule fois, sinon, elle risque de changer en cours de déroulement du programme.
Egalement "bp_memoire" qui va être chargée de mémoriser l'état précédent du BP.
Ensuite, on va tester le fait que le BP est à 1, et la mémoire à 0 pour détecter un changement d'état (et/ou l'inverse).
Voici le programme :
/*
GoodFields tutoriel_3
*/
//**********************************************************
// DECLARATIONS
// entrées-sorties
int led = 13;
int bp = 2;
int bp_etat, bp_memoire;
// vitesse de clignotement
int demiperiode=100;
//**********************************************************
// INITIALISATIONS
void setup() {
// initialize the digital pins
pinMode(led, OUTPUT);
pinMode(bp, INPUT);
// ligne série (pour traces)
Serial.begin(4800); // ou 9600 selon votre port COM
}
//**********************************************************
// PROGRAMME PRINCIPAL
void loop() {
// LED clignotante
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(demiperiode); // wait for a while
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(demiperiode); // wait for a while
// Bouton-poussoir
bp_etat = !digitalRead(bp);
if (!bp_memoire && bp_etat) Serial.println ("BOUTON appuy\xE9");
if (bp_memoire && !bp_etat) Serial.println ("BOUTON lach\xE9");
// mise en mémoire pour le prochain tour
bp_memoire = bp_etat;
}
//**********************************************************
Vous allez d'abord voir que ca marche, bien, mais qu'en y regardant de plus près c'est pas très "réactif". Je veux dire que le message n'apparaît pas exactement au moment ou vous manipulez le BP.
Changez la valeur de demiperiode, pour la mettre à 1 par exemple : c'est bien mieux pour le BP ! On a même parfois des détections de "rebonds" (contact pas franc). La led clignote si vite qu'on la dirait à moitié allumée ...
Changez la valeur de demiperiode, pour la mettre à 2500 par exemple : la led va être très lente, mais pour le BP c'est la catastrophe ! Pourquoi ?
Parce que pendant la fonction "delay", votre ARDUINO, ne fait rien ! Et en particulier la partie de programme qui s'occupe du BP ne marche plus ! Donc, le BP n'est scruté que toutes les 5 secondes.
Sachant que votre ARDUINO peut tourner très vite (plus de 70000 tours par seconde), c'est franchement dommage de le laisser se reposer !!!
CONCLUSION (que j'espère provisoire) : ce programme est mal écrit !
Dernière mise à jour : 07:50:06 11/09/2013