Tastatur auf LCD anzeigen

Hallo ich suche schon den ganzen Tag im I-net und finde keine Lösungsansätze. ich habe eine Auwertung von 4 Bit mitdem arduino programmiert. der Arduino wertet mir Mehrfrequenztöne aus. Nun möchte ich diese auf dem LCD Display anzeigen lassen und zwar in der Reihenfolge wie sie gedrückt werden hintereinander. Sprich man drückt
zum Beispiel die tasten 1 und 2 dann ergibt das einmal den 4 bit string 0001 für die Ziffer 1 und 0010 für die Ziffer zwei auf dem Display soll angezeigt werden 12. hat hier jemand einen Lösungsansatz für mich?

Summiere den ashii-code für 0 und gieb die Zahl aus.
Grüße Uwe

okay das ist dann doch zuwenig input für mich :wink:

darkvaqero:
okay das ist dann doch zuwenig input für mich :wink:

Addiere 48 zum Wert den Du von den Tasten erhälst.
Grüße Uwe

mhmmm ...... ähmmm ja no plan.....
meine einzelnen DTMF Töne werden wie folgt ausgewertet
if ((qr11 == 1) && (qr12 == 0) && (qr13 == 0) && (qr14 == 0)&& (qr15 == 1)){ // DTMF-1
digitalWrite(DTMFelse, 1) ;

Das heisst jede gesendete Bitfolge (gesendeter Mehrfrequenz Wählton) gibt mir ein Hihg zurück auf den PIN DTMFelse

leider sin meine Programmierkenntnise zu rudimentär um jetzt zu wissen wie ich diesen erhaltenen Wert nun "speichern" kann und diese da es die erste gewählte Ziffer ist auf dem Display an Position 1 ausgeben kann .In isem Fall also die gewählte >Ziffer 1

Dann poste doch mal den Sketch, den Du schon hast. Mußt Du die 4-Bit-Folge noch von irgendwelchen Pins auslesen, oder gibt es die Bitfolge schon in irgendeiner Variablen?

hier daswasichbis jetzt geschafft habe :
ob das alles korrekt ist keine Ahnung aber es tut was ich will bis jetzt

#include <LiquidCrystal.h>

define RS 8

define E 9

define D4 4

define D5 5

define D6 6

define D7 7

define COLS 16

define ROWS 2

LiquidCrystal lcd(RS,E, D4, D5, D6, D7);
int q11 = A0;// 8870 pin 11
int q12 = A1;// 8870 pin 12
int q13 = A2;// 8870 pin 13
int q14 = A3;// 8870 pin 14
int q15 = A4;// 8870 pin 14
int DTMFA = 2;// DTMF auswertung für A
int DTMFB = 3;// DTMF auswertung für B
int DTMFelse = A5;//DTMF auswertung für alle anderen DTMF Werte
int qr11 ; //Variable für read für 8870 Ausgänge mit Kontrolle q15
int qr12 ; //Variable für read für 8870 Ausgänge mit Kontrolle q15
int qr13 ; //Variable für read für 8870 Ausgänge mit Kontrolle q15
int qr14 ; //Variable für read für 8870 Ausgänge mit Kontrolle q15
int qr15 ; //Variable für read für 8870 Ausgänge mit Kontrolle q15
const int DTMF_1 = 1;
const int DTMF_2 = 2;
const int DTMF_3 = 3;
const int DTMF_4 = 4;
const int DTMF_5 = 5;
const int DTMF_6 = 6;
const int DTMF_7 = 7;
const int DTMF_8 = 8;
const int DTMF_9 = 9;
const int DTMF_0 = 0;
void setup() {
Serial.begin(9600);
pinMode(q11,INPUT);
pinMode(q12,INPUT);
pinMode(q13,INPUT);
pinMode(q14,INPUT);
pinMode (q15,INPUT);
pinMode(DTMFA,OUTPUT);
pinMode(DTMFB,OUTPUT);
pinMode(DTMFelse,OUTPUT);
digitalWrite(DTMFA, 0) ;
digitalWrite(DTMFB, 0) ;
digitalWrite(DTMFelse, 0);
lcd.begin(16, 1);
lcd.setCursor(1,0);
lcd.print("Betriebsbereit");

}
void loop () {
qr11=digitalRead(q11);
qr12=digitalRead(q12);
qr13=digitalRead(q13);
qr14=digitalRead(q14);
qr15=digitalRead(q15);
// Auswertung DTMF-A
if ((qr11 == 1) && (qr12 == 0) && (qr13 == 1) && (qr14 == 1) && (qr15 == 1)) {
digitalWrite(DTMFA, 1) ;
digitalWrite(DTMFB, 0) ;
digitalWrite(DTMFelse, 0) ;
lcdout_A();
}
if ((qr11 == 0) && (qr12 == 1) && (qr13 == 1) && (qr14 == 1)&& (qr15 == 1)) {
digitalWrite(DTMFB, 1);
digitalWrite(DTMFA, 0) ;
digitalWrite(DTMFelse, 0) ;
Serial.print(digitalRead(3));
lcdout_B();
}
if ((qr11 == 1) && (qr12 == 0) && (qr13 == 0) && (qr14 == 0)&& (qr15 == 1)){ // DTMF-1
digitalWrite(DTMFelse, 1) ;
lcd.print(DTMF_1) ;
}
if ((qr11 == 0) && (qr12 == 1) && (qr13 == 0) && (qr14 == 0)&& (qr15 == 1)){ // DTMF-2
digitalWrite(DTMFelse, 1) ;
lcd.print(DTMF_2) ;

}
if ((qr11 == 1) && (qr12 == 1) && (qr13 == 0) && (qr14 == 0)&& (qr15 == 1)){ // DTMF-3
digitalWrite(DTMFelse, 1) ;
}
if ((qr11 == 0) && (qr12 == 0) && (qr13 == 1) && (qr14 == 0)&& (qr15 == 1)){ // DTMF-4
digitalWrite(DTMFelse, 1) ;
}
if ((qr11 == 1) && (qr12 == 0) && (qr13 == 1) && (qr14 == 0)&& (qr15 == 1)){ // DTMF-5
digitalWrite(DTMFelse, 1) ;
}
if ((qr11 == 0) && (qr12 == 1) && (qr13 == 1) && (qr14 == 0)&& (qr15 == 1)){ // DTMF-6
digitalWrite(DTMFelse, 1) ;
}
if ((qr11 == 1) && (qr12 == 1) && (qr13 == 1) && (qr14 == 0)&& (qr15 == 1)){ // DTMF-7
digitalWrite(DTMFelse, 1) ;
}
if ((qr11 == 0) && (qr12 == 0) && (qr13 == 0) && (qr14 == 1)&& (qr15 == 1)){ // DTMF-8
digitalWrite(DTMFelse, 1) ;
}
if ((qr11 == 1) && (qr12 == 0) && (qr13 == 0) && (qr14 == 1)&& (qr15 == 1)){// DTMF-9
digitalWrite(DTMFelse, 1) ;
}
if ((qr11 == 0) && (qr12 == 1) && (qr13 == 0) && (qr14 == 1)&& (qr15 == 1)){ // DTMF-0
digitalWrite(DTMFelse, 1) ;
}
if ((qr11 == 1) && (qr12 == 1) && (qr13 == 0) && (qr14 == 1)&& (qr15 == 1)){// DTMF-*
digitalWrite(DTMFelse, 1) ;
}
if ((qr11 == 0) && (qr12 == 0) && (qr13 == 1) && (qr14 == 1)&& (qr15 == 1)){// DTMF-#
digitalWrite(DTMFelse, 1) ;
}
if ((qr11 == 1) && (qr12 == 1) && (qr13 == 1) && (qr14 == 1)&& (qr15 == 1)){// DTMF-C
digitalWrite(DTMFelse, 1) ;
}
if ((qr11 == 0) && (qr12 == 0) && (qr13 == 0) && (qr14 == 0)&& (qr15 == 1)){// DTMF-D
digitalWrite(DTMFelse, 1) ;
}}
void lcdout_A(){
lcd.clear();
lcd.begin(16, 1);
lcd.setCursor(3,2);
lcd.print("Amtsholung");
delay(2000);
lcd.clear();
lcd.print("Warte Rufnr.");
void setup ();
}
void lcdout_B(){
lcd.clear ();
lcd.begin(16, 1);
lcd.setCursor(3,2);
lcd.print("Aufgelegt");
void setup ();
delay(1500);
lcd.clear();
lcd.begin(16, 1);
lcd.setCursor(1,2);
lcd.print("Betriebsbereit");
void setup ();

Code bitte in die "#" Tags setzen, sonst ist das in der Menge kaum zu lesen. Mittels lcd.print() schreibst Du doch die gewählten Ziffern schon auf das LCD. Allerdings wird in der Funktion "void lcdout_B()" das setup() wieder aufgerufen. Ist das so gewollt?

Wenn ich das setup nicht aufrufe erkennt er mir keine auswertung mehr.
mit demLCD.print sendet er mir immer nur eine zahl an eine stelle
also
lcd.print(DTMF_1): sendet mir auf dasDisplay 1111111111111111 also16 mal1
lcd.print(DTMF_2): sendet mir auf dasDisplay 2222222222222222 also16 mal2
eigentlich sollte es aber auf demDispaly so aussehen 12

Ok, das problem liegt darin begründet. das die Funktion "loop" immer wieder durchlaufen wird, und das bei jedem Durchlauf erneut die Kombination z.b. für die "1" erkannt wird. Du mußt Dir also merken, wenn eine Eingabe erfolgreich erkannt wurde und erst die nächste Eingabe wieder weiterverarbeiten. Wie genau Du jetzt aber erkennst, ob jetzt 2x die 1 gedrückt wurde, oder ob die 1 nur lange gedrückt wurde, hängt von Deiner Hardwarebeschaltung ab.