Rebond de bouton..

Bonjour, je nouveau dans le domaine de programmation, je suis à essayer de monter un code, je peine mais je travail fort, pour le moment je suis à faire écrire sur le serial un mot à la pression d'un bouton, mais ce mot s'écrit un grand nombre de fois à chaque pression, je redoute un rebond que j'aimerais corriger de façon soft pour éviter l'ajout de composant physique.

Voici mon petit code bien simple mais qui m'a fait travailler fort...

int boutonUn = 2;
int boutonDeux = 3;
int boutonTrois = 4;
int boutonQuatre = 5;
int boutonCinq = 6;
int boutonSix = 7;
int buttonState = 0;
void setup()
{
Serial.begin(9600);
pinMode(boutonUn, INPUT_PULLUP);
pinMode(boutonDeux, INPUT_PULLUP);
pinMode(boutonTrois, INPUT_PULLUP);
pinMode(boutonQuatre, INPUT_PULLUP);
pinMode(boutonCinq, INPUT_PULLUP);
pinMode(boutonSix, INPUT_PULLUP);
}

void loop()
{

if (digitalRead(boutonUn) == LOW)
{
Serial.println ("Reguliere");
}
if (digitalRead(boutonDeux) == LOW)
{
Serial.println ("MultiCache");
}
if (digitalRead(boutonTrois) == LOW)
{
Serial.println ("Event");
}
if (digitalRead(boutonQuatre) == LOW)
{
Serial.println ("Mystere");
}
if (digitalRead(boutonCinq) == LOW)
{
Serial.println ("Letterbox");
}

}

Merci

Tous les boutons ou interrupteurs ont des rebonds.
Il existe des moyens pour les rendre inoffensifs.

  1. Méthode d'électronicien :
    Câbler un condensateur de 100 nF en parallèle sur le contact.
    Explication :
    En général il y a une résistance en série avec le contact, résistance qui fait généralement 10k (10k 100nF est une bonne optimisation)
    Quand on appuie sur le bouton le contact court-circuite le condensateur qui se décharge instantanément.
    Au moment du rebond le condensateur va se recharger au travers de la 10k et cela va prendre du temps et le signal restera proche de 0V, tellement de temps que le rebond cesse et de nouveau les contacts court-circuite le condensateur.
    Vu de l'entrée du micro-contrôleur le niveau, proche de 0V, est parfaitement stable dés l'appui, l'information est disponible instantanément.

  2. Méthode du programmeur.
    Le programmeur n'aime pas ajouter des composants il est plus à l'aise avec son clavier :angry: .
    Il écrit une fonction qui teste quand le signal a fini de bouger et libère l'information.

L'électronicien dit que c'est cacher la poussière sous le tapis, que des impulsions sont toujours là et qu'elles parcourent les fils ce qui n'est pas terrible. Il dit aussi que l'information est retardée d'une ou plusieurs dizaines de ms ( d'accord c'est rarement important).

Info : je suis électronicien et je comprend que les programmeurs puissent avoir une opinion différente. :grin:

Voir ici...

Bonjour,

Il ne s'agit pas d'un problème de rebond, mais d'un problème de programmation.
Tu testes l'état du bouton, mais il faut tester le changement d'état des boutons, pour cela il faut que tu compares l'état du bouton à l'état précédent (que tu auras mémorisé)

Mets ton code entre balises de code.

Tu testes l'état du bouton, mais il faut tester le changement d'état des boutons

Il faut savoir de quel bouton il parle.
Il me semble qu'il pousse sur le bouton, j'en déduit que c'est "un poussoir à contact intermittent".
Repos = ouvert
Travail = fermé
Il n'y a qu'un bouton pressé à la fois.

écrire sur le serial un mot à la pression d'un bouton, mais ce mot s'écrit un grand nombre de fois à chaque pression,

Je ne vois pas de subtilité dans le code, pour moi il a raison quand il soupçonne un phénomène de rebond.

@Ti-matelot
Sois clair sur le type de matériel que tu utilises.

Pour moi (mais peut être que je me trompe) bouton tout court veut dire bouton poussoir intermittent, sinon c'est un interrupteur.

Pour moi aussi mais je préférerai qu'il précise histoire d'être assuré qu'on se comprenne par la suite.

kamill a totalement raison. Le code est évident, il n'y a aucune gestion de changement d'état.
La fonction loop() est appelée en boucle, donc tant que le poussoir est appuyé, le logiciel affiche le message voulu.
Que ce soit un poussoir ou un interrupteur bistable ne change rien au problème.
Après, bien sûr il faudra ajouter la gestion de l'anti-rebond. Voir exemples ARDUINO: Debounce.

Effectivement vu comme cela oui ça tourne en boucle peut importe s'il y a ou non des rebonds.
C'est "un train qui peut en cacher un autre" et il n’écharpera à un anti-rebond (celui de son choix, je ne force pas la main bien que si en prog c'est souvent pas ça sur l'anti rebond matériel, un condensateur ultra compliqué, j'ai des arguments).

kamill:
Bonjour,

Il ne s'agit pas d'un problème de rebond, mais d'un problème de programmation.
Tu testes l'état du bouton, mais il faut tester le changement d'état des boutons, pour cela il faut que tu compares l'état du bouton à l'état précédent (que tu auras mémorisé)

Mets ton code entre balises de code.

Je viens de faire cette options et tout fonctionne parfaitement!

Un gros merci

Bonjour,

Ce serait bien de mettre le code rectifié et qui fonctionne. Ca peut servir a d'autres et c'est formateur!

Merci

Fitness04