- LiFePO4 Speicher Test         
Ergebnis 1 bis 8 von 8

Thema: HEX Codierschalter und If-Then-Elseif

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo 128er,
    die Logik deines ersten Codes ist so:
    If Bedingung1 then
    ...
    Elseif Bedingung2 then
    ...
    Elseif Bedingung3 then
    ...
    Elseif Bedingung4 then
    ...
    Elseif Bedingung5 then
    ...
    Elseif Bedingung6 then
    ...
    Elseif Bedingung7 then
    ...
    End If

    Das zweite sieht so aus:

    If Bedingung1 then
    if Bedingung2 then
    If Bedingung3 then
    If Bedingung 4 then
    Else
    ...
    End If
    Else
    ...
    End If
    Else
    ...
    End If
    Else
    ...
    End If

    Du erkennst sicherlich den Unterschied. Im zweiten Fall kommt er nur weiter zur nächsten Stelle, wenn die Bedingung stimmt.
    Beides scheint für deine Überprüfung nicht ganz geeignet zu sein.
    Wenn du willst, dass der Taster zwischendurch auch wieder losgelassen wird, bevor es mit der Erkennung der nächsten Stelle weitergeht, dann kannst du das über ein Bitwait erreichen. Da der Taster in Ruhestellung eine 1 gibt, wäre das dann
    Biwait Taster, Set
    Dann bleibt die Ausführung solange stehen, bis der Taster losgelassen wird. Danach käme dann ein kurzes Wait, um ein Prellen zu übergehen und dann die nächste Abfrage. Oder du benutzt gleich den Debounce Befehl.
    Mit Bitwait sähe das dann so aus:
    Code:
    Bitwait Taster, Set                                      'Taster losgelassen
    Waitms 20                                                'Prellen abwarten
    Bitwait Taster, Reset                                    'Taster gedrückt
    Stelle1 = PinA
    
    Waitms 20
    Bitwait Taster, Set                                      'Taster losgelassen
    Waitms 20
    Bitwait Taster, Reset                                    'Taster gedrückt
    Stelle2  = PinA
    
    Waitms 20
    Bitwait Taster, Set                                      'Taster  losgelassen
    Waitms 20
    Bitwait Taster, Reset                                    'Taster  gedrückt
    Stelle3  = PinA
    
    Waitms 20
    Bitwait Taster, Set                                      'Taster  losgelassen
    Waitms 20
    Bitwait Taster, Reset                                    'Taster  gedrückt
    Stelle4  = PinA
    Hältst du den Taster gedrückt passiert gar nichts. Drückst du den Taster immer wieder, wird jeweils immer wieder der Wert am Codierschalter übernommen, auch wenn der sich nicht geändert hat.
    Nach 4-maligem Drücken werden die 4 Stellen mit der Vorgabe verglichen. Wenn falsch, geht es wieder von vorne los.

    Vielleicht hilft dir das ja weiter.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    08.06.2011
    Ort
    Ruhrgebiet
    Alter
    36
    Beiträge
    42
    Die Bitwait-Abfrage wie du sie gepostet hast funktioniert von der Sache her sehr gut. Wie könnte ich denn parallel zum Bitwait noch die Leds für die Stellen blinken lassen? Ich habe versucht es folgendermaßen zu lösen

    Code:
    Do
    
    Do
    Toggle Led1
    Waitms 500
    Toggle Led1
    Waitms 500
    Loop Until Taster =  0
    
    
    Bitwait Taster, Set                                      'Taster losgelassen
    Waitms 20
    Bitwait Taster, Reset                                    'Taster gedrückt
    Stelle1 = Pina
    
    Do
    Toggle Led2
    Waitms 500
    Toggle Led2
    Waitms 500
    Loop Until Taster = 0
    
    
    
    Bitwait Taster, Set                                      'Taster losgelassen
    Waitms 20
    Bitwait Taster, Reset                                    'Taster gedrückt
    Stelle2  = PinA
    
     Do
    Toggle Led3
    Waitms 500
    Toggle Led3
    Waitms 500
    Loop Until Taster = 0
    
    
    Bitwait Taster, Set                                      'Taster losgelassen
    Waitms 20
    Bitwait Taster, Reset                                    'Taster gedrückt
    Stelle3 = Pina
    
    
    Do
    Toggle Led4
    Waitms 500
    Toggle Led4
    Waitms 500
    Loop Until Taster = 0
    
    
    Bitwait Taster, Set                                      'Taster losgelassen
    Waitms 20
    Bitwait Taster, Reset                                    'Taster gedrückt
    Stelle4 = Pina
    
    Gosub Vergleichen
    
    Loop
    
    End
    
    Sub Vergleichen
     Do
     If Stelle1 = &B10000000 And Stelle2 = &B00010000 And Stelle3 = &B01000000 And Stelle4 = &B11100000 Then
     Gosub Erfolg
     Else
     Gosub Misserfolg
     End If
     Loop
    End Sub
    Allerdings erfordert das ja einen zweimaligen Tastendruck zur Eingabe. Da erst die Blinkschleife verlassen wird und dann Bitwait kommt. Und ein einbinden des Bitwait in die Until-Bedingung war mir nicht möglich.

    Deshalb hab ich es dann so gestaltet:
    Code:
    Do
    
    Do
    Toggle Led1
    Waitms 500
    Toggle Led1
    Waitms 500
    Loop Until Taster = 0
    
    
                                       'Taster gedrückt
    Stelle1 = Pina
    
    Do
    Toggle Led2
    Waitms 500
    Toggle Led2
    Waitms 500
    Loop Until Taster = 0
    
    
    
                                       'Taster gedrückt
    Stelle2  = PinA
    
     Do
    Toggle Led3
    Waitms 500
    Toggle Led3
    Waitms 500
    Loop Until Taster = 0
    
    
                                        'Taster gedrückt
    Stelle3 = Pina
    
    
    Do
    Toggle Led4
    Waitms 500
    Toggle Led4
    Waitms 500
    Loop Until Taster = 0
    
    
                                       'Taster gedrückt
    Stelle4 = Pina
    
    Gosub Vergleichen
    
    Loop
    
    End
    
    Sub Vergleichen
     Do
     If Stelle1 = &B10000000 And Stelle2 = &B00010000 And Stelle3 = &B01000000 And Stelle4 = &B11100000 Then
     Gosub Erfolg
     Else
     Gosub Misserfolg
     End If
     Loop
    End Sub
    Da werden bei gehaltenem Taster zwar alle Stellen beschrieben. Aber ein manipulieren ist nicht möglich.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Eigentlich eher so:

    Code:
    Do
    
    Do
    Toggle Led1
    Waitms 500
    Toggle Led1
    Waitms 500
    Loop Until Taster =  0
    
    
    Bitwait Taster, Set                                      'Taster losgelassen         == Taster = 1
    Waitms 20
    Bitwait Taster, Reset                                    'Taster gedrückt            == Taster = 0
    Stelle1 = Pina
    
    Do
    Toggle Led2
    Waitms 500
    Toggle Led2
    Waitms 500
    Loop Until Taster = 1                                 'Taster wieder losgelassen
    
    
    
    'Bitwait Taster, Set                                      'Taster losgelassen
    'Waitms 20
    Bitwait Taster, Reset                                    'Taster gedrückt
    Stelle2  = PinA
    
     Do
    Toggle Led3
    Waitms 500
    Toggle Led3
    Waitms 500
    Loop Until Taster = 0
    
    
    'Bitwait Taster, Set                                      'Taster losgelassen
    'Waitms 20
    Bitwait Taster, Reset                                    'Taster gedrückt
    Stelle3 = Pina
    
    
    Do
    Toggle Led4
    Waitms 500
    Toggle Led4
    Waitms 500
    Loop Until Taster = 0
    
    
    'Bitwait Taster, Set                                      'Taster losgelassen
    'Waitms 20
    Bitwait Taster, Reset                                    'Taster gedrückt
    Stelle4 = Pina
    
    Gosub Vergleichen
    
    Loop
    
    End

Ähnliche Themen

  1. ELSEIF als Fehler oder bessere Lösung
    Von alecs im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 07.11.2005, 14:16

Berechtigungen

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

LiFePO4 Speicher Test