- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 22

Thema: Mit Taster von einem Loop zum nächsten springen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.12.2013
    Beiträge
    21

    Mit Taster von einem Loop zum nächsten springen

    Ich hab gesucht, wurde aber nicht fündig. Das Thema wurde bestimmt schon einmal besprochen. Ich hoffe jemand kann meine Frage beantworten.

    Ich habe in Bascom verschiedene Lauflichter programmiert (LED Blinklichter). Eigentlich ne recht einfache Sache, sie gehen mit einem Schalter an und aus.
    Jetzt möchte ich gerne einen Taster einsetzen mit dem ich die verschiedenen Loops ansteuern kann.

    Leider weis ich nicht welchen Befehl ich dafür benutzen kann um aus einer Loop heraus zu kommen und in die nächste springen kann.
    Und natürlich wie dann zum Schluss der befehl des ausbleibends kommen kann.

    Gruß Glenn

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Nimm keine Loops, nimm Subs.

    PseudoCode:
    Code:
    do
        If taster then incr Modus
       If Modus > AnzahlModi then Modus=1
        select case modus
          case 1
                     Gosub Lichteffekt1
          case 2
                     Gosub Lichteffekt2
    
       end select
    
    loop
    end
    
    Lichteffekt1:
    ...
    return
    
    Licheffekt2:
    ...
    return

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.12.2013
    Beiträge
    21
    Das ist jetzt ein bisschen ausführlicher, aber nun zeigt er mir 3 Fehler bezogen auf "Modus" an.


    Code:
    $regfile = "attiny13.dat"
    $crystal = 1200000
    $hwstack = 0
    $swstack = 0
    $framesize = 0
    
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.3 = Output
    Config Portb.4 = Output
    Config Pinb.0 = Input
    
    
    
    do
       If Pinb.0 = 1 Then Incr Modus
       If Modus > AnzahlModi then Modus=1
       Select Case Modus
       Case 1
          Gosub Lichteffekt1
       Case 2
          Gosub Lichteffekt2
    
       end select
    
    loop
    end
    
    Lichteffekt1:
    
    Portb.1 = 1
    Portb.2 = 0
    Portb.3 = 1
    Portb.4 = 0
    Waitms 100
    Portb.3 = 0
    Portb.4 = 1
    Waitms 100
    Portb.3 = 1
    Portb.4 = 0
    Waitms 100
    Portb.1 = 0
    Portb.2 = 1
    Portb.3 = 0
    Portb.4 = 1
    Waitms 100
    Portb.3 = 1
    Portb.4 = 0
    Waitms 100
    Portb.3 = 0
    Portb.4 = 1
    Waitms 100
    
    return
    
    Licheffekt2:
    
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 1
    Portb.4 = 1
    Waitms 100
    Portb.1 = 0
    Portb.2 = 0
    Portb.3 = 0
    Portb.4 = 0
    Waitms 100
    
    return

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Mcgrizzly123
    Registriert seit
    15.06.2012
    Beiträge
    142
    Hi

    du musst die Variablen Modus und AnzahlModi auch definieren.

    Code:
    $regfile = "attiny13.dat"
    $crystal = 1200000
    $hwstack = 0
    $swstack = 0
    $framesize = 0
    
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.3 = Output
    Config Portb.4 = Output
    Config Pinb.0 = Input
    
    Dim Modus As Integer
    Dim Anzahlmodi As Integer
    Modus = 1
    Anzahlmodi = 2
    
    do
       If Pinb.0 = 1 Then Incr Modus
       If Modus > AnzahlModi then Modus=1
       Select Case Modus
       Case 1
          Gosub Lichteffekt1
       Case 2
          Gosub Lichteffekt2
    
       end select
    
    loop
    end
    
    Lichteffekt1:
    
    Portb.1 = 1
    Portb.2 = 0
    Portb.3 = 1
    Portb.4 = 0
    Waitms 100
    Portb.3 = 0
    Portb.4 = 1
    Waitms 100
    Portb.3 = 1
    Portb.4 = 0
    Waitms 100
    Portb.1 = 0
    Portb.2 = 1
    Portb.3 = 0
    Portb.4 = 1
    Waitms 100
    Portb.3 = 1
    Portb.4 = 0
    Waitms 100
    Portb.3 = 0
    Portb.4 = 1
    Waitms 100
    
    Return
    
    Lichteffekt2:
    
    Portb.1 = 1
    Portb.2 = 1
    Portb.3 = 1
    Portb.4 = 1
    Waitms 100
    Portb.1 = 0
    Portb.2 = 0
    Portb.3 = 0
    Portb.4 = 0
    Waitms 100
    
    Return
    | Mfg |
    | McGrizzly123 |

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    23.12.2013
    Beiträge
    21
    Okay, zumindest bekomme ich jetzt das Programm gespeichert. Habs grad mal auf den Tiny übertragen. Es spielt bei Stromzufuhr sofort den ersten Lichteffekt ab und reagiert nicht auf den Taster oder auf den Reset.
    Ich probier das ganze morgen nach der Arbeit nochmal.
    Schon mal danke bis hier hin...

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von Bow-Hunter Beitrag anzeigen
    Okay, zumindest bekomme ich jetzt das Programm gespeichert. Habs grad mal auf den Tiny übertragen. Es spielt bei Stromzufuhr sofort den ersten Lichteffekt ab und reagiert nicht auf den Taster oder auf den Reset.
    Ich probier das ganze morgen nach der Arbeit nochmal.
    Du drückst die Taste zu lange

    Code:
    If Pinb.0 = 1 Then Incr Modus
    Angenommen dein do-loop benötigt 1ms für einen Durchlauf, dann wird bei jedem Durchlauf Modus inkrementiert!

    Du musst also die Flanke erfassen, wenn das Signal der Taste von 0 auf 1 springt und nur dann Modus inkrementieren.

    Code:
    $regfile = "attiny13.dat"
    $crystal = 1200000
    $hwstack = 0
    $swstack = 0
    $framesize = 0
    
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.3 = Output
    Config Portb.4 = Output
    Config Pinb.0 = Input
    
    Dim Modus As Integer
    Dim Anzahlmodi As Integer
    Dim Taste_old As Bit
    Dim Taste_new As Bit
    
    Modus = 1
    Anzahlmodi = 2
    Taste_new = 0
    
    
    do
    
       Taste_old = Taste_new
       Taste_new = Pinb.0
       If ((Taste_old XOR Taste_new) AND Taste_new) = 1 Then Incr Modus
    
       If Modus > AnzahlModi then Modus=1
       Select Case Modus
       Case 1
          Gosub Lichteffekt1
       Case 2
          Gosub Lichteffekt2
    
       end select
    
    loop
    end
    BASIC ist lange her bei mir, ich hoffe es hat keine Tippfehler.

    Hier noch die Erklärung zum Ausdruck ((Taste_old XOR Taste_new) AND Taste_new):
    (Taste_old XOR Taste_new)
    liefert 1 Wenn sich der Wert von Taste geändert hat, also seit der letzten Abfrage gedrückt oder losgelassen wurde.
    Ich gehe davon aus, dass eine gedrückte Taste eine 1 liefert, das hängt jetzt aber von deiner Hardware ab.

    Der Ganze Ausdruck liefert nur 1 wenn die Taste gedrückt wurde.

    Die Hilfsvariable Taste_new benötigt man, weil sich Pinb.0 zwischen zwei Abfragen ändern könnte.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

Ähnliche Themen

  1. Drei Led´s mit einem Taster unabhängig von einander schalten
    Von p@ty im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 61
    Letzter Beitrag: 10.07.2014, 13:03
  2. von einem zu anderem springen?
    Von robots4-ever im Forum Software, Algorithmen und KI
    Antworten: 2
    Letzter Beitrag: 08.04.2012, 21:24
  3. Screens wechseln mit 2 Taster (oder mit einem Taster)
    Von tordy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 14.07.2009, 14:39
  4. 3 Taster von RN-LCD-Adapter mit einem Port abfragen
    Von masabuana im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 20.07.2007, 13:23
  5. Von Unterprogramm zum Hauptprogrammanfang springen
    Von Hübi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 06.02.2007, 19:15

Berechtigungen

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

LiFePO4 Speicher Test