Folientastatur

Mit der 4×4 Folientastatur Zahlen eingeben am Arduino

Ich habe eine 4×4 Folientastatur bekommen. Damit möchte ich verschiedene Zahlen in den Arduino Uno eingeben, ändern und auch löschen können.

Es gibt eine praktische Library Keyboard auf der Arduino Seite. Die erleichtert die Arbeit ganz erheblich.

Die Tastatur hat links 4 Anschlüsse für die 4 Zeilen, von oben beginnend. Daneben sind die 4 Anschlüsse für die 4 Zeilen von links beginnend. Diese 8 Anschlüsse werden mit Kabeln verbunden zu den Arduino Digital Pins D11…D4. Das finden wir nachher im Programm wieder.

Folientastur am Arduino

Die 4 Zahlen sollen mit den A / B / C / D Tasten ausgewählt werden und dann mit den Ziffern 0-9 neu eingegeben werden können. Die * Taste löscht die gerade aktive Zahl. Die # Taste gibt alle Zahlen seriell zum PC aus, hierbei ist die zur Zeit aktive Zahl groß geschrieben, die anderen sind klein geschrieben.

Ein Beispiel :
Die Zahl A soll 123 werden und dann ausgegeben werden. Dazu drückt man A123#.

folientastatur4x4-ausgabe-200

Mit A*# kann die Zahl A dann wieder gelöscht werden zu 0 und ausgegeben werden.
Das liest sich dann: A – löschen – Ausgabe.

Hier das Programm

// 4x4 Tastatur
// 4 Zahlen eingeben, Zahl A-D
// A-D setzen die aktive Zahl
// 1-9 geben die Zahl ein
// # gibt alles aus
// * setzt die aktive Zahl zu 0
//
// Beispiel: Zahl A soll 12 sein und ausgeben: A12#
// Beispiel: Zahl C soll gelöscht werden auf 0 und ausgeben: C*#
//
// Matthias Busse Version 0.2 3.11.2016

#include < Keypad.h> // http://playground.arduino.cc/code/Keypad#Download

const byte ROWS = 4; // 4 Zeilen
const byte COLS = 4; // 4 Spalten
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {11, 10, 9, 8}; // Zeilen Anschluesse beim Arduino Pin 11-8
byte colPins[COLS] = {7, 6, 5, 4}; // Spalten Anschluesse beim Arduino Pin 7-4
long zahl, zahla=0, zahlb=0, zahlc=0, zahld=0;
bool a=0, b=0, c=0, d=0;

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(38400); // Serielle Ausgabe am PC
}
  
void loop(){
  char key = keypad.getKey();
  
  if (key){
    switch(key) {
    case '*' :                            // Die gerade aktive Zahl löschen 
      if(a) zahla=0; 
      if(b) zahlb=0;
      if(c) zahlc=0;
      if(d) zahld=0;
      zahl=0;
      break;
    case '1' : zahl*=10; zahl+=1; break;  // Die Ziffern 1 bis 0 eingeben
    case '2' : zahl*=10; zahl+=2; break;
    case '3' : zahl*=10; zahl+=3; break;
    case '4' : zahl*=10; zahl+=4; break;
    case '5' : zahl*=10; zahl+=5; break;
    case '6' : zahl*=10; zahl+=6; break;
    case '7' : zahl*=10; zahl+=7; break;
    case '8' : zahl*=10; zahl+=8; break;
    case '9' : zahl*=10; zahl+=9; break;
    case '0' : zahl*=10; zahl+=0; break;
    case 'A' : a=1; b=0; c=0; d=0; zahl=0; break; // Zahl A aktivieren
    case 'B' : a=0; b=1; c=0; d=0; zahl=0; break; // Zahl B aktivieren
    case 'C' : a=0; b=0; c=1; d=0; zahl=0; break; // Zahl C aktivieren
    case 'D' : a=0; b=0; c=0; d=1; zahl=0; break; // Zahl D aktivieren
    case '#' :                                    // alle Zahlen ausgeben
      if(a) Serial.print("A: "); else Serial.print("a: ");Serial.println(zahla); 
      if(b) Serial.print("B: "); else Serial.print("b: ");Serial.println(zahlb);
      if(c) Serial.print("C: "); else Serial.print("c: ");Serial.println(zahlc);
      if(d) Serial.print("D: "); else Serial.print("d: ");Serial.println(zahld);
      Serial.println();
      break; // Ausgabe
    default: break;
    }
  if(a) zahla=zahl;   // Wenn ZahlA aktiv ist, dann zahl in ZahlA übernehmen
  if(b) zahlb=zahl;
  if(c) zahlc=zahl;
  if(d) zahld=zahl;
  }
}

Verwendet wurden:
Arduino Version 1.6.5
Folientastatur für ein paar Euro und Geduld von ebay
8 farbige Drahtbrücken zum Anschluß

von Matthias Busse

2 Gedanken zu „Mit der 4×4 Folientastatur Zahlen eingeben am Arduino

  1. Raphael

    Moin Moin

    Ich möchte mit der Folientastertur eine bis zu 4stellige zahl(Schrittanzahl) eingeben dann auf A drücken und ein Schrittmotor soll sich dann um den eingegebenen Wert drehen. Bei meinem Code (unten) läuft der Motor zur Zeit 200 Schritte rechts rum und dann 200 Schritte links rum. Das funtioniert ohne probleme auch mit anderen Werten. Leider weiss ich nicht wirklich wie ich jetzt mit der Folientastertur die (Schrittanzahl) ändern kann.
    Hätte Sie vielleicht eine idee wie das geht?

    Mit freundlichen Grüßen
    Raphael
    __________________________________________
    int richtungsPin = 3;
    int schrittPin = 2;
    int schrittAnzahl = (200);
    int n;

    void setup() {

    Serial.begin(9600);
    Serial.println(„Starte Test“);

    }

    void loop() {
    delay(1000);

    pinMode(richtungsPin, OUTPUT);
    pinMode(schrittPin, OUTPUT);

    digitalWrite(richtungsPin, HIGH);
    for( n = 0; n < schrittAnzahl; n++) {
    digitalWrite(schrittPin, HIGH);
    delayMicroseconds(3);
    digitalWrite(schrittPin, LOW);

    delay(1);
    }

    delay(1000);

    digitalWrite(richtungsPin, LOW);
    for( n = 0; n < schrittAnzahl; n++) {
    digitalWrite(schrittPin, HIGH);
    delayMicroseconds(3);
    digitalWrite(schrittPin, LOW);

    delay(1);
    }
    }
    __________________________________________

    Antworten

Schreibe einen Kommentar

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