Witam,
mam problem ze znalezieniem błędu w programie.
Program ma pracować w 2 trybach: nauki pilota oraz normalnym.
W trybie normalnym po przyciśnięciu przycisku pilota (wcześniej nauczonego) powinien zostać załączony/wyłączony przekaźnik.
Problem polega na tym, że w trybie normalnym przekaźnik reaguje na każdy przycisk pilota, a nie na ten, który jest nauczony.
PC.0 - przekaźnik
PB.2 - przycisk zmieniający tryb
I jeszcze jedno pytanie:
Czy można porównywać ze sobą dwie zmienne? Chodzi mi o linijkę:
bo to chyba ona robi problem.
Dodano po 4 [godziny] 42 [minuty]:
Już wiem przed warunkiem if należy odczytać zmienną z eramu do byte.
Tzn. dodać linijkę:
Oraz zmienić procedurę odbioru kodu RC5:
Teraz wszystko działa jak należy.
mam problem ze znalezieniem błędu w programie.
Program ma pracować w 2 trybach: nauki pilota oraz normalnym.
W trybie normalnym po przyciśnięciu przycisku pilota (wcześniej nauczonego) powinien zostać załączony/wyłączony przekaźnik.
Problem polega na tym, że w trybie normalnym przekaźnik reaguje na każdy przycisk pilota, a nie na ten, który jest nauczony.
PC.0 - przekaźnik
PB.2 - przycisk zmieniający tryb
I jeszcze jedno pytanie:
Czy można porównywać ze sobą dwie zmienne? Chodzi mi o linijkę:
If Address = Zmienna_address And Command = Zmienna_command Thenbo to chyba ona robi problem.
$regfile = "m8def.dat"
$crystal = 1000000
Config Rc5 = Pind.2
Config Int0 = Low Level
Config Portc = Output
Config Portb = Input
Portb = 1
Portc = 1
Dim Address As Byte , Command As Byte , Zmienna_address As Eram Byte , Zmienna_command As Eram Byte , Kod As Bit
Enable Int0
On Int0 Receiverc5
Enable Interrupts
Do
If Pinb.2 = 0 Then
Goto Odbior_pilota
Else
Goto Nauka_pilotow
End If
Loop
'================================================================================
Nauka_pilotow:
If Kod = 1 Then
Zmienna_address = Address
Zmienna_command = Command
Kod = 0
End If
Return
'================================================================================
odbior_pilota:
If Kod = 1 Then
If Address = Zmienna_address And Command = Zmienna_command Then
Toggle Portc.0
Waitms 5
End If
Kod = 0
End If
Return
'================================================================================
Receiverc5:
Disable Int0
Enable Interrupts
Getrc5(address , Command)
Command = Command And &B01111111
Kod = 1
Enable Int0
Return
Dodano po 4 [godziny] 42 [minuty]:
Już wiem przed warunkiem if należy odczytać zmienną z eramu do byte.
Tzn. dodać linijkę:
Dim Zmienna_address1 As Byte , Zmienna_command1 As Byte Oraz zmienić procedurę odbioru kodu RC5:
Odbior_pilota:
Zmienna_address1 = Zmienna_address
Zmienna_command1 = Zmienna_command
If Kod = 1 And Address = Zmienna_address1 And Command = Zmienna_command1 Then
Toggle Portc.0
Waitms 5
Kod = 0
End If
Enable Int0
Return
Teraz wszystko działa jak należy.