Arduino-Digitalcode

Wie können Sie den digitalen Code bedienen und an alle Ihre Projekte anpassen?

Einführung

Das Tastenfeld, auch digitales Tastenfeld genannt, ist eine Matrix aus Tasten, deren Zustand (0 oder 1) von einem Mikrocontroller, wie beispielsweise dem Arduino-Board, erkannt werden kann.

Das Tastenfeld ist matrixförmig aufgebaut, d. h. alle Tasten einer Spalte sind mit einem Eingang und alle Tasten derselben Zeile mit einem zweiten Eingang verbunden. Wird eine Taste gedrückt, schließt sie den Stromkreis, indem sie den Eingang der Zeile mit dem Eingang der Spalte verbindet.

Der Vorteil dieser Art von Aufbau besteht darin, dass 16 Tasten mit nur 8 Mikrocontroller-Eingängen gesteuert werden können.

Wie funktioniert ein Tastenfeld?

Das Tastenfeld ist in zwei Bereiche unterteilt: Zeilen und Spalten. Jeder Schnittpunkt zwischen einer Zeile und einer Spalte stellt eine Taste dar.

Wenn eine der Tasten gedrückt wird, werden die entsprechende Zeile und Spalte verbunden.
Arduino erkennt den Tastendruck mithilfe einer sogenannten „Matrix-Scanning“-Technik:
Arduino setzt jeden Zeilen-Pin auf Low und liest die Spalten-Pins aus. Beim Drücken der Taste wird der Spalten-Pin aufgrund des durch den Tastendruck verursachten Kurzschlusses auf Low gesetzt.
So kann Arduino die gedrückte Taste identifizieren.

Um die von uns vorgeschlagenen Projekte abzuschließen, benötigen Sie die Keypad-Bibliothek. Wir werden gleich sehen, wie man sie installiert.

Wie installiere ich die Tastaturbibliothek?

Mit der Tastaturbibliothek können Sie jede beliebige Tastenmatrix bedienen.

Laden Sie dazu zunächst die Bibliothek herunter.

Nach dem Download öffnen Sie den Bibliotheksmanager der Arduino IDE-Software. Wählen Sie die Bibliotheken im ZIP-Format aus:

Anschließend wählen wir die zuvor heruntergeladene Bibliothek aus. Anschließend erhalten wir eine Meldung, dass die Bibliothek installiert wurde:

Wie erstelle ich meinen eigenen digitalen Code?

Wenn Sie kein Tastenfeld haben, können Sie aus mehreren Druckknöpfen selbst eines bauen.

Alle Details dazu finden Sie in unserem Druckknopf-Tutorial.

Gedrückte Zahlen auf der Arduino-Konsole anzeigen

Hinweis: Um Ihre eigenen Schaltpläne zu erstellen, können Sie das digitale Codebild von Fritzing herunterladen. Um es dann auf Fritzing zu übertragen, können Sie sich unser Tutorial dazu ansehen.

Anschließend müssen Sie folgenden Code hochladen, damit der serielle Monitor erkennt, welche Taste Sie gedrückt haben:

#include <Keypad.h>

const byte Ligne = 4; 
const byte Colonne = 4; 
char hexaBouton[Ligne][Colonne] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte Ligne_Pins[Ligne] = {9, 8, 7, 6};
byte Colonne_Pins[Colonne] = {5, 4, 3, 2}; 

Keypad mon_keypad = Keypad( makeKeymap(hexaBouton), Ligne_Pins, Colonne_Pins, Ligne, Colonne); 

void setup(){
  Serial.begin(9600);
}
  
void loop() {
  char keypad_matrix = mon_keypad.getKey();
  
  if (keypad_matrix){
    Serial.println(keypad_matrix);
  }
}

Dies ist das Ergebnis, wenn Sie die Tasten auf der Tastatur drücken:

Geheimcode auf einem digitalen Code

Wir sehen uns nun an, wie man mit einem digitalen Code einen Geheimcode erstellt.

Das kann beispielsweise nützlich sein, um einen Tresor zu öffnen oder ein Tor.

So funktioniert das Programm:

Zuerst leuchtet die rote LED. Wenn Sie dann den Code 0123 eingeben und anschließend D zur Bestätigung drücken, leuchtet die grüne LED auf. Ist der Code falsch und Sie drücken D, blinkt die rote LED.

Wenn Sie die falsche Zahl eingeben, können Sie den Code mit A erneut starten.

Hier ist das Projektdiagramm:

Hier ist der mit dem Projekt verbundene Code:

#include <Keypad.h>
int compteur =0; 
const int led_rouge = 11; 
const int led_verte = 12; 
const byte Ligne = 4; 
const byte Colonne = 4; 

char hexaBouton[Ligne][Colonne] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
char code[5]; 
byte Ligne_Pins[Ligne] = {9, 8, 7, 6}; 
byte Colonne_Pins[Colonne] = {5, 4, 3, 2}; 
Keypad mon_keypad = Keypad( makeKeymap(hexaBouton), Ligne_Pins, Colonne_Pins, Ligne, Colonne); 

void setup(){
  pinMode(led_rouge,OUTPUT); 
  pinMode(led_verte,OUTPUT); 
  digitalWrite(led_rouge, HIGH); 
}
  
void loop(){
  char keypad_matrix = mon_keypad.getKey(); 
  if (keypad_matrix){ 
    code[compteur] =keypad_matrix; 
    compteur+=1; 
    if (keypad_matrix =='A'){
     compteur=0;
    }
    if (compteur ==5){ 
      if (code[0] =='0' && code[1] =='1' && code[2] =='2' && code[3] =='3' && code[4] =='D'){ // Si le code est bon
       digitalWrite(led_rouge, LOW); 
       digitalWrite(led_verte, HIGH); 
      }
      
      if (code[0] !='0' || code[1] !='1' || code[2] !='2' || code[3] !='3' && code[4] =='D'){ 
        digitalWrite(led_verte, LOW); 
        digitalWrite(led_rouge, LOW);
         delay(500);
         digitalWrite(led_rouge, HIGH);
         delay(500);
           }
      compteur=0; 
      }
  }
}