const byte NBCOLS = 16;
const byte NBROWS = 4;
const byte colPins[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2, 14, 15, 16, 17 };
const byte rowPins[] = { 18, 19, 20, 21 };
void actionTouche_1(int valeur)
{
// instructions à exécuter si touche 1
Serial.print("actionTouche n°");
Serial.println(valeur);
Serial.flush();
}
// void actionTouche_2()
// {
// // instructions à exécuter si touche 2
// actionnerBumper(4, 500);
// tournerRoue(17);
// }
// void actionTouche_3()
// {
// // instructions à exécuter si touche 3
// faireUnTruc(parametreDuTruc);
// faireUnAutreTruc();
// }
void (*actionTouche[])(int) = {
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1,
actionTouche_1, actionTouche_1, actionTouche_1, actionTouche_1
};
void setup() {
Serial.begin(115200); // <- 115200 est plus rapide que l'ancien 9600 mais il faut que ton moniteur série (dans Arduino IDE) soit aussi à 115200 !
pinMode(LED_BUILTIN, OUTPUT);
for (byte col = 0; col < NBCOLS; col++) {
pinMode(colPins[col], INPUT_PULLUP);
Serial.print(" PIN Return n°: ");
Serial.print(colPins[col]);
Serial.println(" initialisé HIGH");
}
for (byte row = 0; row < NBROWS; row++) {
pinMode(rowPins[row], INPUT_PULLUP);
Serial.print(" PIN Row n°: ");
Serial.print(rowPins[row]);
Serial.println(" initialisé HIGH");
}
Serial.println(" \t INIT OK");
}
void loop() {
int touche = -1;
byte colonne;
byte rangee;
digitalWrite(LED_BUILTIN, HIGH);
uint32_t timer = micros();
for (byte col = 0; col < NBCOLS; col++) {
// Serial.print("col: " );
// Serial.print(col);
// Serial.print("\t");
if (digitalRead(colPins[col]) == LOW) {
touche = col;
break;
}
}
timer = micros() - timer;
digitalWrite(LED_BUILTIN, LOW);
Serial.print("Temps colonnes: ");
Serial.println(timer);
touche = 15;
digitalWrite(LED_BUILTIN, HIGH);
timer = micros();
// Serial.println(); // afficher la suite sur une nouvelle ligne
if (touche != -1) { // vérifier qu'une colonne est active
colonne = touche;
touche = -1;
for (byte row = 0; row < NBROWS; row++) {
// Serial.print("row: " );
// Serial.print(row);
// Serial.print("\t");
if (digitalRead(rowPins[row]) == LOW) {
touche = row;
break;
}
}
}
timer = micros() - timer;
digitalWrite(LED_BUILTIN, LOW);
Serial.print("Temps lignes: ");
Serial.println(timer);
// touche = 2; // <- Supprimer cette ligne hors du simulateur !!!!!
// Serial.println(); // afficher la suite sur une nouvelle ligne
// if (touche == -1) {
// Serial.println("Aucun switch détecté" );
// }
// else {
// rangee = touche;
// touche = colonne + rangee * 16 + 1;
// Serial.print("Switch " );
// Serial.print(touche);
// Serial.print(" colonne " );
// Serial.print(colonne + 1);
// Serial.print(" rangée " );
// Serial.print(rangee + 1);
// Serial.println(" fermé");
// actionTouche[colonne + rangee * 16](colonne + rangee * 16 + 1);
// }
// for (byte row = 0; row < NBROWS; row++) {
// for (byte col = 0; col < NBCOLS; col++) {
// Serial.print("col: " );
// Serial.print(col);
// Serial.print("\t");
// Serial.print("row: " );
// Serial.print(row);
// Serial.print("\t");
// // actionTouche[col * NBROWS + row](col + row * NBCOLS + 1);
// actionTouche[col + row * NBCOLS](col + row * NBCOLS + 1);
// }
// }
}