Arduino: Problème de multiplexage boutons avec transistor

Arduino: Problème de multiplexage boutons avec transistor

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je débute en arduino, et j'aimerais augmenter le nombre de boutons poussoirs sur l'arduino en utilisant le même nombre d'entrées/sorties sur la carte, en utilisant les transistors NPN.

J'ai fait un petit montage test avec 2x4 boutons où chaque rangée de 4 boutons est pilotée par un transistor. J'arrive sans problème a recupere l'état des boutons, même en appuyant simultanément, sauf dans le cas où j'appuie sur deux boutons reliés à la même sortie de l'arduino, et que j'appui sur un autre bouton.

schema 2x4 boutons arduino

Si j'appuie sur 1 et 5, et aussi sur 3 par exemple, l'arduino m'affichera sur le Serial Monitor que les boutons 1, 5 et 3 sont appuyés, mais aussi le 7 relié à la même sortie que le 3, sans que j'appuie dessus. J'ai fait plusieurs tests dans le code, dans le montage, des recherches sur le web, en essayant de comprendre qu'est ce qui n'allait pas, sans trouver.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
char donne[8];

void setup() {
  Serial.begin(9600);  
   for (int i=4; i<7; i++)
       pinMode(i, INPUT_PULLUP);
    for (int i=0; i<8; i++)
    donne[i]='0';

   pinMode(3, OUTPUT);
   pinMode(2, OUTPUT);
   digitalWrite(3, LOW);
   digitalWrite(2,HIGH);

}

void loop() {
  for (int i=0; i<8; i++)
    donne[i]='0';

  if (digitalRead(4)==false)
    donne[0]='1';
  if (digitalRead(5)==false)
    donne[1]='1';
  if (digitalRead(6)==false)
    donne[2]='1';
  if (digitalRead(7)==false)
    donne[3]='1';
digitalWrite(2,LOW);
digitalWrite(3, HIGH);
  if (digitalRead(4)==false)
    donne[4]='1';
  if (digitalRead(5)==false)
    donne[5]='1';
  if (digitalRead(6)==false)
    donne[6]='1';
  if (digitalRead(7)==false)
    donne[7]='1';

     digitalWrite(3, LOW);
  digitalWrite(2,HIGH);


    Serial.println(donne);

}

Voila le code arduino aussi.

J'espère avoir été clair, et désolé pour les éventuelles erreurs de code/montage/d'orthographes.

Je vous remercie pour l'aide que vous pourriez m'apporter! :)

Édité par matthieul92

+0 -0

entre la ligne 29 et 30 ainsi que 40/41 est-ce que tu as essayé de mettre un delay ? je suis pas sur que le changement d'état du transistor soit assez rapide par rapport à ta vitesse de lecture. (mais la je dit pe une bêtise, je débute aussi)

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte