Merci pour ces tests jef59 et merci aussi jpbbricole pour les remarques.
Par contre sur les tests, je ne comprend pas pourquoi tu dis que le point "C" (donc mon cas de figure) ne fonctionne pas d'après tes resultats ? Peux tu m'expliquer ? Car pour moi c'est bien le but d'avoir 0v dans un cas et +5v dan l'autre non ?
C'est juste pour ma culture personnelle étant donné que je vais bien entendu ajouter des pullup externes afin d'être OK aux vues de tes conclusions.
Non, ces PULLUP externes ne sont pas nécessaires si tu initialises tes boutons ainsi: .attach(INTER, INPUT_PULLUP); // Pour PULLUP interne
comme il n'est pas nécessaire d'initialiser les pin des boutons avec un pinmode(), c'est la bibliothèque qui s'en occupe.
On mets des PULLUP externes, pour autant que l'on soit dans un milieu "bruité" électriquement parlant.
Essaies ça:
#include <Bounce2.h>
#define INTER 2
// Créer (instancier) un objet Bounce
Bounce inter;
void setup()
{
Serial.begin(9600);
// Attache l'objet 'inter' à la même broche
inter.attach(INTER, INPUT_PULLUP);
inter.interval(5); // temps de latence entre deux mesures d'état
}
// Variable qui va contenir l'état courant du bouton
// On commence avec -1 qui est un état inconnu...
int courant = -1;
void loop()
{
// Mise à jour de l'état de inter : bouton pressé ou non ?
inter.update();
// Récupération de l'état du bouton
int valeur = inter.read();
// Agir en fonction de l'état du bouton
if ( valeur == LOW)
{
Serial.println("Bouton appuyé");
}
else
{
Serial.println("Bouton relaché");
}
delay(50);
}
#include <Bounce2.h>
#define INTER 2
// Créer (instancier) un objet Bounce
Bounce2::Button inter = Bounce2::Button();
//Bounce inter;
void setup()
{
Serial.begin(9600);
// Attache l'objet 'inter' à la même broche
inter.attach(INTER, INPUT_PULLUP);
inter.interval(5); // temps de latence entre deux mesures d'état
inter.setPressedState(LOW); // Etat du bouton actif
}
void loop()
{
// Mise à jour de l'état de inter : bouton pressé ou non ?
inter.update();
// Agir en fonction de l'état du bouton
if ( inter.pressed())
{
Serial.println("Bouton appuyé");
}
if ( inter.released())
{
Serial.println("Bouton relaché");
}
}
Ce qui simplifie le code, je t'en fais une version à 4 boutons.
Cas C, les entrées sont en INPUT_PULLUP, je ne mets pas de PULLUP EXTERNE, , je n'appuie sur aucun BP et je mesure la tension sur les entrées:
1=5V
2=5V
3=5V
4=5V
J'appuie sur le BP2 et je mesure sur les entrées 1=1.8V
2=0V 3=1.76V 4=1.75V
J’appuie sur BP1 et BP2
1=0V
2=0V 3=1.097V 4=1.089V
Pour les mesures en Gras, j'aurais dû trouver 5V.
Si je mets un PULLUP EXTERNE (malgré que les entrées soient INPUT_PULLUP), alors je trouve 5V
Donc dans le cas C, si tes entrées sont déclarée en INPUT_PULLUP et si tu appuie sur un seul BP, toutes les entrées passent à un niveau bas, sauf si tu leur ajoute un PULLUP EXTERNE
Ahhh, ok, je comprend mieux, merci pour l'explication.
@jpbbricole, j'ai tenté la modification de mon code en retirant le pinMode() et en mettant .attach(INTER, INPUT_PULLUP) en lieu et place de .attach(INTER), et j'ai bien un changement de comportement sur mes résultats, cela me sort maintenant des id aléatoires lors de l'appui sur mes boutons, et non plus toujours l'id zéro. Ce qui semblerait correspondre avec les résultats de tes tests @jef59 dans l'exemple C que tu as réexpliqué... Je pense donc que je suis bon pour faire mes tests avec des pullup externes. Je vous tiendrai informé de mes résultats.
Effectivement, étant donné qu'il s'agissait d'un type byte, je me suis dis que j'allais tombé sur un problème en l'utilisant en tant qu'integer. Mais je vois que ce n'est pas le cas. Merci pour la précision
Pour le reste, j'ai malheureusement toujours un aléa malgré l'ajout de pullup externes en préservant le type INPUT_PULLUP...
Nous sommes d'accord sur le fait que la résistance pullup doit se placer entre le +5v et la broche I/O (selon ce que j'ai pu voir à ce sujet sur le net) ?
J'ai directement soudé la résistance sur les interrupteurs comme ceci :
Oui, c'est juste.
Pour essayer autre chose, déconnectes tout, as toujours des aléas?
Ensuite, avec un fil fais un pont entre GND et la pin 2, qu'as tu dans le moniteur?
PS: Charges mon sketch du post#30, je l'ai essayé "vrai"
J'essaierai ça demain. Mais j'ai fais la belle bêtise du débutant en effectuant mon montage final en ayant testé chaque composant unitairement... Je ne me doutais pas qu'il me serait possible d'avoir ce genre d'aléa avec plusieurs interrupteurs... Donc là, ça va être un peu chiant pour tout retirer, car j'ai serti des câbles pour être plus propre (les 4 I/O sont sur un port unique soudé sur une breadbord, et tous les éléments connectés à l'arduino sont soudés aussi plutôt que d'utiliser les broches dupont, histoire que le tout soit plus solide dans le temps. Je ne ferais pas 2 fois la connerie en tout cas...
Et pour information, j'ai aussi testé ton code, et il ne s'agit même pas d'un aléa en fait... Les 4 I/O reçoivent l'information à priori... voilà l'output que j'ai en appuyant uniquement sur le premier bouton :
C'est inutile de déclarer tes entrées en INPUT_PULLUP si tu mets un PULLUP externe avec des résistances.
Moi sur mon montage, j'ai 5k, mais c'est un peu arbitraire de ma part, tu peux mettre moins.
De mon côté, j'ai negligé un aspect du câblage de ma maquette à BP, je l'avais conçu pour fonctionner avec un PULLUP externe, et elle ne peux fonctionner correctement que comme cela.
(Sur la maquette, mes R de PULLUP ont un commun que je reliais ou non au 5V par 1 fil.
Quand ce fil est en l'air, les 4 R PULLUP externes sont tout de même reliées entre elles, et quand un BP est appuyé sur une voie, mes R PULLUP externes forment un pont Diviseur sur les autres entrées, ce qui explique le 1.8V au lieu de 5V)
Je suis désolé de vous avoir indiqué une voie éronnée.
Mais mon erreur me suggére que tu dois avoir une erreur de câblage similaire.
Je vais tâcher de tester ça en rentrant du boulot ce soir. En me levant ce matin et en jetant un coup d'oeil avec la tête un peu moins dans le guidon, j'ai eu l'impression de voir une de mes soudures qui débordait un peu... Je vais tâcher de refaire tout ça au propre. J'ai acheté des lunettes loupes, parce qu'avec mes yeux de taupe, j'ai potentiellement fais une erreur bête de ce style. Et vu que vous avez l'air tous les 2 d'accord sur le fait que ça provienne d'un problème de câblage, je ne peux que me rendre à l'évidence
Je vous tiendrai informé suite à mes modifications.
On peut en déduire que les 2 lamelles identifiées + et - sont les 2 electrodes de la LED interne. Le - doit etre connecté au GND de l'arduino et le + (via éventuellement une résistance pour limiter le courant) connecté à une sortie de ton Arduino et c'est toi qui doit commander l'illumination de cette LED par programme.
Les 2 autres lamelles correspondent à un simple switch avec "latch" puisque c'est ce modele que tu as commandé. Tu connectes une lamelle au GND et l'autre à une entrée de ton Arduino. Pull-up interne ou externe à ton choix.