- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 2 von 2

Thema: Tastenerkennung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2009
    Beiträge
    8

    Tastenerkennung

    Anzeige

    Powerstation Test
    Hey Leute hoffe ihr könnt mir helfen,
    Möchte gerne eine Taste in der Hauptschleife erkennen und beim drücken in ein Untermenü springen. Mit dem Debounce Befehl bis dahin eigentlich kein Problem. Jetzt sollte aber ein Unterschied darin liegen, wie lange ich die Taste drücke:
    Kurzer Druck -> Nichts passiert (später vielleicht Led odes so schalten).
    Langer Druck -> Untermenü geht auf.

    Habe schon so vieles versucht.
    Wollte Timer1 ca. mit 2 Sekunden zum Überlauf voreinstellen. Falls es zum Überlauf kommt sollte ein Untermenü aufgehen, bis ich dieses wieder mit dem gleichen Taster quitiere und zur Hauptschleife zurück kehre. Falls es nicht zum Überlauf kommt (Taster also nicht 2 Sekunden gedrückt wurde) sollte dieses Untermenü nicht aufgehen, der Timer gestopt und wieder auf den "2 Sekunden Wert" zurück gestellte, eine Led getoggelt und in die Hauptschleife zurück gesprungen werden.

    Ich hoffe Ihr könnt mir helfen, bitte bitte bitte

    Hier meine Bascom Datei

    Code:
    '**********************************************************************************************
    '**********************************************************************************************
    '************************   Variablen Festlegen    ********************************************
    
     Dim A As Byte
    
    '**********************************************************************************************
    '**********************************************************************************************
    '************************      Hauptprogramm     **********************************************
    
     Stop Timer1
     Sound Portd.4 , 800 , 150
    
     Call Lcd_rs232                                             ' Rufe Unterprogramm "Lcd_RS232" auf
    
    
     Do
    
      If A = 1 Then Gosub Lcd_uhrzeit
      'Wenn A =1 , also Taster länger als 2 Sekunden gedrückt, wechsele in Sub LCD_UHRZEIT
    
     Debounce Pinc.1 , 0 , Ledein , Sub
    
    
    
    
     Loop
     End
    
    
    '**********************************************************************************************
    '**********************************************************************************************
    '************************      Unterprogramme     *********************************************
    
     Sub Lcd_rs232:                                             ' Sub Standardbildschirm
    
     Cls
     Locate 1 , 4
     Lcd "RS232 Test"
     End Sub
    
    '------------------------------
     Sub Lcd_uhrzeit:
      Sound Portd.4 , 900 , 250
     Cls
     Locate 1 , 5
     Lcd "Uhrzeit"
     A = 0
     'Variable A wieder auf 0 setzen
     Do
     Debounce Pinc.1 , 0 , Lcd_rs232
     ' Taster 1 nochmal drücken um wieder ins Hauptmenü zu wechseln
     Loop
     End Sub
    
     '------------------------------
    
      Sub Ledein:
     Timer1 = 36736
     'ca. 2 Sekunden bis zum Überlauf
     Start Timer1
     If Pinc.1 = 1 Then
     Stop Timer1
     'Wenn Taster wieder losgelassen wird stoppe den Timer1, ANNSONSTEN KOMMT ES ZUM ÜBERLAUF T1
     Timer1 = 36736
     ' Timer wieder zurücksetzen auf ca. 2 Sekunden, falls es nicht zum Überlauf kam
     Toggle Portd.7
     ' Falls kein Überlauf Toggle LED
     End If
     End Sub
    
    '**********************************************************************************************
    '**********************************************************************************************
    '************************        Interrupts       *********************************************
    
     T1:
     Stop Timer1
     Incr A
     Call Lcd_uhrzeit
     Return

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    13.02.2009
    Ort
    Basel
    Alter
    30
    Beiträge
    52
    Wenn du nichts zeitkritisches in der Hauptschleife machst, könntest du es auch einfach mit Waitms-Befehlen machen:

    Code:
    Do
        'Wurde die Taste herruntergedrückt?
        If PINC.1 = 1 Then
    
            Waitms 500
    
            'Ist die Taste nach 0.5 sek immernoch gedrückt?
            If PINC.1 = 1 Then
                'Wenn ja -> LangSub
                LangSub
    
                'Warten, bis Taste nicht mehr gedrückt ist
                Do
                Loop Until Not PINC.1
                Waitms 50 'Entprellen
            Else
                'Wenn nein -> KurzSub
                KurzSub
            End If
        End If
    Loop
    Nachdem die Taste herruntergedrückt wurde, wartet der Code 500 ms und prüft dann, ob die Taste immernoch gedrückt wird. Wenn ja wird LangSub ausgeführt und gewartet bis die Taste losgelassen wurde. Wenn ansonsten wird der Kurzsub ausgeführt.

Berechtigungen

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

12V Akku bauen