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);
}
}
}

Testprogramm.ino.ino (2.75 KB)

Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Wie machst Du es bei mehrstelligen Zahlen auf dem Zettel?
alten Wert * 10 + neuen Wert.

Gruß Tommy

Tommy56:
Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Wie machst Du es bei mehrstelligen Zahlen auf dem Zettel?
alten Wert * 10 + neuen Wert.

Gruß Tommy

Hab es mal probiert, weiß jetzt nicht ob du es so meintest.

Lies es nochmal. So ganz richtig ist es noch nicht.

Außerdem entferne bitte die unnötigen Leerzeilen und formatiere den Code ordentlich (+T in der IDE hilft Dir dabei).

Gruß Tommy

Tommy56:
Lies es nochmal. So ganz richtig ist es noch nicht.

Außerdem entferne bitte die unnötigen Leerzeilen und formatiere den Code ordentlich (+T in der IDE hilft Dir dabei).

Gruß Tommy

So dürfte es passen.

Ja, aber Dein Code ist sehr schwer lesbar, weil Deine Klammerung und Einrückung nicht gut lesber ist.

Schau Dir mal das Beispiel zum Keypad aus der Keypad-Lib an. Da ist einiges stark anders, als in Deinem Code. Hast Du PullDown-Widerstände am Taster?

Gruß Tommy

Tommy56: Ja, aber Dein Code ist sehr schwer lesbar, weil Deine Klammerung und Einrückung nicht gut lesber ist.

Schau Dir mal das Beispiel zum Keypad aus der Keypad-Lib an. Da ist einiges stark anders, als in Deinem Code. Hast Du PullDown-Widerstände am Taster?

Gruß Tommy

Moin Tommy, ich glaub Sie verstehen nicht was ich meine.

Ich möchte eine zweistellige Zahl anzeigen aber ich weiß nicht wie man dass im Programm schreibt. Am besten wäre dass man die Rau-Taste oder die Sternchen-Taste als bestätiger nimmt.

Ich hab leider kein so ein gutes wissen.

Ich selber arbeite seit diesem Jahr an dem Arduino und es fällt mir immer noch schwer.

Das habe ich Dir doch bereits in #1 geschrieben, wie das geht.

Beschäftige Dich erst mal nur mit der Eingabe. Wenn die sicher funktioniert, kannst Du den Rest aufbauen. Serielle Ausgaben helfen Dir bei der Arbeit.

Gruß Tommy