Mit Keypad Zahlen über 9 auf LCD-Display anzeigen

Hallo zusammen,
ich hoffe mir kann einer weiterhelfen.
Ich muss mit dem Keypad eine Zahl eingeben und und so oft soll sich der Motor drehen.
Der Motor dreht sich an einem Sensor vorbei und der zählt die Umdrehnungen und stoppt dann bei der angegebennen Zahl.

Problem:

  • Ich bekomme keine Zahl höher als 9 hin.
  • Der Arduino zählt nur die Impulse als wenn ich 7 drücke stoppt er nach einer Umdrehung.

Ich hoffe mir kann einer weiterhelfen.

Danke im Vorraus.

int t = 1; //Lichtschranke
int r = 1; //Tastfeld
int messwert=0; //Unter der Variablen "messwert" wird später der Messwert der Lichtschranke gespeichert
int tastfeld=0; //Unter der Variablen "tastfeld" wird später der Messwert der Lichtschranke gespeichert
#define S1 A1 //Lichtschranke
#define S2 A2 //Reset-Taster
#define S3 A3 //LED
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //LCD-Bibliothek laden
LiquidCrystal_I2C lcd(0x27, 40, 2 );
//KEYPAD
#include <Keypad.h>
//Hier wird die größe des Keypads definiert
const byte COLS = 3; //3 Spalten
const byte ROWS = 4; //4 Zeilen         //Im Arduinokoffer muss alles verkehrtherum angeschlossen werden
//Die Ziffern/Zeichen:                  //sprich 2 auf 8, 3 auf 7 usw.
char hexaKeys[ROWS][COLS]={
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte colPins[COLS] = { 8, 7, 6 }; //Definition der Pins für die 3 Spalten
byte rowPins[ROWS] = { 5, 4, 3, 2 };//Definition der Pins für die 4 Zeilen
char Taste; //pressedKey entspricht in Zukunft den gedrückten Tasten
Keypad Tastenfeld = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //Das Keypad kann absofort mit myKeypad angesprochen werden

void setup(){
Serial.begin(9600);
pinMode(S1,INPUT);
pinMode(S2,INPUT);
pinMode(S3,OUTPUT);
lcd.init(); //Im Setup wird angegeben, wie viele Zeichen und Zeilen verwendet werden
}

void loop(){
{lcd.backlight();
messwert=digitalRead(S1); //Die Signalausgabe der Lichtschranke wird ausgelesen und unter der Variable „messwert“ gespeichert. Wenn die Lichtschranke unterbrochen wird, speichert der Mikrocontroller den Wert "1", ansonsten "0"
Serial.print("Lichtschrankensignal="); //Ausgabe am Seriellen Monitor: „Lichtschrankensignal="
Serial.println(messwert); //...und im Anschluss der Messwert "1" bei unterbrochener Schranke, ansonsten "0"
tastfeld=digitalRead(Taste);
Serial.print("Tastfeldsignal=");
Serial.println(tastfeld);
//Lichtschranke
if(digitalRead(S1)==HIGH){
Serial.println(t);
lcd.setCursor(14, 0); 
lcd.print(t);
lcd.setCursor(0, 0); 
lcd.print("Lichtschranke");
t++;
delay(1000);
}
// Reset
if(digitalRead(S2)==HIGH){
Serial.println(t);
Serial.println(r);
t = 1;
r = 1;
lcd.setCursor(0, 0);
lcd.clear();
lcd.setCursor(0, 1);
lcd.clear();
lcd.setCursor(0, 0); 
lcd.print("Motor auf 0");
lcd.setCursor(0, 1); 
lcd.print("Tastfeld auf 0");
delay(2000);
lcd.setCursor(0, 0);
lcd.clear();
lcd.setCursor(0, 1);
lcd.clear();
lcd.setCursor(0, 0);
} 
 //Tastfeld
Taste = Tastenfeld.getKey(); // Erkennung der Taste
if(Taste){
Serial.println(Taste);
lcd.setCursor(9,1); 
lcd.print(Taste);
lcd.setCursor(0, 1); 
lcd.print("Tastfeld");  
r++;
delay(100);
}
//LED
if (t == r){ // Wenn Lichtschranke und Tastfeld selbe Zahl haben soll LED an sein
digitalWrite(S3,LOW);
}
else {
digitalWrite(S3,HIGH);
}
}
}

:o

Zahlen bestehen aus mindestens einer Ziffer. Deine Zahlen bestehen aus genau einer Ziffer. Wenn du den Unterschied verstehst, kannst du dein Problem lösen.

zwieblum:
Zahlen bestehen aus mindestens einer Ziffer. Deine Zahlen bestehen aus genau einer Ziffer. Wenn du den Unterschied verstehst, kannst du dein Problem lösen.

wie meinst du das?
stehe auf dem Schlauch.

trotzdem danke für die schnelle Antwort:)

