Witam!
Stworzyłem sobie układ do komunikacji pomiędzy atmega 8 i siemensem a60.
Układ działa - komunikacja w obie strony jest OK, lecz mam problem z kodem, a mianowicie: chcę aby atmega po otrzymaniu sygnału trzech różnych telefonów wyłącza na 10s przekaźnik, a później z powrotem załączała. Program działa poprawnie do momentu wyświetlenia numeru telefonu dzwoniącego, ale później nie chce przejść do pętli, która na razie dla prób ma tylko wyświetlać napis na lcd. Z góry dziękuje!!! Poniżej zamieszczam kod. Numer telefonu oczywiście fikcyjny.
Stworzyłem sobie układ do komunikacji pomiędzy atmega 8 i siemensem a60.
Układ działa - komunikacja w obie strony jest OK, lecz mam problem z kodem, a mianowicie: chcę aby atmega po otrzymaniu sygnału trzech różnych telefonów wyłącza na 10s przekaźnik, a później z powrotem załączała. Program działa poprawnie do momentu wyświetlenia numeru telefonu dzwoniącego, ale później nie chce przejść do pętli, która na razie dla prób ma tylko wyświetlać napis na lcd. Z góry dziękuje!!! Poniżej zamieszczam kod. Numer telefonu oczywiście fikcyjny.
$regfile = "m8def.dat"
$crystal = 8000000
Baud = 9600
Config Serialin = Buffered , Size = 200
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , Rs = Portd.7
Cursor Off
Enable Interrupts
Declare Sub Odczytaj_sprzetowy_uart
Declare Sub Oproznij_bufor
Declare Sub Wyslij
Dim Bufor As Byte
Dim Ring As Byte
Dim Uart_txt As String * 20
Dim Ringtxt As String * 20
Dim Dzw As Byte
Dim Dzwtxt As String * 5
Dim Dzwoniacy As String * 9
Dim Kod As Byte
Dim Wlacz As Byte
Dzwtxt = ": +48"
Ringtxt = "RING"
Waitms 100
Print "ATX0" ; Chr(13) 'Odpowiadaj
Waitms 100
Print "ATZ" ; Chr(13) 'Ustaw domyślnie
Waitms 100
Print "ATE0" ; Chr(13) 'WYLACZ ECHO
Waitms 100
Print "AT+CLIP=1" ; Chr(13) 'Wlaczanie prezentacji numeru
Waitms 100
Gosub Oproznij_bufor
Locate 1 , 1
Lcd "Koniec ini"
Wait 1
Cls
Do
Locate 1 , 1
Lcd "dziala "
Bufor = Ischarwaiting() 'Sprawdz czy bufor pełny
If Bufor = 1 Then
Gosub Odczytaj_sprzetowy_uart
Ring = Instr(uart_txt , Ringtxt)
If Ring > 0 Then 'Jeśli telefon dzwoni
Waitms 100
Gosub Odczytaj_sprzetowy_uart
Gosub Odczytaj_sprzetowy_uart
Wait 1
Print "ATH" ; Chr(13) 'Rozłącz się
Wait 1
Gosub Oproznij_bufor 'Opróżnij bufor ze smieci
Cls : Lcd "RING" : Wait 1
Dzw = Instr(uart_txt , Dzwtxt)
Dzw = Dzw + 9
Dzwoniacy = Mid(uart_txt , Dzw , 11)
Cls
Locate 1 , 1
Lcd Dzwoniacy
Wait 1 'Wyłuskaj numer dzwoniacego
Cls
If Dzwoniacy = "604604604" Or Dzwoniacy = "604604604" Or Dzwoniacy = "604604604" Then
Gosub Wyslij
End If
End If
End If
Loop
End
Odczytaj_sprzetowy_uart:
Uart_txt = ""
Do 'Odbierz znak po znaku
Kod = Inkey()
Uart_txt = Uart_txt + Chr(kod) 'Zapisz w Uart_txt
Bufor = Ischarwaiting() 'Zakoncz jeśli CR lub brak znaku
Loop Until Bufor = 0 Or Kod = 13
Return
Oproznij_bufor:
Do
Kod = Inkey() 'Czyści bufor
Bufor = Ischarwaiting()
If Bufor > 0 Then Wlacz = 0
Loop Until Bufor = 0
Return
Wyslij:
Cls
Locate 1 , 1
Lcd "działa"
Locate 2 , 1
Lcd "dobrze"
Wait 10
Cls
Return