boutons et leds : questions de débutant

Bonjour,
Selon les exemples que j'étudie je vois des choses assez différentes, et je ne sais pas ce qu'il est judicieux de suivre, alors désolé mais je demande votre avis.
Déclaration des boutons et leds : je lis :
int LEDPin = 3
ou :
const int LEDPin = 3
idem pour les poussoirs.
J'ai compris que dans ce cas il vaut mieux déclarer une constante, mais ça fait quoi si on déclare en tant que variable ? Le code est moins optimisé, ou la gestion de la mémoire ?

Câblage des boutons : un coup je lis qu'il faut brancher sur GND et dans le setup il y a un digitalWrite HIGH, et un autre coup il faut le brancher sur +5V... Quelle différence y a-t-il ?

Stockage de l'état de la led (ou de l'action sur le poussoir) dans une variable :
il vaut mieux utiliser bool state LED = false ou int stateLED = LOW ? Il me semble que l'inversion d'une variable booléenne est plus simple ( utilisation de = !) mais que l'activation de la led est plus simple avec HIGH et LOW (on lui donne la même valeur que le bouton).

Gestion des rebonds (si c'est bien comme ça qu'on dit en français)) : des fois il n'y a rien, des fois un simple delay(100) mais aussi parfois un calcul entre a dernière fois où ça a été pressé et le temps présent, comparé à une constante, avec utilisation de millis(). Là encore quelle est la bonne façon de faire ?

Si ça peut avoir une importance pour les choix à faire, dans mon projet les poussoirs seront très rarement utilisés, juste pour modifier la valeur d'une option, et les leds correspondantes changeront rarement d'état et seront en majorité allumées en permanence.
Dernier point, je prévois ensuite de pouvoir effectuer ces paramétrages d'option également avec une appli smartphone, donc y a-t-il quelque chose à prévoir dès maintenant dans la gestion des variables d'état, vu que ce ne sera pas la lecture de la broche du poussoir mais du Bluetooth ?

Merci d'avance. Et je veux bien des liens vers des tutos clairs et bien écrits, pour l'instant je n'ai pas trouvé grand chose de bien, soit c'est bourré de fautes, soit c'est inexact. Exemple, pour déclarer une fonction IL FAUT d'abord écrire une ligne de commentaire. C'est faux, c'est juste intelligent de le faire mais le code marchera sans ça.

Traitement des Rebonds :
Il y a deux façon d'aborder le problème. Le "programmeur" rechigne à ajouter des composants et prèfere traiter les rebonds en ajoutant des temporisations avant de lire la valeur définitive. L'"électronicien" qui n'a pas peur d'ajouter un condensateur de 100 nF en parallèle sur les contacts préfère traiter le problème à la source avec "ce condensateur".

D'un coté (logiciel) on cache la poussière sous le tapis, de l'autre électronnique on empêche la perturbation de se manifester.
C'est un choix personnel, les deux méthodes fonctionnent.
Je pense que tu as du comprendre ma préférence pour le condensateur parce que je suis un électronicien. Je ne détiens pas la vérité absolue.

Boutons avec résistance au Vcc ou à la masse ?
Déjà pourquoi une résistance en série:
S'il ny en avait pas quand le bouton serait ouvert le fil de liaison serait en l'air et formerait antenne et la lecture serait aléatoire.

Résistance au Vcc ou à la masse ?
C'est toujours la même chose : éviter d'ajouter des composants. Pour cela les concepteurs des micro ajoutent des résistances commutables que l'on appelle des "pull-up" ou des "pull-down".

Historiquement la société Arduino a choisi un micro de la société Atmel (maintenant Microchip) qui ne possède que des "pull-up", c'est la raison pour laquelle on voit un maximum de boutons câblés entre la masse et l'entrée micro. Les micros STM32 qui se programment aussi avec l'IDE Arduino ont les deux type up et down.
Bien évidement si tu n'utilises pas la pull-up interne mais une résistance externe les deux possibilités sont ouvertes.

Bouton à la masse :
Inconvénient, qui n"en est pas un : quand on appuie on fait une action donc on pense à un 1 logique et on obtient un 0 électrique.
Avantage : quand le boîtier d'un bouton comporte des masses métalliques qui pourraient faire antenne il est préférable que ces masses soient à la masse.

Explication super claire et lumineuse. Grand merci.
Comme souder ne me fait pas peur et que j'aime les solutions propres, ce sera condo et résistance. Quelle valeur pour cette dernière ?
Et ce sera bouton à la masse, comme c'est mon premier projet, autant prendre de bonnes habitudes et éviter les antennes, même si je ne crois pas qu'il y en aura sur ce projet.
Du coup trois questions supplémentaires :

  • je met la résistance où exactement ?
  • est-ce que je dois écrire digitalWrite(switchPin, HIGH); dans le setup pour activer la résistance pullup (je pense que non mais je préfère vérifier) ?
  • quelle valeurs je vais lire : LOW quand c'est appuyé ?

68tjs:
Déjà pourquoi une résistance en série:

Oui d'ailleurs, pourquoi en série ? Il me semblerait plus logique que ce soit en // aux deux bornes du poussoir... Le poussoir non appuyé le courant ne passe pas à cause de la résistance et aucune patte n'est "en l'air" et une fois appuyé la résistance n'a plus d'effet, le courant passe.
Si c'est pas ça je veux bien une explication.
Et si c'est bien en // alors n'importe quelle résistance assez forte fera l'affaire, non ?

Bonjour,

Concernant les rebonds sur un bouton, un simple délai de 20ms (ou l'équivalent avec millis) permet de faire un traitement anti-rebond efficace.

  • je met la résistance où exactement ?

Déjà il faut que tu choisisses si tu veux utiliser une résistance externe ou la résistance de pull-up fournie par le microcontrôleur.
Pour mettre la résistance du micro il faut écrire dans des registres ou utiliser des fonctions arduino qui feront le travail pour toi --> c'est la bonne solution.
Pour la syntaxe le plus simple est d'utiliser a documentation arduino DOCUMENTATION-> REFERENCE ->pinMode

Syntax
pinMode(pin, mode)
Parameters
pin: the Arduino pin number to set the mode of.

mode :

  • INPUT
  • OUTPUT
  • INPUT_PULLUP
    .See the Digital Pins page for a more complete description of the functionality.
  • quelle valeurs je vais lire : LOW quand c'est appuyé ?
    C'est sûr que si tu mets l'entrée du micro à la masse quand tu appuies sur le bouton tu ne pourras pas voir autre chose que 0 volt.

Câblage de la résistance :

Capture_2021_02_15_17_28_36.png

Fig 1 la résistance est externe et fig 2 on a mis en service la pull-up du microcontrôleur en faisant pinMode(pin INPUT_PULLUP). Fig 3 câblage du condensateur.
Au repos le condensateur s'est chargé au travers la résistance série (c'est pour cela qu'elle doit être en série).
Quand on appuie sur le bouton le condensateur se décharge dans une résistance très faible (il n'y a jamais de résistance complètement nulle).

Quand le contact s'ouvre sous l'effet du rebond le condensateur se charge au travers la résistance série.
Si cela fonctionne c'est que la résistance en série est de forte valeur : les pull-up du µC font entre 30 et 70 kohms selon le lot de fabrication.
La charge est très lente et la décharge est très rapide.
Le condensateur ne peut pas se recharger malgré les rebonds et l'entrée du micro voit un état bas tant que le bouton est appuyé qu'il y ait des rebonds ou qu'ils se soient arrêtés.

Concernant les rebonds sur un bouton, un simple délai de 20ms (ou l'équivalent avec millis) permet de faire un traitement anti-rebond efficace.

Je n'ai jamais dis le contraire:

C'est un choix personnel, les deux méthodes fonctionnent.

Et je persiste à dire que les impulsions de tensions provoquées par les rebonds sont des sources de perturbations électromagnétiques qui sont considérées comme négligeables tant que l'on a eu la chance de ne pas avoir été confronté au problème. Et quand le problème se pose les rebonds des interrupteurs seront les derniers endroits où on ira chercher.
Je signale le principe, je l'explique, je précise toujours qu'il existe une solution logicielle, après chacun fait comme il veut.

Capture_2021_02_15_17_28_36.png

Bon comme déjà annoncé je choisis la version condo ET résistance, donc je suppose que je mixe les figures 1 et 3 ? Et que le trait vert va vers la broche dédiée, celle qui est définie par "const int monswitchPin = nn;" ?
Pour les résistances j'ai 30, 47, 51, 68 et 100 kohms en stock, je prend quoi ?
Désolé si mes questions sont débiles, mais je suis total débutant...

30k c'est bon avec un "petit" condensateur de 100 nF qui est une valeur ultra répandue.

Mais la résistance externe peut très bien être remplacée par la résistance interne au micro avec un pinMode INPUT_PULLUP.
La résistance externe n'est obligatoire que si tu veux câbler le bouton poussoir entre le Vcc et l'entrée du micro que cela soit clair ! Les résistances de pull-up c'est fait pour cela ! Pour le concepteur du micro leur ajout ne coûte rien et c'est bien utile pour les utilisateurs.

L'ajout d'un condensateur anti-rebond ne modifie en rien le câblage d'un bouton poussoir.
Le condensateur ajouté est juste câblé en parallèle sur le contact.

Aussi une erreur que j'ai des fois vu:
C'est de cabler le poussoir avec résistance de rappel>10K sur le GND, et d'activer quand même le PULLUP interne.
La résistance interne fait dans les 10K, donc si utilisation d'une résistance supérieure, le pullup se fera non pas sur le GND comme voulu, mais bien sur le VCC.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.