Dann überlege mal was passiert, wenn Du eine mehrstellige Zahl aufschreibst.

vorheriger Wert * 10 + neue Ziffer

Zusätzlich brauchst Du noch eine Taste, die sagt: Eingabe fertig

Gruß Tommy

Wenn Du deinen Variablen Namen gibst, die verdeutlichen, wozu die Variabel dienen soll, wäre es einfacher zu helfen. 't', 'r', 'S1' ... sind recht nichtssagende Namen. Ausserdem solltest Du mal 'Ctrl t' drücken. Dann wird der Code übersichtlicher formatiert ( Einrückungen ).

So wie ich das bisher sehe, wertest Du den gedrückten Ziffernwert überhaupt nicht aus. Du gibst ihn zwar auf LCD und seriellem Monitor aus, das war's aber auch schon. Mit jedem Tastendruck wird dann noch die Variable 'r' inkrementiert. Wozu soll das dienen? Im Prinzip zählst Du damit die Tastendrücke. Aber wozu?

Und das:

    tastfeld = digitalRead(Taste);

verstehe ich überhaupt nicht. 'Taste' soll doch wohl das von der Tastatur gelesene Zeichen sein, und kein Eingangspin.

(deleted)

MicroBahner:
Wenn Du deinen Variablen Namen gibst, die verdeutlichen, wozu die Variabel dienen soll, wäre es einfacher zu helfen. 't', 'r', 'S1' ... sind recht nichtssagende Namen. Ausserdem solltest Du mal 'Ctrl t' drücken. Dann wird der Code übersichtlicher formatiert ( Einrückungen ).

So wie ich das bisher sehe, wertest Du den gedrückten Ziffernwert überhaupt nicht aus. Du gibst ihn zwar auf LCD und seriellem Monitor aus, das war's aber auch schon. Mit jedem Tastendruck wird dann noch die Variable 'r' inkrementiert. Wozu soll das dienen? Im Prinzip zählst Du damit die Tastendrücke. Aber wozu?

Und das:

    tastfeld = digitalRead(Taste);

verstehe ich überhaupt nicht. 'Taste' soll doch wohl das von der Tastatur gelesene Zeichen sein, und kein Eingangspin.

Hallo,
danke für deine Antwort.

Wie schreibe ich dass dann um das er meinen eingebenen Wert nimmt und nicht die Impulse zählt die ich drücke???

mfg Arduinovogel

Um von den Ziffernzeichen '0' ... '9' auf den Zahlenwert 0..9 zu kommen, must Du '0' von dem Ziffernzeichen abziehen. Also z.B.

r = Taste - '0';

Das würde dann mal für eine Ziffer funktionieren.

Mehrstellig geht wie von Tommy schon geschrieben:

r= 10*r + (Taste - '0');

Dann musst Du aber auch vor dem Eingeben der Zahl r zu 0 setzen, und erkennen, wenn Du mit der Eingabe fertig bist, z.B. über die Zeichen '*' oder '#'. Oder Du gibst z.B. grundsätzlich 2 Ziffern ein. Wenn's die Zahl 9 werden soll, denn eben '0' und '9'. Dann kannst Du Zahlen bis 99 eingeben.