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

Mój pierwszy program - obsługa RC5 działa błędnie.

marmat 06 Lut 2010 17:07 1572 8
REKLAMA
  • #1 7653015
    marmat
    Poziom 20  
    Witam zacząłem właśnie zabawę z Bascomem , nie wiem jak zrobić aby odebranie poprawnego kodu było sygnalizowane krótkim piknięciem , piszczy mi ciągle .
    
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    
    Config Portd.4 = Output
    Config Portd.5 = Output
    Portd.4 = 0
    Portd.5 = 0
    Wy Alias Portd.4
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
    
    Config Rc5 = Pind.2
    
    
    Dim Address As Byte , Command As Byte
    
    Enable Interrupts
    
    Do
    Getrc5(address , Command)
    Command = Command And &B01111111
    If Command = 1 Then Wy = 1 :
    If Command = 1 Then Sound Portd.6 , 100 , 100 :
    If Command = 2 Then Wy = 0 :
    If Command = 2 Then Sound Portd.6 , 500 , 100 :
    
    Cls
    
    
    Lcd "Adres:" ; Address
    
    Lowerline
    
    Lcd "Komenda:" ; Command
    Waitms 100
    
    Loop
    


    Proszę poprawić tytuł - regulamin p.11.1
    [zumek]


    Dodano po 3 [godziny] 23 [minuty]:

    zrobiłem coś takiego i działa :
    
    Do
    Getrc5(address , Command)
    Command = Command And &B01111111
    If Command = 1 Then Wy = 1 :
    
    If Command = 2 Then Wy = 0 :
    
    If Command = 1 Then Gosub Dzwiek :
    If Command = 2 Then Gosub Dzwiek1 :
    
    
    
    Cls
    
    
    Lcd "Adres:" ; Address
    
    Lowerline
    
    Lcd "Komenda:" ; Command
    Waitms 100
    
    Loop
    
    
    Dzwiek:
    
    Sound Buzer , 3 , 100
    Waitms 5
    Buzer = 1
    Return
    
    Dzwiek1:
    
    Sound Buzer , 3 , 700
    Waitms 15
    
    Buzer = 1
    Return
    


    Dodano po 19 [minuty]:

    Nie wiem dlaczego Bascom wywala mi błąd jak wpiszę End if ?
    Bez tego jest ok ale nie mogę zrobić warunku Else ?
    
    Do
    Getrc5(address , Command)
    Command = Command And &B01111111
    If Command = 1 Then Wy = 1 :
    End If
    If Command = 2 Then Wy = 0 :
    End If
    If Command = 1 Then Gosub Dzwiek :
    End If
    If Command = 2 Then Gosub Dzwiek1 :
    Else Then Gosub Dzwiek2 :
    End If
    


    Nie wiem o co chodzi ?
  • REKLAMA
  • #2 7654314
    Logan
    Poziom 30  
    A gdzie masz "Loop" ?? od pętli "Do... Loop"
  • REKLAMA
  • REKLAMA
  • #5 7655938
    marmat
    Poziom 20  
    Proszę o wyrozumiałość , to moja pierwsza potyczka z Bascomem i z tąd te szkolne problemy . Usunięcie Then dalej zwraca błąd , nie wiem dlaczego nie mogę tu zastosować End If ani Else .Zrobiłem to co chciałem w inny sposób , ale chcę się dowiedzieć na przyszłość . .
    Zrobiłem tak :
    
    Do
    Getrc5(address , Command)
    Command = Command And &B01111111
    If Command = 1 Then Wy = 1 :
    If Command = 2 Then Wy = 0 :
    If Command = 1 Then Gosub Dzwiek :
    If Command = 2 Then Gosub Dzwiek1 :
    If Address = 0 Then Gosub Dzwiek2 :
    
    
    
    
    Cls
    
    
    Lcd "Adres:" ; Address
    
    Lowerline
    
    Lcd "Komenda:" ; Command
    Waitms 100
    
    Loop
    
    
    Dzwiek:
    
    Sound Buzer , 3 , 100
    Waitms 5
    Buzer = 1
    
    
    Dzwiek1:
    
    Sound Buzer , 3 , 700
    Waitms 15
    Buzer = 1
    
    Dzwiek2:
    If Command <> 1 Then Sound Buzer , 3 , 500 :
    If Command <> 2 Then Sound Buzer , 3 , 500:
    
    Buzer = 1
    
    Return
    

    Program ten działa tak jakby odbierał ciągle Adres-255 i komenda-127 i w tym czasie miga LCD i nie odbiera z pilota , czym to jest spowodowane - obsługą przerwania ?
    Jeszcze jedno czy można zrobić warunek w jednej linii :
    
    If Command <> 1 Then Sound Buzer , 3 , 500 :
    If Command <> 2 Then Sound Buzer , 3 , 500:
    

    Jeżeli komenda jest różna od 1 i 2 czy trzeba tak jak ja to napisałem powyżej ?
  • REKLAMA
  • #6 7655950
    Logan
    Poziom 30  
    Etykiety Dzwiek i Dzwiek1 muszą kończyć się poleceniem Return.

    Dodano po 4 [minuty]:

    marmat napisał:

    Jeszcze jedno czy można zrobić warunek w jednej linii :
    
    If Command <> 1 Then Sound Buzer , 3 , 500 :
    If Command <> 2 Then Sound Buzer , 3 , 500:
    

    Jeżeli komenda jest różna od 1 i 2 czy trzeba tak jak ja to napisałem powyżej ?


    Możesz napisać:

    
    If Command <> 1 OR Command <> 2 Then Sound Buzer, 3, 500
    
  • #7 7655979
    marmat
    Poziom 20  
    Tak z tym Return to jasne przeoczyłem - dzięki
  • #8 7658763
    LED5W
    Poziom 34  
    Co do składni IF...THEN...ELSE...END IF.
    Jak wiesz, w BASCOMie każde polecenie możesz oddzielić znakiem nowej linii lub dwukropkiem.
    IF [warunek] THEN [polecenie]

    Nie ma tu dwukropka. Jest to jedno polecenie.
    IF [warunek] THEN
    [polecenie]
    END IF

    Tu są osobne polecenia. BASCOM musi wiedzieć gdzie się kończy IF.

    Może niezbyt dobrze to wyjaśniłem, ale zrób sobie najprostszy program, który nic nie robi - sama instrukcja IF... i na końcu END. Spróbuj różnych kombinacji a szybko załapiesz jak to można wpisać.

    Ja stosuję 1. zapis, gdy jest tylko 1 polecenie do wykonania i nie ma ELSE. Drugi we wszystkich innych przypadkach.
  • #9 7658884
    marmat
    Poziom 20  
    Dziękuję za wytłumaczenie , pobawię się to najlepsza szkoła , ale dobrze jak ktoś podpowie coś fachowego , początki są trudne ale powoli do przodu :-))
REKLAMA