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.
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#.
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
Vielen Dank füs Veröffentlichen.
Ihr Programm hat mir geholfen den gedanklichen Konten zu lösen
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);
}
}
__________________________________________