#include <Keypad.h>
const byte ROWS = 4; //4 rangées
const byte COLS = 3; //3 colonnes
char keys[ROWS][COLS] = { //les symboles, déclarés par leur code ASCII dans le tableau à 2 dimension
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = { 8, 7, 6, 5 };
byte colPins[COLS] = {4, 3, 2};
Keypad membraneKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //On initialise une instance de la classe Keypad
const byte tailleMessageMax = 50;
char message[tailleMessageMax + 1]; // +1 car on doit avoir un caractère de fin de chaîne en C, le '\0'
const char marqueurDeFin = '#';
boolean ecouter() {
static byte indexMessage = 0; // static pour se souvenir de cette variable entre 2 appels consécutifs. initialisée qu'une seule fois.
boolean messageEnCours = true;
char c = membraneKeypad.getKey();
if (c != NO_KEY) {
if (c == marqueurDeFin) {
message[indexMessage] = '\0'; // on termine la c-string
indexMessage = 0; // on se remet au début pour la prochaine fois
messageEnCours = false;
} else if (indexMessage <= tailleMessageMax - 1) message[indexMessage++] = (char) c; // on stocke le caractère et on passe à la case suivante
}
return messageEnCours;
}
void setup() {
Serial.begin(115200);
Serial.println("Entrez un chiffre et validez avec #");
}
void loop() {
if (! ecouter()) {
Serial.print("Reçu :"); Serial.println(message);
}
// ici on peut faire autre chose
}