-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Taster zum Stellen wie bei Digitaluhr u.a.

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.08.2005
    Ort
    Berlin
    Alter
    52
    Beiträge
    239

    Taster zum Stellen wie bei Digitaluhr u.a.

    Anzeige

    Hallo Ihr,

    im Augenblick habe ich echt keine Idee, wie ich in Bascom einen Taster zum Stellen von Parametern (Uhrzeit, Messwertevorwahl etc) programmieren kann.
    Ich möchte dafür nur einen Taster benutzen, der folgendermaßen funktioniert: beim kurzen Betätigen wird ein Wert um 1 erhöht, beim längeren drücken des Tasters wird nach einer kurzen Zeit ein automatischer Repeat dazugeschalten, so das der zu stellende Wert schnell hochzählt. So wie man das halt von vielen Geräten kennt.
    Ich Suche keinen fertigen Code (wenn den aber jemand hat,... ) ,
    ein kurzer Schubs in die richtige Richtung würde mir schon reichen.
    Ich hatte die Idee, über einen zusätzlichen Timer und einer Hilfsvariablen zu schauen, ob der Taster länger als 1s gedrückt worden ist. Aber irgendwie gefällt mir die Idee nicht, dafür einen extra Timer benutzen zu müssen - es sei denn , es geht nicht anders.

    Habt Ihr einen Rat für mich?
    Gruß Dirk

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Ich denke es geht ohne Timer.
    Erstmal den Tasrer abfragen und eine kurze Zeit warten um ihn zu entprellen. Dann schonmal +1 durchführen. Das wird ja auch jeden Fall gebraucht, egal wie lange er gedrückt wird. Dann eine Sekunde warten und prüfen ob der Taster immer noch gedrückt ist.
    Wenn ja, dann GOSUB schnell_zählen Sonst END IF.

    Aber das eine Sekunde warten behindert den Programmablauf ggf. In der Zeit kann nichts anderes gemacht werden. (Außer INT auslösen)

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.08.2005
    Ort
    Berlin
    Alter
    52
    Beiträge
    239
    Hallo Marco,

    also doch mit wieder mit Timer, wegen der 1s - oder?
    Ich hatte noch die Idee, auf das Loslassen des Tasters zu testen.
    Wenn Zeit H/L -> L/H kleiner 1s, dann 1 Impuls. Eventuell einen Interupteingang benutzen.
    Wenn innerhalb 1s nicht losgelassen wurde (kein L/H), dann repeat

    Gruß Dirk

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Alles, was du sagst, < 1 s, > 1 s, etc. hat irgendwas mit Zeit zu tun. Irgendwer muß also irgendwas zählen, da geht's nicht vorbei
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    also doch mit wieder mit Timer, wegen der 1s - oder?
    waitms 1000
    da wird eine Sekunde nichts gemacht außer abwarten was danach geschehen soll.
    Ist übrigens Codesparender als wait 1

    Das kannst du aber so nur machen wenn während des stellens keine anderen Operationen ausgeführt werden müssen. Interrupts werden in dieser Zeit dennoch behandelt.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.08.2005
    Ort
    Berlin
    Alter
    52
    Beiträge
    239
    Hallo Marco,

    dann müsste ich also alles, außer der Tastaturabfrage in Interuptroutinen auslagern? Also Aktualisierung von Werten im LCD usw.

    Gruß Dirk

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Wenn sowas passieren soll ja.
    Dann wäre aber ein externer INT für den Taster und ein Timer evtl doch die bessere Lösung?!

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    47
    Beiträge
    2.556
    ...hab`s gerade selber vor ein paar Tagen eingebaut, mit zwei Tastern stellt man Variable T vor/zurück :

    Code:
    Dim T As Word
    Config Pinc.4 = Input
    Config Pinc.3 = Input
    
    do
    If Pinc.4 = 0 Then
          Waitms 80
          If Pinc.4 = 0 Then
          Incr T
          End If
       End If
    
       If Pinc.3 = 0 Then
          Waitms 80
          If Pinc.3 = 0 Then
          Decr T
          End If
       End If
    print T
    loop
    end
    Danke an Alle, die uns bei der erfolgreichen 1.000€-Aktion der IngDiba unterstützt haben! | https://www.hackerspace-bremen.de | http://www.pixelklecks.de |

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.08.2005
    Ort
    Berlin
    Alter
    52
    Beiträge
    239
    Hallo Andree,

    vielen Dank für den Tip. Probiere ich heute Abend gleich mal aus. Ich kann das schlecht abschätzen, aber reichen die 80ms zum rechtzeitigen Loslassen das Tasters nach einer Ziffer aus?

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.08.2005
    Ort
    Berlin
    Alter
    52
    Beiträge
    239
    Hallo Andree,

    hat funktioniert
    Leider bin schon etwas älter, sprich langsamer, und mußte daher die Verzögerung auf 120ms einstellen.
    Nochmals vielen Dank.

    Gruß Dirk

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •