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

poradźcie proszę - przełącznik w bascom'ie

bkwrzos 02 Lut 2009 15:36 1350 10
REKLAMA
  • #1 6091870
    bkwrzos
    Poziom 2  
    Witam
    Chciałbym za pomocą tasty (przełącznik monostabilny) włączać i wyłączać miganie diodek. Miganie jest jako podprogram. Przy tym zapisie miganie mam, ale zero reakcji na przełącznik. Jaki zapis do przełącznika bistabilnego, to wiem, ale chciałbym tu najzwyklejszy "guzik", zwierany chwilowo do masy
    
    =======================
    $regfile = "attiny25.dat"
    $crystal = 1000000
    
    Config Pinb.3 = Input                                       'konf.portów
    Config Pinb.4 = Output
    Config Pinb.0 = Output
    
    Portb.3 = 1                                                 'podciągnięcie tasty do +
    Portb.4 = 0                                                 'jw., wył. LEDów
    Portb.0 = 0
    
    Tasta Alias Portb.3                                         'nadanie nazw
    Led1 Alias Portb.4
    Led2 Alias Portb.0
    
    Declare Sub Led
    
    '===================================== tasta 
    Do
    
    If Tasta = 1 Then
    Waitms 25
    If Tasta = 1 Then
    
    Gosub Led
    
    End If
    End If
    
    End                                                         'end
    '=================================== led 
    Sub Led
    
    Led1 = 1                                                    'wygaszone
    Led2 = 1
    Waitms 1000
    
    Led1 = 0                                                    '1
    Led2 = 1
    Waitms 150
    
    Led1 = 0                                                    '2
    Led2 = 0
    Waitms 250
    
    Loop
    End Sub Led
    ==================================
    

    "pomógł" lub kilka punktów - no problem
    z góry dziękuję

    Proszę używać znaczników [code] - uzupełniłem.
    [zumek]
  • REKLAMA
  • REKLAMA
  • #3 6092150
    ujus
    Poziom 13  
    Przeanalizuj jeszcze raz Twój program. Po wciśnięciu ustawiasz Tasta = 1 i tak już pozostaje. Popraw, pokombinuj i będzie dobrze :)
  • REKLAMA
  • #4 6093903
    M. S.
    Poziom 34  
    Kolega napisał:

    Cytat:
    "guzik", zwierany chwilowo do masy


    więc nie zostaje na 1. Faktem jest, że przycisk będzie działał odwrotnie.
  • #5 6094029
    bkwrzos
    Poziom 2  
    Witam
    Wiem o tym, kod, który zamieściłem jest niepełny i przełącznik nie działa, bo nie ma żadnej innej alternatywy.
    Nie wiem po prostu, czy wprowadzić dodatkową zmienną, która będzie zmieniała swój znak przy każdym naciśnięciu i zgodnie ze zmienną będzie przekierowanie do podprogramu z treścią "migaj" albo do podprogramu z "wygaszone". Czy może jest prostsze rozwiązanie.
    Zapewniam, że niezależnie sam też kombinuję i korzystam z tego co mogę się doczytać.
  • #6 6094161
    ujus
    Poziom 13  
    Kolego M.S chodzi mi o sam pinB.3, brak procedurt zerowania

    Kolego bkwrzos potrzebujesz zmienna a nawet dwie zmienne.
  • REKLAMA
  • #7 6094430
    M. S.
    Poziom 34  
    Ponieważ zrobiło się śmieszno i straszno (a może na odwrót) więc poprawiłem program (mam nadzieję że o takie działanie autorowi chodziło)

    '=======================
    $regfile = "attiny25.dat"
    $crystal = 1000000 
    
    Config Pinb.3 = Input                                       'konf.portów
    Config Pinb.4 = Output
    Config Pinb.0 = Output
    
    Portb.3 = 1                                                 'podciągnięcie tasty do +
    Portb.4 = 0                                                 'jw., wył. LEDów
    Portb.0 = 0
    
    Tasta Alias Pinb.3                                          'nadanie nazw
    Led1 Alias Portb.4
    Led2 Alias Portb.0
    
    Declare Sub Led
    
    '===================================== tasta
    Do
    
     If Tasta = 0 Then
        Waitms 25
        If Tasta = 0 Then
           Gosub Led
        End If
     Else
        Led1 = 1
        Led2 = 1
     End If
    Loop
    End                                                         'end
    '=================================== led
    Sub Led
    
        Led1 = 1                                                'wygaszone
        Led2 = 1
        Waitms 1000
    
        Led1 = 0                                                '1
        Led2 = 1
        Waitms 150
    
        Led1 = 0                                                '2
        Led2 = 0
        Waitms 250
    
    
    End Sub Led
    '==================================


    Porównajcie sobie i nie grzeszcie więcej!
    (Testowane na ATMEGA8)
  • #8 6094612
    ujus
    Poziom 13  
    Autor chciał włączać i wyłączać miganie diód(przynajmniej ja tak odbieram) a wg mnie to nie jest zrealizowane:) Ja tu widze - trzyma - działa, nie trzyma - nie działa.
    Nawet gdy dobrze autor napisze sterowanie przyciskiem to i tak momentami to będzie działać jakby chciało ale nie mogło ano ze względu na wait... w podprogramie.
  • #10 6094677
    ujus
    Poziom 13  
    M.S Ty tak zawsze krzyczysz?
  • #11 6096060
    M. S.
    Poziom 34  
    Cytat:
    M.S Ty tak zawsze krzyczysz?


    Nie! Zawsze to żartuję!

    Teraz trochę wariacji na temat:
    
    '=======================
    $regfile = "m8def.dat"
    $crystal = 8000000
    Dim Zmiana As Bit
    Config Pinb.3 = Input                                       'konf.portów
    Config Pinb.4 = Output
    Config Pinb.0 = Output
    
    Portb.3 = 1                                                 'podciągnięcie tasty do +
    Portb.4 = 0                                                 'jw., wył. LEDów
    Portb.0 = 0
    
    Tasta Alias Pinb.3                                          'nadanie nazw
    Led1 Alias Portb.4
    Led2 Alias Portb.0
    
    Declare Sub Czekaj(byval X As Word)
    Zmiana = 0
    '===================================== tasta
    Do
    
    
    
     If Zmiana = 1 Then
    
        Led1 = 1                                                'wygaszone
        Led2 = 1
        Czekaj 50
    
    
        Led1 = 0                                                '1
        Led2 = 1
        Czekaj 15
    
        Led1 = 0                                                '2
        Led2 = 0
        Czekaj 25
    Else
        Czekaj 1
        Led1 = 1                                                'wygaszone
        Led2 = 1
    End If
    
    
    Loop
    End                                                         'end
    
    
    
    Sub Czekaj(byval X As Word)
       Local Y As Word
       For Y = 0 To X
          Waitms 10
          If Tasta = 0 Then
             Led1 = 1                                           'wygaszone
             Led2 = 1
             Waitms 10
             If Tasta = 0 Then
                Do : : Loop Until Tasta = 1
                Toggle Zmiana
                Exit For
             End If
          End If
       Next Y
    End Sub


    Działa dużo sprawniej i nie przypomina oryginału. Poprawę tego kodu pozostawiam wam. Idealny jeszcze nie jest.
REKLAMA