- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Anfängerfrage, Taster als Schalter

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.07.2004
    Beiträge
    178

    Anfängerfrage, Taster als Schalter

    Anzeige

    Praxistest und DIY Projekte
    Hey,

    mein myAVR Board ist da und ich finde es bis jetzt echt serh gut, gab noch keine Probleme.
    Habe schon ein paar lauflichter und solche spielereien gebastelt und hänge nun bei der Funktion einen Taster als Schalter zu benutzen.
    Ich möchte das wenn ich den Taster an Pind.2 drücke das eine Programm läuft und wenn ich den Taster an Pind.3 drücke das andere. Am besten wäre es dann noch das wenn ich beide taster gleichzeitig drücke kein programm mehr läuft.

    Code:
    $regfile = "m8def.dat"                                      ' Prozessortyp ATmega8
    $crystal = 3686400                                          ' Taktrate
    
    Ddrd = &B11100000                                           ' PD5-PD7 auf Ausgang
    Portd = &B00001100                                          ' alle LEDs off, PullUP von PinD2 & 3 An
    
    
    Do                                                          ' Beginn Mainloop
    
     If Pind.2 = 0 Then                                         ' Wenn Taster 1 gedrückt..
    
      Portd.5 = 1
      Waitms 100
      Portd.5 = 0
      Portd.6 = 1
      Waitms 100
      Portd.6 = 0
      Portd.7 = 1
      Waitms 100
      Portd.7 = 0
      Portd.6 = 1
      Waitms 100
      Portd.6 = 0
      Portd.5 = 1
      Waitms 100
     Else                                                       ' sonst...
      Portd.5 = 0
      Portd.6 = 0
      Portd.7 = 0
    
     End If
    
    
     If Pind.3 = 0 Then                                         ' wenn Taster 2 gedrückt...
      Portd.5 = 1
      Portd.7 = 1
      Waitms 300
      Portd.5 = 0
      Portd.7 = 0
      Portd.6 = 1
      Waitms 300
      Portd.6 = 0
     Else                                                       ' sonst...
      Portd.5 = 0
      Portd.6 = 0
      Portd.7 = 0
    
     End If
    
     Loop                                                        ' Ende Mainloop
    End                                                         ' Programmende
    '----------------------------------------------------------

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.01.2004
    Alter
    35
    Beiträge
    645
    Lagere die zwei unterschiedlichen Routinen in Unterroutinen aus. Also mit sub, gosub usw. Dann wirds übersichtlicher!
    MfG Xtreme
    RP6 Test - alles zum Nachfolger des bekannten RP5 im neuen RP6 Forum!

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.07.2004
    Beiträge
    178
    Könntest du mir das bitte mal an einem Beispiel erklären? Verstehe das nämlich nicht so ganz und die Bascom hilfe verwirrt mich gerade nur ...
    Und wie mache ich das denn nun mit der Taster als Schalter Funktion? Ich muss ja irgentwie den zustand vom taster speichern.

  4. #4
    Gast
    Do
    If Pind.2 = 0 Then Gosub Test
    Loop

    Test:
    Portd.5 = 1
    Waitms 100
    Portd.5 = 0
    Portd.6 = 1
    Waitms 100
    und so weiter

    Return




  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    $Crystal usw...

    Dim T1 as Bit
    Dim T2 as Bit

    Do

    If Pind.2 = 0 then toggle T1
    If Pind.3 = 0 then toggle T2
    If T1 = 1 then Gosub Taster1
    If T2 = 1 then Gosub Taster2

    Loop

    Taster1:
    'hier das Programm für Taster1
    Return

    Taster2:
    'hier das Program für Taster2
    Return


    Da in den Unterprogrammen selbst schon Wartezeiten eingebaut sind ist das entprellen der Taster nicht notwendig.
    Aber die Unterprograme laufen voll durch. Durch drücken eines Tasters wird das Programm nicht abgebrochen!
    Um beide als Reset zu verwenden müsste man die Schaltung etwas umbauen. (Und das Progamm anpassen)

    Mit GOSUB wird in ein Unterprogramm gesprungen. Mit RETURN geht es wieder dahin zurück von wo aus gesprungen wurde.

    TOGGLE schaltet den Zustand um. 0 wird 1, 1 wird 0.

    Das Programm ist so noch nicht perfekt. Es wird immer ein Unterprogramm ausgeführt, bis man zufällig zu der Zeit einen Taster drückt, wenn sie abgefragt werden.
    Aber da ich deinen gewünschten Ablauf nicht kenne, kann ich es nicht ändern.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.07.2004
    Beiträge
    178
    Irgentwie bin ich gerade zu dumm. Sitze hier nun 2 Stunden und bekomme es einfach nicht hin eine LED an und aus zu tooglen mitm Taster.
    Wäre sehr nett wenn jemand mal gucken kann was in meinem Code falsch ist oder wie es einfacher geht.

    Code:
    $regfile = M8def.dat
    $crystal = 3686400
    
    
    Ddrd = &B10000000                                           ' PD7 auf Ausgang
    Portd = &B00000100                                          ' PullUP von PinD2 An
    
    Dim T1 As Bit
    
    Do                                                          ' Beginn Mainloop
    
    
    If Pind.2 = 0 Then                                          ' Wenn Taster1 gedrückt, dann..
    Waitms 200                                                  ' 200ms warten
    If Pind.2 = 0 Then Toggle T1                                ' Wenn taster1 immer noch gedrückt, dann Toogle T1
    
    
    If T1 = 1 Gosub An                                          ' wenn T1 = 1, gehe zum Unterprogramm An
    Else Gosub Aus                                               ' sonst gehe zum Unterprogramm Aus
    End If
    Loop
    
    An:
    Portd.7 = 1
    Return
    
    Aus:
    Portd.7 = 0
    Return
    
    End

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.03.2005
    Beiträge
    141
    hast du es schon mal mit dem befehl: DEBOUNCE versucht?

    DEBOUNCE

    Action
    Debounce a port pin connected to a switch.


    Syntax
    DEBOUNCE Px.y , state , label [ , SUB]


    Remarks

    Px.y A port pin like PINB.0 , to examine.
    State 0 for jumping when PINx.y is low , 1 for jumping when PINx.y is high
    Label The label to GOTO when the specified state is detected
    SUB The label to GOSUB when the specified state is detected

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.07.2004
    Beiträge
    178
    Ich bekomme das einfach nicht hin ...

    Kann mir mal bitte jemand den ganzen Code sagen, damit die LED an Portd.7 angeht wenn ich den Taster an Pind.2 drücke. Wenn ich nochmal drücke soll sie ausgehen.

    Danke schonmal.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.07.2004
    Beiträge
    178
    Habs schon alleine hinbekommen !

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Und wir müssen jetzt dumm sterben und werden den fertigen Code nie seh'n

    Er könnte ja den nächsten helfen, die auch das Problem haben und zufällig mal die Suche benutzt haben. Dann müssen die keinen neuen Beitrag eröffnen.

    Ich denke das Hauptproblem in deinem Code war die IF-Abfrage.
    Schau dir den Syntax für IF mal in der Hilfe genau an.
    Entweder:

    IF ... THEN ... ELSE
    Else kann auch wegfallen.

    Oder:

    IF...
    THEN...
    ELSE ...
    END IF

    auch hier kann Else entfallen. Das wichtige ist das End If! Unter THEN können auch noch viele weitere Befehle stehen.

    IF Pind.1 = 0
    THEN A=1
    B=X
    C="Hallo"

    ELSE
    Y=0
    H="H"

    END IF

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen