Interrupteur Reed / ILS

Effectivement tu as raison, si 2 5 et 6 sont appuyés en même temps, on verra aussi 3 appuyé.
C'est pourtant ce qui est fait dans la librairie keypad. Je ne m'étais pas rendu compte que ça ne fonctionnait pas dans tous les cas. Il faut dire qu'on appuie rarement sur plus de 2 touches à la fois.

Je me suis mal exprimé - la question n’est pas de savoir si on voit un HIGH ou pas à un autre endroit, c’est est-ce qu’on le lit et est ce qu’on détecte de faux boutons appuyés, non ?

Édit/ je vois ce que vous voulez dire - faut que je teste pour voir la configuration exacte du scan, il me semblait qu’il y avait activation que d’une seule ligne et colonne

Cela fonctionne aussi, mais il faut avoir 65 fils entre le clavier et la partie électronique. Avec une matrice, il faut 16 fils.

vous avez 100% raison (of course, une fois que c'est dit :slight_smile: )

je viens de faire le test avec ce code

#include <Keypad.h> // https://github.com/Chris--A/Keypad

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns

//define the symbols on the buttons of the keypads
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 7, 6, 5, 4 };
// Connect keypad COL0, COL1, COL2 and COL3 to these Arduino pins.
byte colPins[COLS] = {11, 10, 9, 8};

//initialize an instance of class NewKeypad
Keypad membraneKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);

void setup() {
  Serial.begin(115200);
}

void loop() {
  // Fills membraneKeypad.key[ ] array with up-to 10 active keys.
  membraneKeypad.getKeys();  // Returns true if there are ANY active keys. we don't test here so that the loop can always test states

  for (int i = 0; i < LIST_MAX; i++) { // Scan the whole key list.
    switch (membraneKeypad.key[i].kstate) {  // Report active key state : IDLE, PRESSED, HOLD, or RELEASED
      case PRESSED:
        if ( membraneKeypad.key[i].stateChanged) {  // Only find keys that have changed state.
          Serial.print(membraneKeypad.key[i].kchar);
          Serial.println(" PRESSED.");
          membraneKeypad.key[i].stateChanged = false;
        }
        break;
      case HOLD:
        // Serial.print(membraneKeypad.key[i].kchar);
        // Serial.println(" HOLD.");
        break;
      case RELEASED:
        if ( membraneKeypad.key[i].stateChanged) {  // Only find keys that have changed state.
          Serial.print(membraneKeypad.key[i].kchar);
          Serial.println(" RELEASED.");
          membraneKeypad.key[i].stateChanged = false;
        }
        break;
      case IDLE:
        if ( membraneKeypad.key[i].stateChanged) {  // Only find keys that have changed state.
          Serial.print(membraneKeypad.key[i].kchar);
          Serial.println(" IDLE.");
          membraneKeypad.key[i].stateChanged = false;
        }
        break;
    }
  }
}

j'ai appuyé sur 2, puis 5 puis 6 et j'ai eu cela à l'écran:

le moniteur série (à 115200 bauds) affichera

2 PRESSED.
5 PRESSED.
3 PRESSED.
6 PRESSED.
3 RELEASED.
6 RELEASED.
3 IDLE.
6 IDLE.
2 RELEASED.
5 RELEASED.
2 IDLE.
5 IDLE.

donc comme vous l'aviez indiqué

Si on met un 1 sur R1, les autres rangées en haute-impédances, on verra les colonnes C2 et C3 à 1image

Donc la bibliothèque vous enduit d'erreur si vous n'avez pas les diodes. et pourtant la doc disait bien

Version 3.0 has just been posted (19 July 2012) and was rewritten to support multi-keypresses by default. But for those who still need the original single-keypress functionality, the library is fully backwards compatible.

You won't need external resistors or diodes because the library uses the internal pullup resistors and additonally ensures that all unused column pins are high-impedance.

comme quoi il ne faut pas croire tout ce qu'on lit sur internet :wink:

bonsoir
un échiquier un peu avancé

Salut, effectivment tu as moins de fils, mais il te faut 16 entrees au lieu de 8.
A moins qu il soit possible d utiliser un MUX pour les 16 entrees de la matrice.

Hello, bien vu ! C est exactement ce type de projet que je suis en train de faire. Un core XY pour déplacer un électroaimant sous le plateau et des aimants dans chaque pièces.