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

[BASCOM] Siemens C35, AT+CMGS, tryb PDU – brak wysyłki SMS, terminal nie reaguje na Ctrl+Z

tms90 14 Lut 2012 18:33 3436 5
REKLAMA
  • #1 10545566
    tms90
    Poziom 10  
    Posty: 37
    Ocena: 1
    Witam
    Mam pewien problem z komendami AT i C35. Planuje zrobić powiadomienie SMS do straży na tym że właśnie telefonie i atmega8. Na początek postanowiłem podłączyć telefon pod PC i sprawdzić w terminalu jak to w ogóle wygląda. Problem pojawił się podczas wysyłania SMS (tryb PDU oczywiście) otóż utworzyłem sobie wiadomość w programie PDUspy i w terminalu wpisuje tak
    AT+CMGS=21 (wyliczone tak: ilość znaków PDU -16 / 2 )
    pokazuje mi się znaczek < i jak wpisze ciąg znaków PDU i nacisnę ENTER to kursor przeskakuje mi na początek tego samego wiersza i nic nie mogę zrobić. Cokolwiek bym wpisał i nacisnę enter kursor skacze na początek wiersza i nic się nie dzieje. Żebym mógł ponownie komunikować się z telefonem muszę odłączyć kabelek i podłączyć go z powrotem. Czy ktoś może mi wytłumaczyć o co chodzi? Próbowałem z tym ctrl+z, próbowałem #026 i to samo :(
    Reszta komend działa poprawnie. Tzn. wszystkich nie sprawdzałem ale udało mi się nawiązać połączenie, sprawdzić stan sieci itp. ;]
    Kabel kupiony dzisiaj w komisie (nowy)
    Terminal z Bascom'a
  • REKLAMA
  • #2 10546176
    Krauser
    Poziom 26  
    Posty: 508
    Pomógł: 124
    Ocena: 12
    Z tego co wiem to ma być: ilość znaków - 2 znaki, bo pierwsze 00 się nie liczy i to podzielone przez 2, np. dla 0011223344 to 4 oktety.
  • REKLAMA
  • #3 10546980
    tms90
    Poziom 10  
    Posty: 37
    Ocena: 1
    Ok. Już doszedłem wystarczy kliknąć Terminal>Send ASCII character i wpisać 26 i enter. To jest ten brakujący u mnie znak <ctrl+z> :) to teraz następne pytanie, trudniejsze. Jak zaprogramować procesor żeby "puszczeniem sygnału" ustawić portx.x ? W pętli głównej skanować cały czas wejście input? w ten sposób ?



    Jak dzwoniłem z innego telefonu na mój numer to w terminalu pojawia się RING. Czyli jeżeli chciałbym oczekiwać na to zdarzenie to robię np. tak?

     dim sygnal as string*4
        ...
        ...
        sygnal=input()
        if sygnal=ring then
        ...
        ...


    czy muszę każdy znak odczytywać po kolei i wpisywać go do zmiennej "sygnal" ?
    No chyba że ktoś miałby lepszy pomysł na sterowanie portami za pomocą GSM. Wiem że można sms ale z tym jest więcej kłopotów.
    Aha i czy w ogóle jest możliwość zablokowania w telefonie wszystkich połączeń przychodzących oprócz jakiegoś tam podanego numeru? No bo jak by dzwonili z jakiegoś konkursu czy coś to by trochę lipa była :)
  • REKLAMA
  • #4 10553608
    tms90
    Poziom 10  
    Posty: 37
    Ocena: 1
    Witam ponownie.
    Przepraszam że tak post pod postem ale widzę że nikt nie chce pomóc więc wziąłem się do roboty i prosiłbym o sprawdzenie czy ten mój program ma prawo w ogóle działać :)
    
    $regfile "m32def.dat"
    $crystal = 16000000
    $baud = 19200
    
    
    
    Config Portb.0 = Output
    Config Portb.1 = Input
    Config Portb.2 = Input
    
    Declare Sub Sms_pozar
    Declare Sub Sms_zebranie
    Declare Sub Odbior
    
    Dim Powiadom As Bit
    Dim Bufor As Byte
    Dim Pozycja As Byte
    Dim Uart As String * Cmaxchar
    Dim Numer As String * Cmaxchar
    
    
    Const Wezwanie1 = "111111111"
    Const Wezwanie2 = "111111111"
    Const Wezwanie3 = "111111111"
    
    Reczne_alarm Alias Pinb.1
    Reczne_zebranie Alias Pinb.2
    Syrena Alias Portb.0
    
    
    Reset Portb.0
    Reset Portb.1
    Reset Portb.3
    
    
    Wait 2
    Print "AT" ; Chr(13) ;
    Waitms 100                                                  'inicjalizacja modemu
    Print "AT" ; Chr(13) ;
    Waitms 100
    Print "ATE0" ; Chr(13) ;                                    'wyłaczenie echa
    Waitms 100
    
    Wait 1
    
    
    '----------------PETLA GLOWNA------------------'
    Do
        If Reczne_alarm = 1 Then                                'wlaczenie alarmu w sterowniku syreny
             Gosub Sms_pozar
        End If
    
        If Reczne_zebranie = 1 Then                             'wlaczenie zebrania w sterowniku syreny
             Gosub Sms_zebranie
        End If
    
    
       If Powiadom = 1 Then
          Gosub Sms_pozar
       End If
    
    
       Bufor = Ischarwaiting()                                  'oczekiwanie na jakis znak z UART'u
          If Bufor = 1 Then
          Gosub Odbior
          End If
    
    
    
    Loop
    End
    
    
    '----------------------WYSYŁANIE POWIADOMIEN "POZAR"-----------------'
    Sms_pozar:
    Waitms 100
    
    Print "At + Cmgs = 21" ; Chr(13) ;
    Waitms 500
    Print "000100098106346xxxf3000012c427485a6c26b5591708fad406a5a110" ; Chr(26) ; Chr(13):
    Wait 3
    
    Print "At + Cmgs = 21" ; Chr(13) ;
    Waitms 500
    Print "000100098196688xxxf2000012c427485a6c26b5591708fad406a5a110" ; Chr(26) ; Chr(13):
    Wait 3
    Reset Powiadom
    Return
    
    
    
    
    
    '----------------WYSYŁANIE POWIADOMIEN "ZEBRANIE"------------'
    Sms_zebranie:
    Waitms 100
    
    Print "AT+CMGS=22" ; Chr(13);
    Waitms 500
    Print "000100098106346090F3000014C427485A6C26B55917485B144A83CE64D105" ; Chr(26) ; Chr(13);
    Wait 3
    
    Print "AT+CMGS=22" ; Chr(13);
    Waitms 500
    Print "000100098196688958F2000014C427485A6C26B55917485B144A83CE64D105" ; Chr(26) ; Chr(13);
    Wait 3
    Return
    
    
    
    
    
    '----------------------ODBIOR ZGLOSZENIA---------------------'
    Odbior:
    Input Uart Noecho                                           'odebranie danych z UART'u
       Pozycja = Instr(uart , ":")                              'szukanie dwukropka
       If Pozycja > 0 Then                                      'jezeli znaleziono
          Numer = Mid(uart , Pozycja , 11)                      'wyodrębnienie numeru z "+CLIP: +48XXXXXXXXX,145"
          If Numer = Wezwanie1 Or Numer = Wezwanie2 Or Numer = Wezwanie3 Then       'jeżeli numer zgadza sie z numerami zadanymi to wykonaj
          Print "ATH"                                           'odrzuc połączenie
          Waitms 50
             Set Syrena                                         'wyslij do drugiego procka rozkaz włączenia syreny
             Waitms 500
             Reset Syrena
             Set Powiadom                                       'ustaw flage zezwalającą na wysłanie sms
          End If
       End If
    Return                                                      'jezeli w ciagu znakow nie pojawil sie wlasciwy numer telefonu
                                                                ' to inne znaki sa ignorowane przez uc


    Głównie chodzi mi o kwestie identyfikacji numerów dzwoniących. Całość ma działać tak:
    Do tego układu podłączony będzie sterownik syreny na atmega8. W momencie wciśnięcia przycisku "ALARM" sterownik syreny ustawi na chwile port.b1 tego układu po czym zresetuje go i zajmie się sekwencją sterowania syreny. A tutaj rozpocznie się procedura wysyłania powiadomień. Analogicznie sytuacja powtórzy się w momencie wciśnięcia przycisku "ZEBRANIE". Jeżeli chodzi o wysyłanie sms to mam pytanko: Czy wystarczą te 3 sekundy między jednym sms'em a drugim? Czy może nie musi być taka duża przerwa? Na razie testuje to wszystko w terminalu i raczej nie uda mi się tak szybko napisać 2 sms'ów. A drugie pytanie to właśnie rozpoznawanie numeru telefonu. Czy ta moja procedura pominie mi RING, Enter i zajmie sie +CLIP: +48xxxxxxxxx,145 ?
  • REKLAMA
  • #6 10577478
    tms90
    Poziom 10  
    Posty: 37
    Ocena: 1
    Dzięki za linki. Już je przeglądałem kilka razy :) i w końcu udało mi się uruchomić ten układ ;] Jak byś czegoś nie wiedział to daj znać, może pomogę :)
REKLAMA