- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 62

Thema: Drei Led´s mit einem Taster unabhängig von einander schalten

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Die Schleife "while Taster = 0" setzt einen prellfreien Kontakt voraus. Auch scheint das Licht nicht anzubleiben, wenn der Taster losgelassen wird. Oder habe ich da nen Denkfehler?

    Mein erster Versuch würde jetzt so aussehen:
    Code:
    $regfile = "attiny13.dat"
    $hwstack = 16
    $swstack = 16
    $framesize = 24
    $crystal = 1200000
    
    
    Taster Alias Pinb.4
    'Led1 : Portb.0
    'Led2 : Portb.1
    'Led3 : Portb.2
    
    
    Dim Taste As Bit
    Dim Tastealt As Bit
    Dim Zeit As Word
    Dim Ledspeicher As Byte                 'Speichert Zustand der LEDs in einzelnen Bits
    
    Ddrb = &B00000111
    Portb = &B00110000
    
    Ledspeicher = &B00110111                                    'damit das erste mal kurz Tasten gleich alle Ausgänge setzt, falls nocht nicht alles bestückt ist.
    
    Do
       Gosub Tastercheck
       Gosub Szeit
       Gosub Licht
    
    Loop
    End
    
    
    Tastercheck:
       Debounce Taster , 0 , Taste_zu
    
       Debounce Taster , 1 , Taste_offen
    
    Taste_zu:
       Taste = 1
    Return
    Taste_offen:
       Taste = 0
    Return
    
    Szeit:
       If Taste = 0 Then
          If Tastealt = 1 Then
             If Zeit < 500 Then                                 'wurde nur kurz gedrückt, dann ein-/ausschalten
                Gosub Schalten
             End If
             Reset Tastealt
          End If
       End If
       If Taste = 1 Then
          If Tastealt = 0 Then
             Set Tastealt
             Zeit = 0
          End If
          Waitms 1
          Incr Zeit
       End If
    
    Return
    
    Licht:
       If Taste = 1 Then
    
          Select Case Zeit
    
             Case 500 : Portb = &B00110001                      'bit 4 immer an, wegen Pullup am Tastereingang
    
             Case 1000 : Portb = &B00110010                     'bit 5 immer an, wegen Pullup an offenem Eingang
    
             Case 1500 : Portb = &B00110100
    
             Case 2000 : Portb = &B00110011
    
             Case 2500 : Portb = &B00110101
    
             Case 3000 : Portb = &B00110110
    
             Case 3500 : Portb = &B00110111
    
             Case Is >= 4000 : Zeit = 499
    
          End Select
    
       End If
    
    Return
    
    Schalten:
       If Portb > &B00110000 Then                               'Wert größer Pullups
         Ledspeicher = Portb
         Portb = &B00110000
       Else
         Portb = Ledspeicher
       End If
    
    Return
    Zweite Idee mit zusätzlichem Eingang für ~65 Sekunden Licht:
    Code:
    $regfile = "attiny13.dat"
    $hwstack = 16
    $swstack = 16
    $framesize = 24
    $crystal = 1200000
    
    
    Taster Alias Pinb.4
    Tasterzeit Alias Pinb.5
    
    'Led1 : Portb.0
    'Led2 : Portb.1
    'Led3 : Portb.2
    
    
    Dim Taste As Bit
    Dim Tastealt As Bit
    Dim Zeit As Word
    Dim Ledspeicher As Byte                                     'Speichert Zustand der LEDs in einzelnen Bits
    Dim Wtimer As Word
    
    Ddrb = &B00000111
    Portb = &B00111000
    
    Ledspeicher = &B00111111                                    'damit das erste mal kurz Tasten gleich alle Ausgänge setzt, falls nocht nicht alles bestückt ist.
    
    Do
       Gosub Tastercheck
       Gosub Szeit
       Gosub Licht
    
    Loop
    End
    
    
    Tastercheck:
       Debounce Taster , 0 , Taste_zu
    
       Debounce Tasterzeit , 0 , Taste_zeit
    
       Reset Taste
    
    Return
    
    Taste_zu:
       Set Taste
       Wtimer = 0
    Return
    
    Taste_zeit:
       Wtimer = 65535
    Return
    
    Szeit:
       If Taste = 0 Then
          If Tastealt = 1 Then
             If Zeit < 500 Then                                 'wurde nur kurz gedrückt, dann ein-/ausschalten
                Gosub Schalten
             End If
             Reset Tastealt
          End If
       End If
    
       If Taste = 1 Then
          If Tastealt = 0 Then
             Set Tastealt
             Zeit = 0
          End If
          Waitms 1
          Incr Zeit
       End If
    
       If Wtimer >= 1 Then
          Decr Wtimer
          If Wtimer = 0 Then
             If Portb > &B00110000 Then
                Gosub Schalten
             End If
          End If
       End If
    Return
    
    Licht:
       If Taste = 1 Then
    
          Select Case Zeit
    
             Case 500 : Portb = &B00111001                      'bit 4 immer an, wegen Pullup am Tastereingang
    
             Case 1000 : Portb = &B00111010                     'bit 5 immer an, wegen Pullup an offenem Eingang
    
             Case 1500 : Portb = &B00111100
    
             Case 2000 : Portb = &B00111011
    
             Case 2500 : Portb = &B00111101
    
             Case 3000 : Portb = &B00111110
    
             Case 3500 : Portb = &B00111111
    
             Case Is >= 4000 : Zeit = 499
    
          End Select
    
       End If
    
    Return
    
    Schalten:
       If Portb > &B00110000 Then                               'Wert größer Pullups
         Ledspeicher = Portb
         Portb = &B00110000
       Else
         Portb = Ledspeicher
       End If
    
    Return
    Beide ungetestet, da keine passende Hardware hier. Werden die ganzen Zeiten halbiert und waitms auf 2 erhöht, verdoppelt sich die Laufzeit des Lichttimers. wtimer darf natürlich nicht größer werden.
    Geändert von peterfido (15.03.2013 um 22:56 Uhr) Grund: Codeänderung
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Ähnliche Themen

  1. Roboter mit einem Taster an und aus schalten!?
    Von Bammel im Forum Elektronik
    Antworten: 56
    Letzter Beitrag: 10.02.2010, 18:53
  2. Antworten: 11
    Letzter Beitrag: 31.01.2010, 16:25
  3. Einfach nur mit Taster eine LED ein und aus schalten ?
    Von Ferdinand im Forum Assembler-Programmierung
    Antworten: 2
    Letzter Beitrag: 13.06.2008, 09:08
  4. LED mit Taster ein/aus schalten
    Von sampe im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 16.09.2006, 10:55
  5. Problem mit LED´s an Output Matrix und einem Taster
    Von MrQu im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 16.10.2005, 18:13

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress