Je cherche à récuperer l'état d'une broche reliée à un bouton, malheureusement, si quand j'appuie sur le bouton, l'état est stable, quand ce denier est relâché j'ai énormément d’interférences....
Deux images de mon montage, (inspiré du montage d'eskimon mais sans la led) :
const int bt_plus = 2;
int etat_bt=0;
void setup() {
Serial.begin(9600);
pinMode(bt_plus, INPUT_PULLUP); //le bouton est une entrée
digitalWrite(bt_plus, LOW);
}
void loop() {
etat_bt = digitalRead(bt_plus);
Serial.println(etat_bt);
delay(500);
}
Dans mon terminal :
Quand j'appuie, j'obtiens bien une suite de 0, par contre quand c'est relâché... au lien d'obtenir que des 111111 j'obtiens un truc du genre :
Rassure toi le montage anti-rebond d'Eskimon est utilisé par la très grande majorité des professionnel, y compris le bouton Reset de ta carte arduino.
pepe est un perfectioniste et il s'inquiète pour le condensateur : va-t-il tenir 5 ans avec une pression sur le bouton toutes les minutes ?
Oui effectivement il peut ne pas résister.
En attendant en usage normal je suis persuadé que ce sera le bouton poussoir qui dégagera le premier.
Pinaillage:
Je rappelle que le circuit équivalent n'est pas un circuit RC mais un circuit RLC.
Comme il faut prendre en compte la présence d'une inductance dans le condensateur, les contacts du relais et les fils de câblage le courant ne peut pas s'établir instantanément -> la tangeante à l'origine est HORIZONTALE.
En conséquence si U est la tension de charge du condensateur et r la résistance série parasite totale du circuit (condensateur plus contacts plus fils de liaison) on n'a pas le droit d'écrire Imax = U/r.
Le courant maximum n'est pas pour T=0 mais à cause de l'inductance quelques fractions de temps plus tard et plus tard il se trouve que le condensateur s'est déjà déchargé et donc que dans l'équation du courant instantané :
i= u/r, u ne vaut plus 5V mais déjà beaucoup moins.
Autres paramètres à prendre en compte :
les condensateurs utilisés 100nF technologie céramiques sont particulièrement résistants aux surcharges.
le front de tension étant "raide" il ne faut pas prendre la valeur de la résistance mesurée en statique (continu) mais il faut faire intervenir l'effet de peau qui peut réduire a quelques microns l'épaisseur de la zone de conduction.
La valeur de la résistance n'est pas une constante : elle plus forte aux moment de l'appui sur le bouton et tend progressivement a retrouver sa valeur statique au fur et a mesure de la décharge.
Bonjour,
Vieux débat qui ne sera jamais résolu et tant mieux car cela génère de la communication et forme les nouveaux qui choisiront peut être leur camp.
Personnellement, j'utilise la technique BP + C en // depuis le Z80 + autres comparses et je n'ai jamais eu le moindre problème.
@+
La longueur de votre réponse est inversement proportionnelle à sa qualité !!
C'est exactement ce que je cherchais !!
Merci
La réponse était surtout proportionnelle au temps disponible ;D
Dans les exemples fournis avec la bibliothèque, il doit y en avoir un avec un bouton + et un bouton -, et une cadence de répétition qui s'accélère quand le bouton est maintenu enfoncé.
Le câble est réduit à sa plus simple expression : PIN---BP---GND
Ce n'est pas du tout la même approche que celle développée ci-dessus par nos experts électroniciens
Là c'est du softeux pur jus.
J'imagine que les pros diront que c'est loin d'être le mieux en termes de durabilité et/ou de fiabilité et/ou de finesse de détection.
Mais c'est très simple à mettre en oeuvre et cela convient parfaitement pour la plupart des bricolages artisanaux, où le niveau d'exigence est certainement moindre.
pepe:
Dans ton cas, le délai important entre chaque lecture de ton bouton rend inutile l'emploi d'un système anti-rebond.
Tout à fait d'accord avec ça. Les rebonds durent tout au plus quelques ms, donc si on fait des lectures du switch avec une période supérieure à 10-20 ms, on n'a aucun besoin d'anti rebond ni hard ni soft.
Je pense que le delay(500) n'est pas représentatif du besoin réel.
Il est juste là pour mettre en évidence le problème rencontré sans flooder le terminal serie.
S'il y a un bouton + dans le code, je parie qu'il y a aussi un bouton - pas loin.
Et que pour couvrir correctement le besoin, la solution devra se passer de l'instruction delay().