Forum: Mikrocontroller und Digitale Elektronik Tastenmatrix / 4x4 tastenpad 2 mal abfragen.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von DAVID B. (bastler-david)


Bewertung
0 lesenswert
nicht lesenswert
Hallo
Wie mache ich es wenn ich eine taste 2 mal abfragen möchte um ein ganz 
einfaches Menü zubekommen ?

Meine Vorstellung und das Ergebnis reichen von sollte gehen in der 
Theorie zu geht gar nicht in der Praxis.

Hier mal mein Code Kunstwerk:

keypressed = myKeypad.getKey();

if (keypressed == '3') {// xxx starten
    lcd1.clear();
    lcd1.setBacklight(HIGH);
    lcd1.backlight();
    keypressed = 'E'; ---E um Eingabe von taste 3 zu überschreiben
    if (PinCON)       ------Abfrage ob xxx schön läuft oder nicht
    {
      lcd1.setCursor(0, 0);
      lcd1.print(F("xxx Gestartet"));
    }
    else
    {
      lcd1.setCursor(0, 0);
      lcd1.print(F("xxx Ist Aus"));
    }
    lcd1.setCursor(0, 1);
    lcd1.print(F("druck T1 = an"));  ----- taste 1 auf dem tastenpad
    lcd1.setCursor(0, 2);
    lcd1.print(F("druck T2 = aus"));  ---- taste 2 auf dem tastenpad
    lcd1.setCursor(0, 3);
    lcd1.print(F("Abbrechen Warten"));
    delay(2000);-----zeit zum überlegen und wurst finger umparken.
----------------------Soweit alles ok und geht auch.
Das erneute einlesen der tasten was jetzt folgt übergeht er aber einfach 
?

    keypressed = myKeypad.getKey();
    delay(200);

    if (keypressed == '1') {
      lcd1.setCursor(0, 0);
      lcd1.print(F("Wird Eingeschalten"));
      lcd1.setCursor(0, 1);
      lcd1.print(F("Bitte Warten"));
      digitalWrite(34, LOW);
      delay(1000);
      digitalWrite(34, HIGH);
      lcd1.setBacklight(LOW);
      lcd1.clear();
      keypressed = 'E';
      delay(2000);
    }
    if (keypressed == '2') {
      lcd1.setCursor(0, 0);
      lcd1.print(F("Wird Ausgeschalten"));
      lcd1.setCursor(0, 1);
      lcd1.print(F("Bitte Warten"));
      digitalWrite(34, LOW);
      delay(1700);
      digitalWrite(34, HIGH);
      delay(2000);
      digitalWrite(34, LOW);
      delay(1700);
      digitalWrite(34, HIGH);
      lcd1.setBacklight(LOW);
      lcd1.clear();
      keypressed = 'E';
    }
  }

Jemand eine Idee ?
Danke

: Bearbeitet durch User
von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
DAVID -. schrieb:
> keypressed = myKeypad.getKey();

Niemand weiß, was dieses "myKeypad.getKey" macht.

DAVID -. schrieb:
> keypressed = myKeypad.getKey();
> if (keypressed == '3') {// xxx starten
> ...
>     keypressed = 'E'; ---E um Eingabe von taste 3 zu überschreiben

Das ist Mumpitz, 'E' wird immer von myKeypad.getKey überschrieben, also 
nirgends ausgewertet.

DAVID -. schrieb:
> delay(2000);-----zeit zum überlegen und wurst finger umparken.

Du willst also den Bediener zur Weißglut bringen?
Sowas macht man über Flankenerkennung.
Typisch hat man im Timerinterrupt eine Routine, die Tasten einliest, 
entprellt und Ereignisflags (Flanke) dem Main übergibt.

von DAVID B. (bastler-david)


Bewertung
0 lesenswert
nicht lesenswert
Danke
E wird und soll auch gar nicht ausgewertet werden es dienst NUR dazu den 
gelesenen wert (0-D) zu überschreiben um eine Fehlauswertung zu 
vermeiden.
Es geht in dem teil nur um die taste 1 (1) und taste 2 (2)
if (keypressed == '1') {
if (keypressed == '2') {
Die tasten werden auch nicht per interput ausgewertet sondern nur zu 
bestimmen Zeiten.

Die Funktion myKeypad.getKey ist eigentlich hier gut beschreiben.
https://funduino.de/nr-04-tastenfeld

Dein Problem mit der zeit kann ich nicht nachvollziehen.
es ist nötig das Display ordentlich zu lesen und die finger umzuparken.
wo für 2 sek reichen sollten.

Auf den einbau 2 weiterer tasten wollte ich verzichten.

: Bearbeitet durch User
von Reiner_Gast (Gast)


Bewertung
0 lesenswert
nicht lesenswert
DAVID -. schrieb:
> Wie mache ich es wenn ich eine taste 2 mal abfragen möchte um ein ganz
> einfaches Menü zubekommen ?
>
> Meine Vorstellung und das Ergebnis reichen von sollte gehen in der
> Theorie zu geht gar nicht in der Praxis.

Hi,

schon mal drüber nachgedacht, die Menü Navigation mit einer Statemachine 
abzubilden?

vg

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
DAVID -. schrieb:
> Dein Problem mit der zeit kann ich nicht nachvollziehen.
> es ist nötig das Display ordentlich zu lesen und die finger umzuparken.
> wo für 2 sek reichen sollten.

Kennst Du wirklich jemanden, der soviel Geduld hat?
Die Firmware sollte spätestens nach 0,1s den nächsten Tastendruck 
akzeptieren.

von georg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Die Firmware sollte spätestens nach 0,1s den nächsten Tastendruck
> akzeptieren.

Naja, Sekretärinnen mit 10-Finger-Blind sind eher selten geworden, bei 
Maschinensteuerungen kann es auch etwas langsamer gehen - aber 2 .. 3 
Tasten pro Sekunde sollte man schon drücken können.

Georg

von Ralf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Führe deinen Code im Debugger aus und schau wo es hackt.

von DAVID B. (bastler-david)


Bewertung
0 lesenswert
nicht lesenswert
Ein Debugger hmm müsste ich mich mal einlesen wie so was geht und was 
ich da brauche.

>Kennst Du wirklich jemanden, der soviel Geduld hat?<
>Die Firmware sollte spätestens nach 0,1s den nächsten Tastendruck<
>akzeptieren.<

Du alter Zocker :-)
also ich für mein teil brauche mehr als 100 ms um einen text zulesen und 
dadrauf mit der richtigen taste zureagieren.

Da ich so recht keine Lösung finde und es morgen mittag laufen 
muss(soll) wird mir nix anderes übrig bleiben als 2 eigene Taster zu 
verbauen.
mal sehen ob ich morgen noch eine Erleuchtung bekomme.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.