Witam,
Potrzebuje pomocy w przetwarzaniu danych przychodzących na uart od modułu SIM900.
Generalnie chodzi o to bym mógł odebrać i zidentyfikować dane np numer dzwoniącego,
tekst smsa z komendą.
Obsługę uartu mam sprawną w dwie strony. Moge wysyłać z dane z pamięci RAM i flash.
Odbieranie danych realizuję w przerwaniu. Moduł SIM900 ma pewien standard w wysyłaniu danych
a mianowicie wysyła znaki CR i LF przed i za określonym słowem. Przy odbieraniu połączenia
mam takie coś
0x0A 0x0D
RING 0x0A 0x0D
0x0A 0x0D +CLIP: "+486xxxxxxxx",145"",,"",0 0x0A 0x0D
a dla np polecenia ATI:
0x0A 0x0D
SIM900D R11.00x0A 0x0D
0x0A 0x0DOK0x0A 0x0D
Kod obsługi przerwania mam taki:
Idea jest zaczerpnięta z książki o modułach GSM w systemach mikroprocesorowych.
Wtedy odbieram coś takiego
RING+CLIP: "+486xxxxxxxx",145"",,"",0
lub
SIM900D R11.0OK
I tutaj mam pewne problemy z rozpoznaniem tekstu
Mam zadeklarowane tablice "char buf[200]" oraz str04a globalnie
oraz funkcję do czyszczenia jej:
oraz
char str04a[] PROGMEM = "RING+CLIP: +486xxxxxxxx";
W programie i pętli
volatile char *wynik;
wynik=strncmp_P(buf,str04a,23);
char tab[5];
sprintf(tab, "%d", wynik);
LCD_CLEAR;
lcd_puts(tab);
Pokazuje mi tylko -82.
Potrzebuje pomocy w przetwarzaniu danych przychodzących na uart od modułu SIM900.
Generalnie chodzi o to bym mógł odebrać i zidentyfikować dane np numer dzwoniącego,
tekst smsa z komendą.
Obsługę uartu mam sprawną w dwie strony. Moge wysyłać z dane z pamięci RAM i flash.
Odbieranie danych realizuję w przerwaniu. Moduł SIM900 ma pewien standard w wysyłaniu danych
a mianowicie wysyła znaki CR i LF przed i za określonym słowem. Przy odbieraniu połączenia
mam takie coś
0x0A 0x0D
RING 0x0A 0x0D
0x0A 0x0D +CLIP: "+486xxxxxxxx",145"",,"",0 0x0A 0x0D
a dla np polecenia ATI:
0x0A 0x0D
SIM900D R11.00x0A 0x0D
0x0A 0x0DOK0x0A 0x0D
Kod obsługi przerwania mam taki:
Kod: C / C++
Idea jest zaczerpnięta z książki o modułach GSM w systemach mikroprocesorowych.
Wtedy odbieram coś takiego
RING+CLIP: "+486xxxxxxxx",145"",,"",0
lub
SIM900D R11.0OK
I tutaj mam pewne problemy z rozpoznaniem tekstu
Mam zadeklarowane tablice "char buf[200]" oraz str04a globalnie
oraz funkcję do czyszczenia jej:
Kod: C / C++
oraz
char str04a[] PROGMEM = "RING+CLIP: +486xxxxxxxx";
W programie i pętli
volatile char *wynik;
wynik=strncmp_P(buf,str04a,23);
char tab[5];
sprintf(tab, "%d", wynik);
LCD_CLEAR;
lcd_puts(tab);
Pokazuje mi tylko -82.