www.mikrocontroller.net

Forum: Compiler & IDEs große Zahl mit 2 Taster eingeben


Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin sicher nicht der erste, der mit wenigen Tasten (in meinem Fall
2) eine große Zahl (0-10000) eingeben muss.
Daher die Frage: Hat jemand sowas schonmal gemacht, und kann mir einen
Tip geben, wie man sowas einigermaßen komfortabel machen kann ?

Vermutlich geht es am besten, wenn die Zahlen bei Anhaltendendem
Tastendruck immer schneller laufen, aber wie macht man sowas ordentlich
? Bei mir wird der dazu erforderliche Code schnell sehr groß...

Autor: JürgenZ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

>Vermutlich geht es am besten, wenn die Zahlen bei Anhaltendendem
>Tastendruck immer schneller laufen, aber wie macht man sowas
>ordentlich ?

Deine Idee ist genau das, was häufig in Textanzeigen bzw. Operator
Panels von SPSen zu finden ist. Dein Code dürfte eigentlich nicht so
schnell so groß werden. Eine üblich Lösung ist, dass immer nach einem
Wechsel von 9->0 bzw. 0->9 bei aufwärts- oder abwärtslaufender
Verstellung der "Cursor" eine Dezimalstelle höher springt und die
Zählung beschleunigt. Allerdings sollte dabei die jeweilige Zahl nicht
schneller als 200...500ms wechseln, damit man (größere oder ältere
Menschen haben längere Reaktionszeiten) schnell genug anhalten kann.
Mit losgelassener Taste bleibt die Verstellung zunächst in der
jeweiligen Stelle und springt erst nach ca. 3 sec eine Dezimalstelle
zurück.

Ein Beispiel:

Dein Wert steht auf 0 und du willst 5207 eingeben, die
Autoinkrementzeit ist 500ms.

Taste "aufwärts" drücken und halten:

Dein Zähler läuft nach oben von 0-->9 (10*0,5s),
springt dann auf die Zehnerstelle 10-->90 (10*0,4s)
springt dann auf die Hunderterstelle 100-->900 (10*0,3s)
springt dann auf die Tausenderstelle 1000-->5000 (4*0,2s)

3s warten, dann mit der Taste von 5000 auf 5200 inkrementieren,
3s warten,
3s warten, dann mit der Taste von 5200 auf 5207 inkrementieren
und die "Enter-Taste" drücken.

Gesamtzeit etwa 25...27s ...


Eine andere Variante wäre, dass Du mit der "ENTER"-Taste bei kurzem
Tastendruck die Stelle wechselst, die Du mit der Zifferntaste
verstellen kannst (Cursor der Anzeige müsste dann mit wechseln können).
Erst wenn die ENTER-Taste  ca. 3s lang gedrückt wird, würde der Wert
übernommen.

Bei Eingabe von 5207 würde das ca. 10..12s dauern.


Ggf, könnte ich beides auf einem Butterfly als Demo realisieren, wenn
es was helfen sollte :-) ...

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal ein Beispiel:

http://home.tiscali.de/peterd/appl/soft/c51/thcloc...


Durch langes Drücken der rechten Taste während der Anzeige der Weckzeit
kommt man in den Stellmode, die erste Stelle blinkt und mit der linken
Taste kann man Einzel- oder Dauerpulse zum Hochzählen geben.
Wieder rechte Taste gedrückt geht in die nächste Stelle usw. bis man
alle Digits durchhat.

Ich habe allerdings die Stunden und Minuten-Digits zusammengefaßt, d.h.
beim Stellen zählen sie 0..23 bzw. 0..59 hoch.

Als erste im Stellmenü kann man noch die Weckzeit ein- und ausschalten
(Aus = Stunde >23).

Diese einzelnen Menüpunkte macht die Statemachine im main.c51 und der
Anzeigeroutine wird übergeben, welche Digits blinken sollen.


Peter

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Idee nach jedem 9->0 Übergang die Geschwindigkeit zu erhöhen gefällt
mir. Ich habe das bisher immer in einem Timer Interrupt nach einer
kurzen Zeit angefangen Werte hochzuzählen, und so eine Beschleunigung
erreicht.
Was mir an der 9->0 Lösung jedoch nicht gefällt ist, dass die Zahlen
sofort anfangen schnell zu laufen, wenn der letze Zählerstand auf 9
endete.
Ich habe es jetzt ähnlich realisiert: Nachdem der Zähler 10x erhöht
wurde, wird beschleunigt, nach 20x erhöhen wird weiter beschleunigt
usw.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem Tempo erhöhen hatte ich auch zuerst probiert und fands
Scheiße.

Man ist nahe am Endwert und plötzlich rast man drüber hinaus, weil aufs
hohe Tempo gesprungen wurde.
D.h. man braucht dann noch eine zusätzliche Abwärtstaste, um das zuviel
wieder zu korrigieren, ohne nochmal total rum zu müssen.


Die beschriebene Methode, jeweils 1 oder 2 Digits mit konstantem Tempo
zu zählen, finde ich daher viel ergonomischer.


Peter

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit beschleunigen habe ich das so gemeint (aber eben nicht
geschrieben):
Nach 10x erhöhen (also nach etwa 3s) wird die 10er Stelle im 300ms
Rythmus erhöht, nach weiteren 3s dann die 100er Stelle usw.

Eine Abwärtsfunktion habe ich bereits sowiso integriert, da es ziemlich
dumm ist, wenn man -1 haben möchte, aber dazu +9999 machen muss...

Autor: Lanius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich finde
5 mal linke taste
rechte taste
7 mal linke taste
rechte taste
3 mal linke taste
rechte taste
8 mal linke taste
rechte taste
9 mal linke taste
für 57389 irgendwie besser

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.