[Besoin d'aide] Arduino ProMicro avec 74hc166 (bouton pour clavier)

Bonjour,
J'ai un Arduino Pro micro pour créer un projet de clavier,
Voici le tutoriel que j'ai suivis en anglais j'ai fait exactement la même chose mais ca ne fonctionne pas chez moi.

Chez moi ils indiquent que j'ai toujours les boutons appuié , quand j'appuie dessus ca ne fait rien et quand je le débranche non plus.

Pouvez vous m'expliquer mon erreur avec les photos et le programme en dessous ?

Merci a vous

Tutoriel : Tutoriel Youtube

Photo du cablage:





Photo du retour

Code:

int ioSelect = 2;
int clockPulse = 3;
int dataOut = 4;
int j;
int value;

byte switchVar =0;

void setup() {
  // put your setup code here, to run once:
  pinMode(ioSelect, OUTPUT);
  pinMode(clockPulse, OUTPUT);
  pinMode(dataOut, INPUT);
  
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  byte dataIn = 0;
  digitalWrite(ioSelect, 0);
  digitalWrite(clockPulse, 0);
  digitalWrite(clockPulse, 1);
  digitalWrite(ioSelect, 1);

  for(j = 0; j < 8; j++){
    value = digitalRead(dataOut);
    Serial.print("Boutton Position: ");
    Serial.println(j);
    Serial.print("Boutton Value: ");
    Serial.println(value);
    if(value){
      int a = (1 << j);
      dataIn = dataIn | a;
      
    }
    digitalWrite(clockPulse, LOW);
    digitalWrite(clockPulse, HIGH);
  }
  if(switchVar != dataIn){
    switchVar = dataIn;
    Serial.print("dataIn DEC: ");
    Serial.print(dataIn, DEC);
    Serial.println();
    Serial.print("dataIn BIN: ");
    Serial.print(dataIn, BIN);
    Serial.println();
  }
  delay(5000);
  
}

Bonjour

Certaines plaques d'essais sont partgées en deux zones pour les 4 lignes horizontales utilisées en général pour l'alimentation -> Absence de continuité d'une zone à l'autre
continuité

(En observant la face inférieure on peut parfois observer la discontinuité des barres conductrices horizontales)

Bonjour,

Sur les breadboard ou les rails d'alimentation sont coupés les marquages lignes rouge et ligne bleu sont aussi coupés.

OK, bon à savoir pour ce repérage par marquage
(J'ai quelques breadboard à rails fractionnés mais sans marquage de couleur sur la face supérieure, d'où le reflexe du rertournement de la plaque !!))

Bonjour,
J'ai vérifier et j'ai une continuité sur toute la ligne mais l'info est bon a savoir pour d'autre plaque

Donc mon erreur ne vient pas de la :confused:

Voici les essaye que j'ai effectué:
J'ai changer de carte (Arduino Uno) meme resultat
J'ai débrancher les 3 fils en 2- 3 - 4
Même résulta, je pense donc que mon problème est au niveau du code :confused:

Avez vous des idées ?

hello, tu as une erreur de code

digitalWrite(ioSelect, 0);
digitalWrite(clockPulse, 0);
digitalWrite(dataOut, 1); //ici, c'est digitalWrite(clockPulse,1);
digitalWrite(ioSelect, 1);

Hello, oui je l'ai vue et j'ai corrigé il y a aussi :
int a = (a << j); ==> int a = (1 << j);

mes le problème est toujours le même :confused: rien ne ce passe de plus

Up :confused:

hello
j'ai beau chercher, tout est /semble bon.

à moins que:
je viens de verifier, ta boucle mets 21millisecondes pour se faire
puis elle attends 5 secondes pour refaire un tour
autrement dit:
chaque bouton n'est scruté qu'une fois toutes les 5021 millisecondes
peux tu refaire tes tests en virant la tempo de 5 secondes

ton prog avec l'affichage du temps de boucle ( j'ai laissé ta tempo, a toi de la virer)

int ioSelect = 2;
int clockPulse = 3;
int dataOut = 4;
int j;
int value;

byte switchVar =0;
unsigned long deb=0;
void setup() {
  // put your setup code here, to run once:
  pinMode(ioSelect, OUTPUT);
  pinMode(clockPulse, OUTPUT);
  pinMode(dataOut, INPUT);
  
  Serial.begin(115200);
}

void loop() {
  deb=millis();
  byte dataIn = 0;
  digitalWrite(ioSelect, 0);
  digitalWrite(clockPulse, 0);
  digitalWrite(clockPulse, 1);
  digitalWrite(ioSelect, 1);

  for(j = 0; j < 8; j++){
    value = digitalRead(dataOut);
    value = 1;
    Serial.print("Boutton Position: ");
    Serial.println(j);
    Serial.print("Boutton Value: ");
    Serial.println(value);
    if(value){
      int a = (1 << j);
      dataIn = dataIn | a;
      
    }
    digitalWrite(clockPulse, LOW);
    digitalWrite(clockPulse, HIGH);
  }
  if(switchVar != dataIn){
    switchVar = dataIn;
    Serial.print("dataIn DEC: ");
    Serial.print(dataIn, DEC);
    Serial.println();
    Serial.print("dataIn BIN: ");
    Serial.print(dataIn, BIN);
    Serial.println();
  }
  Serial.print("temps de boucle = ");
  Serial.print(millis()-deb);
  Serial.print(" milli-secondes ");
  delay(5000);
  
}

Bonjour, j'ai essayer mais toujours rien :confused:

Je ne comprend pas là

desolé, il faut virer le forcage de value.

Bonjour,
faut savoir ?
"pinMode(dataOut, INPUT);"

C'est dataOut vu du coté 74HC166, donc une entrée arduino.

oui, ça porte à confusion

peu importe ...
ce qu'il faudrait faire comme test, c'est le débrancher côté 74hc166 pour le mettre tantôt au gnd, tantôt au + 5v, et voire si on rentre bien que des 0 ou que des 1 (ou 255)

le dernier prg que j'ai posté, comprend une ligne pour forcer la lecture de valeur à 1
cette ligne m'a été utile pour debogage
j'ai oublié de la virer et notre ami à testé avec cette ligne
donc il reponds que la lecture ne se fait pas ( et pour cause)
je le lui ai fait remarquer, et nous attendons son retour

Bonjour,
Merci pour vos aides,
voici ce que j'ai quand j'ai enlever le forcage:

la vitesse du moniteur est en accord avec celle du begin dans la setup?

J'ai mis Delay(21)