Un défi:
Peut-on en utilisant qu'une seule entrée tout ou rien (entrée 2 d'une uno par exemple) lire l'état de DEUX boutons. On peut rajouter des composants à deux pattes.
La lecture se fera par digitalRead(), et on n'a pas le droit aux transistors, circuits intégrés...
Si la réponse est non, il faut le prouver, si la réponse est oui, il faut donner le schéma et l'algorithme.
Hello
Une entrée en pullup
Deux condensateurs de valeurs différentes
Deux BP en parallèle sur les condensateurs.
Deux diodes anti retour.
L'appui sur un BP décharge le condensateur auquel il est couplé.
L'entrée D2 passe à low.
C'est le top départ d'un chrono.
Le condensateur se recharge, D2 repasse à High.
C'est la fin du chrono.
Les condensateurs étant de valeurs différentes, les temps de charge seront différents.
Iil est donc possible de différencier les BP.
C'est une idée "comme ça" que je vous poste sans avoir fait aucun test.
la capa se charge en activant la pull-up, sur un temps ''court'' (plus court que ceux de décharge)
à la désactivation de la pull-up, la capa se décharge sur des temps plus ou moins longs, suivant que l'on n'appuie pas, qu'un seul BP soit appuyé ou les deux : les 4 cas donnent une variation du temps
non testé physiquement (pas les valeurs nécessaires sous la main) mais la simul fonctionne
l'algo est dans le texte ci-dessus : il faudrait juste un ''étalonnage'' pour les valeurs de temps, et préférer utiliser un timer ''en direct'' plutôt que la lecture de millis(), ainsi que des manipulations des ports sans passer par les fonctions lentes d'Arduino
On connecte les boutons de l’autre côté chacun a une pin en OUTPUT qu’on passe alternativement a HIGH et LOW assez rapidement et quand un des boutons est appuyé le digitalRead voit le HIGH et comme on connaît celui qui est alimenté à ce moment, on sait qui est appuyé ….
Bon on utilise 3 pins au lieu de deux en câblage en INPUT PULLUP classique mais ca fonctionne
Le but n'est pas de faire les tests. Sauf par curiosité.
Je suis sûr que c'est un solution.
Pas mal aussi.
Dans les trois cas (avec condensateur, on fait une mesure analogique, et je ne peux pas vraiment dire que la lecture se fait par digitalRead, elle se fait par la lecture du timer. Mais c'est intéressant.
Perdu, on ne peut pas effacer un message... à ma connaissance.
En fait, le but c'est surtout d'économiser les broches. Je dirais 3 au lieu d'une seule.
Demain (pour laisser de la réflexion), je donne une solution simple, sans mesure de temps (c'est long et compliqué). Indice de cette solution:
pour lire la valeur d'un bouton j'utilise
tu as donné la réponse:
une résistance de 4.7K au+5V, 2 BP en serie, le premier relié à la résistance de 10K. le deuxième BP relié à GND. le point milieu des BP sur D2
sur D2 une résistance extérieure de 1 Mgohms.
D2 en pullup, si digitalRead =0 c'est le BP qu est relié à GND.
D2 sans pullupsi digitalRead=1 alors c'est le BP qui est relié au +5V
Il y a peut être une autre façon que je ne connais pas! J'étais parti de l'idée que si je veux lire les poussoirs, il faut que D2 soit soit en INPUT ou en INPUL_PULLUP. Si j'ai deux boutons, il faut lire l'un avec INPUT et l'autre avec INPUT_PULLUP. Mais j'ai mis du temps à trouver (la nuit porte conseil).
Mais je n'ai jamais parlé de la 4,7kΩ qui ne sert qu'à éviter un court circuit GND-VCC. Que j'ai mis aussi.
Une erreur quand même, si D2 est INPUT_PULLUP, BP2 n'est pas ignoré complètement, il masque PB1: Si on appuie sur les deux boutons, BP1 apparaît comme non appuyé.
Pour les essais, je suis parti de la résistance de pullup du atmega328 qui est donnée dans la doc à 35kΩ . Puis 10 fois plus pour la pulldown externe et 10 fois moins pour l'anti court-circuit.
Mais 330kΩ semble trop, cela fonctionne bien avec une 100kΩ.
c'est vrai, plus maintenant, depuis la nouvelle gestion du forum au travers du moteur utilisé par discourse : il faut certainement (maintenant) demander à un modo.
c'était, par contre, possible avant 2014 (sûr) et peut-être même jusqu'en 2019~2020 (env, pas sûr ...) ; l'effacement ''total'' d'un message était à cette époque ''définitif'', alors que maintenant il n'est que ''masqué'', sans pour autant empêcher sa lecture (puisqu'il est tout de même archivé) grâce au bouton ''crayon'' ... il disparaît malgré tout du moteur de recherche
Ne passe pas, si les deux boutons sont appuyés en même temps, on lit 0V. Il y a des montages ou c'est possible, et des montages ou cela ne l'est pas. Celui-ci ne le permet pas.
C'est comme avec les claviers matriciels usuels, on peut déterminer un bouton, deux boutons, mais pas plus.
De façon général, permettre une lecture de tous les bouton indépendamment les uns des autres demande plus de ressources. Si on veut discriminer les 2 appuis, il faut un montage plus complexe, par exemple les autres solution avec mesure du temps.