ESP8266 – 4×4 Tastatur an analogen Pin verwenden

In diesem Artikel zeige ich Dir, wie Du eine 4×4 Tastatur an einem analogen Port des ESP8266 verwenden kannst.

Für ein Hardware-Projekt suchte ich nach einer Lösung, wir eine Tastatur mit maximal 16 Tasten Port-sparend an einem Arduino Mikrocontroller angeschlossen werden kann. Im Artikel zeige ich Dir die dabei entstandene Platine, welche mit drei Pins (VIN, GND, A0) an einen Arduino Mikrocontroller angeschlossen werden kann.

Verwende Bauteile

Elegoo Widerstände Sortiment Kit 525 Stück 1/4W Metallfilm 0 Ohm -10K Ohm

Preis: 11,99 €

2 gebraucht & neu ab 11,99 €

Schaltbild und Platine

Im folgenden Schaltbild zeige ich Dir den Aufbau der Schaltung. Bei der Schaltung handelt es sich um ein Spannungsteilernetz. Mit 7 verschiedenen Widerständen (4,7K und 1K) können hier die Tasten identifiziert werden.

Die Platine kann hier im Shop erworben werden.

Der Aufbau der Schaltung ist hierbei mit der Platine denkbar einfach. Hierzu werden die Pins A0, VIN und GND mit dem Arduino Mikrocontroller verbunden. In meinem Fall verwende ich einen ESP8266 Mikrocontroller.

Sketch und Erklärung

Im Sketch wird mittels der analogRead() Funktion der Wert des analogen Pins A0 gelesen. Der Wert liegt zwischen 0 und 1024. Im nächsten Schritt wird der Wert abgefragt und dadurch die gedrückte Taste der Tastatur identifiziert. Die Werte im Sketch basieren auf einem Versuch mit 3V und können daher bei einer Spannung von 5V abweichen.

String lastKey;

void setup() {
    Serial.begin(9600);

    lastKey = "";
}

void loop() {
 int temp = analogRead(A0);

  if ( temp > 0 ) { 
    String statusNr = "";

    if ( temp > 900 ) {
      statusNr = "1";
    } else if (temp > 500 &amp;&amp; temp < 520) {
      statusNr = "2";
    } else if (temp > 320 &amp;&amp; temp < 355) {
      statusNr = "3";
    } else if (temp > 175 &amp;&amp; temp < 195) {
      statusNr = "4";
    } else if (temp > 160 &amp;&amp; temp < 170) {
      statusNr = "5";
    } else if (temp > 135 &amp;&amp; temp < 150) {
      statusNr = "6";
    } else if (temp > 100 &amp;&amp; temp < 110) {
      statusNr = "7";
    } else if (temp > 95 &amp;&amp; temp < 100) {
      statusNr = "8";
    } else if (temp > 85 &amp;&amp; temp < 94) {
      statusNr = "9";
    } else if (temp > 65 &amp;&amp; temp < 70) {
      statusNr = "0";
    } else if (temp > 260 &amp;&amp; temp < 270) {
      statusNr = "A";      
    } else if (temp > 110 &amp;&amp; temp < 130) {
      statusNr = "B";  
    } else if (temp > 80 &amp;&amp; temp < 90) {
      statusNr = "C";     
    } else if (temp > 60 &amp;&amp; temp < 65) {
      statusNr = "D";     
    } else if (temp > 70 &amp;&amp; temp < 80) {
      statusNr = "*";                          
    } else if (temp > 65 &amp;&amp; temp < 70) {
      statusNr = "#";                          
    }

    if ( statusNr != "" ) {
      if ( lastKey != statusNr ) {
          Serial.print("A0:");      
          Serial.println(temp);
          
          Serial.print("Key pressed: ");      
          Serial.println(statusNr);
          lastKey = statusNr;
      }
    }
  }
}

Ich hoffe euch gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder per E-Mail freue ich mich wie immer 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.