logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega8][Bascom]Regulator jasności LED - problem

fotoman 10 Cze 2010 22:04 2333 2
REKLAMA
  • #1 8176843
    fotoman
    Poziom 14  
    Witam,

    Jestem w trakcie pisania programu obsługującego regulację jasności LED za pomocą przycisków. Ma to działać na zasadzie:
    1. Naciśnięcie i przytrzymanie przycisku 1 - rozjaśnianie diody (diod) od zera do 100% - w momencie puszczenia przycisku zapamiętanie stanu
    2. Naciśniecie i przytrzymanie przycisku 2 - ściemnianie diody (diod) od 100% lub poziomu zapamiętanego do zera lub niższego poziomu niż początkowy.

    Obecnie program wykonuje rozjaśnianie i ściemnianie ale w następujący sposób:
    1. Naciśnięcie i/lub przytrzymanie przycisku 1 - rozjaśnienie od 0 do 100%
    2. Adekwatnie przycisk 2 - ściemnianie od 100% do 0%


    Nie bardzo wiem jak ruszyć dalej, fragment odpowiadający za rozjaśnienie wygląda tak:

     
    Do
    If S1 = 0 Then                                    
     Waitms 25
     If S1 = 0 Then
    
     If I = 0 Then
     For I = 0 To 255 
      Pwm1a = I  
     Waitms 10    
      Next I
        I = 255
        End If
     End If          
     End If
    Loop
    


    Proszę o poradę jak do tego dorobić obsługę przycisku, tak aby w trakcie przytrzymania wykonywała się pętla For I=0 To 255, a w trakcie puszczenia zatrzymała się w danym momencie i zapamiętanie stanu.
  • REKLAMA
  • Pomocny post
    #2 8177708
    FastProject
    Poziom 28  
    Na pętli For to chyba nie będzie elegancko, ale się da. Jeśli dobrze zrozumiałem twój zamiar to proponuje coś takiego:

    Dim S1_pressed As Byte
    Dim S2_pressed As Byte
    Dim Pwm_memory
    Do
    
       Waitms 25
    
       If S1 = 0 Then
          S1_pressed = 1
          Incr Pwm1a
          If Pwm1a = 0 Then Pwm1a = 255
       Else
          If S1_pressed = 1 Then
             Pwm_memory = Pwm1a
             S1_pressed = 0
          End If
       End If
    
       If S2 = 0 Then
          S2_pressed = 1
          Decr Pwm1a
          If Pwm1a = 255 Then Pwm1a = 0
       Else
          If S2_pressed = 1 Then
             Pwm_memory = Pwm1a
             S2_pressed = 0
          End If
       End If
    
    Loop
    End


    A jak chcesz koniecznie w pętli to musisz w niej dać warunek np. taki:

       If S1 = 1 Then
          Pwm_memory = Pwm1a
          Exit For
       End If
  • #3 8178667
    fotoman
    Poziom 14  
    Pekinie dziękuję, o to mi chodziło. Zastosowałem oczywiście opcje zaproponowaną przez Ciebie, powoli dopiero poznaje język i sam bym w tym stadium na to nie wpadł.

    Pozdrawiam
REKLAMA