Bonjour,
Je débute dans le codage arduino et je rencontre une difficulté :
j'utilise 3 bouton et un LCD I2C pour faire un simple compteur de clique, sauf que certain clique compte double ou triple. Existe il un moyen d'intégrer un cooldown pour éviter de comptabiliser les appuis long?
Voici mon code actuel
#include <rgb_lcd.h>
int reseau = 0;
int affiche = 0;
int BAO = 0;
rgb_lcd lcd;
void setup() {
lcd.begin(16, 2);
pinMode(4, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
reseau = 0;
affiche = 0;
BAO = 0;
}
void loop() {
if (digitalRead(4) == 1) {
reseau = (reseau + 1);
}
if (digitalRead(2) == 1) {
affiche = (affiche + 1);
}
if (digitalRead(3) == 1) {
BAO = (BAO + 1);
}
lcd.setCursor(0, 0);
lcd.print("Res Aff BAO");
lcd.setCursor(0, 2);
lcd.print(reseau);
lcd.setCursor(5, 2);
lcd.print(affiche);
lcd.setCursor(11, 2);
lcd.print(BAO);
delay(100);
}
une fois que vous aurez compris le principe, vous pourrez utiliser une bibliothèque qui simplifie la vie ➜ par exemple bibliothèque Button dans easyRun de @bricoleau ou OneButton de Matthias Hertel ou encore Toggle de @dlloyd et autre Bounce2
J'avais déjà regarder ses tutos pour essayer de comprendre mais je n'ai pas trouver de solution qui me conviens. Est il possible de régler ce problème par code car j'utilise des composant Grove?
Mouai ajouter un délais n'est pas vraiment la solution, alors qu'il existe pléthores de bibliothèques comme JC_Button
qui facilitent le traitement des boutons.
Voilà un exemple pour tes boutons:
#include <JC_Button.h> // https://github.com/JChristensen/JC_Button
const int btnReseauPin = 4;
const int btnAffichePin = 2;
const int btnBAOpin = 3;
Button btnReseau(btnReseauPin); // Défiition du bouton réseau
Button btnAffiche(btnAffichePin); // Défiition du bouton affiche
Button btnBAO(btnBAOpin); // Défiition du bouton BAO
int reseau = 0;
int affiche = 0;
int BAO = 0;
void setup() {
Serial.begin(115200);
btnReseau.begin(); // "Démarrage" du bouton
btnAffiche.begin();
btnBAO.begin();
reseau = 0;
affiche = 0;
BAO = 0;
}
void loop() {
btnReseau.read(); // Lecture du bouton
btnAffiche.read(); // Lecture du bouton
btnBAO.read(); // Lecture du bouton
if (btnReseau.wasPressed()) // Si le bouton Réseau a été pressé
{
reseau += 1;
Serial.println("Resesau = " + String(reseau));
}
if (btnAffiche.wasPressed())
{
affiche += 1;
Serial.println("Affiche = " + String(affiche));
}
if (btnBAO.wasPressed())
{
BAO += 1;
Serial.println("BAO = " + String(BAO));
}
}
L'écriture de ce programme pourrait être facilitée par l'usage de tableaux.
Mets la console à 115200:
pour voir l'affichage des compteurs.