commit 6dc284cbeca22df244df94c64cfe54e63e59e383 Author: Nixiews Date: Mon May 18 10:07:16 2026 +0200 Téléverser les fichiers vers "/" diff --git a/clavier.ino b/clavier.ino new file mode 100644 index 0000000..e6b9c8a --- /dev/null +++ b/clavier.ino @@ -0,0 +1,87 @@ +const byte ROWS = 4; +const byte COLS = 4; + +char keys[ROWS][COLS] = { + {'1', '2', '3', 'A'}, + {'4', '5', '6', 'B'}, + {'7', '8', '9', 'C'}, + {'*', '0', '#', 'D'} +}; + +byte rowPins[ROWS] = {9, 8, 6, 7}; +byte colPins[COLS] = {5, 4, 2, 3}; +const byte RELAY_PIN = 10; + +const String CODE_ON = "1234"; +const String CODE_OFF = "5678"; +const byte CODE_LEN = 4; + +String saisie = ""; +bool relaisActif = false; + +char lastKey = 0; +unsigned long lastTime = 0; +const unsigned long DEBOUNCE = 150; + +char scanKeypad() { + for (byte r = 0; r < ROWS; r++) { + for (byte i = 0; i < ROWS; i++) { + pinMode(rowPins[i], INPUT_PULLUP); + } + pinMode(rowPins[r], OUTPUT); + digitalWrite(rowPins[r], LOW); + delayMicroseconds(10); + + for (byte c = 0; c < COLS; c++) { + pinMode(colPins[c], INPUT_PULLUP); + delayMicroseconds(10); + if (digitalRead(colPins[c]) == LOW) { + while (digitalRead(colPins[c]) == LOW); + delay(20); + return keys[r][c]; + } + } + } + return 0; +} + +void setup() { + Serial.begin(9600); + pinMode(RELAY_PIN, OUTPUT); + digitalWrite(RELAY_PIN, HIGH); + Serial.println("Prêt."); +} + +void loop() { + char key = scanKeypad(); + if (key != 0) { + unsigned long now = millis(); + if (key != lastKey || (now - lastTime) > DEBOUNCE) { + lastKey = key; + lastTime = now; + + saisie += key; + Serial.print("Saisie : "); + Serial.println(saisie); + + // Tronque si trop long + if (saisie.length() > CODE_LEN) { + saisie = saisie.substring(saisie.length() - CODE_LEN); + } + + if (saisie == CODE_ON) { + relaisActif = true; + saisie = ""; + Serial.println("Relais ON permanent."); + } else if (saisie == CODE_OFF) { + relaisActif = false; + saisie = ""; + Serial.println("Relais OFF."); + } + } + } else { + lastKey = 0; + } + + digitalWrite(RELAY_PIN, relaisActif ? LOW : HIGH); +}