-
        

Ergebnis 1 bis 3 von 3

Thema: Loop unterbrechen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.05.2006
    Beiträge
    27

    Loop unterbrechen

    Anzeige

    Hallo alle zusammen!
    Ich hab jetzt endlich mein erstes Projekt (fast) fertig, selbst zusammen gelötet und programmiert!
    Es ist eine RGB Led an einem Attiny2313.
    Naja ich hab mir jetzt folgendes gedacht nachdem ich ein Taster eingelötet habe. Und zwar möchte ich mit dem Taster verschiedene Modi durchgehen.
    Das klappt solang ganz gut bis mein Loop kommt, der die RGB komplett komplett durchfaden soll.
    Die ersten 6 Modi sind normale/zusammengesetzte Farben.
    Wie schaff ich es jetzt, dass der wenn der in dem Loop ist der alle Farben druchfaded jeden Moment abfragt, ob die Taste gedrückt wurde und dann in den nächsten Modi (hier: alle LED's aus) sprint???

    Mein bisheriger Code:

    Code:
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    $baud = 9600
    
    Dim R As Byte
    Dim G As Byte
    Dim B As Byte
    Dim Pwmwert As Byte
    Dim Modus As Integer
    Declare Sub Ledcalling
    
    Config Portd.6 = Output
    Config Portb.1 = Output
    Config Portb.0 = Output
    Config Pind.4 = Input
    Portd.4 = 1
    
    Const On = 1
    Const Off = 0
    
    Config Timer0 = Timer , Prescale = 1
    
    Start Timer0
    
    On Timer0 Pwmroutine
    Enable Timer0
    Enable Interrupts
    
    Led1 Alias Portd.6
    Led2 Alias Portb.1
    Led3 Alias Portb.0
    
    Modus = 1
    
    Do
    
    Debounce Pind.4 , 0 , On_taster1 , Sub
    
    Loop
    
    On_taster1:
    
    If Modus = 8 Then
    Modus = 0
    End If
    
    If Modus = 0 Then
    R = 0
    G = 0
    B = 0
    End If
    
    
    If Modus = 1 Then
    R = 255
    G = 0
    B = 0
    End If
    
    If Modus = 2 Then
    R = 0
    G = 255
    B = 0
    End If
    
    If Modus = 3 Then
    R = 0
    G = 0
    B = 255
    End If
    
    If Modus = 4 Then
    R = 255
    G = 255
    B = 0
    End If
    
    If Modus = 5 Then
    R = 255
    G = 0
    B = 255
    End If
    
    If Modus = 6 Then
    R = 0
    G = 255
    B = 255
    End If
    
    If Modus = 7 Then
    R = 255
    G = 0
    B = 0
    Call Ledcalling
    End If
    
    Modus = Modus + 1
    
    Return
    
    
    Pwmroutine:
      If R > Pwmwert Then
        Led1 = 1
      Else
        Led1 = 0
      End If
    
      If G > Pwmwert Then
        Led2 = 1
      Else
        Led2 = 0
      End If
    
      If B > Pwmwert Then
        Led3 = 1
      Else
        Led3 = 0
      End If
    
      Incr Pwmwert
      If Pwmwert > 255 Then Pwmwert = 0
    Return
    
    Sub Ledcalling
    
    Do
       Do
       Waitms 8
       G = G + 1
       Loop Until G = 255
       Waitms 2040
       Do
       Waitms 8
       R = R - 1
       Loop Until R = 0
       Waitms 2040
       Do
       Waitms 8
       B = B + 1
       Loop Until B = 255
       Waitms 2040
       Do
       Waitms 8
       G = G - 1
       Loop Until G = 0
       Waitms 2040
       Do
       Waitms 8
       R = R + 1
       Loop Until R = 255
       Waitms 2040
       Do
       Waitms 8
       B = B - 1
       Loop Until B = 0
       Waitms 2040
       Loop
    End Sub
    
    End
    Ich hoffe mir kann einer von euch Profis helfen

    Viele Grüße

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.05.2005
    Alter
    26
    Beiträge
    601
    Hi,

    du kanst entweder die Taste auf ein Interrupt legen, der in eine Routine
    springt wenn der Taster gedrückt wurde. Oder du legst in jede Do...Loop
    eine Abfrage, die dann aus der Do...Loop springt.
    Also: If Taster = 0 then Exit Do
    Grüße Furtion

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    07.05.2006
    Beiträge
    27
    Ah das "Exit Do" hab ich gesucht.
    Also könnt ich im Prinzip in jedem Do..Loop abfragen ob der Taster gedrückt ist und wenn ja dann springt der aus dem loop.
    Ich probiers aus und berichte dann obs geklappt hat.
    Vielen dank für die Hilfe.
    Geändert von bomberman_z (10.03.2011 um 19:58 Uhr)

Berechtigungen

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