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

[Atmega32][C] Przetwarzanie informacji z Sim900

krzysiekk_20 21 Mar 2011 10:13 2104 1
REKLAMA
  • #1 9302927
    krzysiekk_20
    Poziom 12  
    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:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    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++
    Zaloguj się, aby zobaczyć kod

    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.
  • REKLAMA
  • #2 9420611
    krzys2019
    Poziom 11  
    for (i=0;i<200;i++){

    ...

    if (bufrs[i+0] == '+' && bufrs[i+1] == 'C' && bufrs[i+2] == 'L' && bufrs[i+3] == 'I' && bufrs[i+4] == 'P'){
    command_ = CCLIP;
    k_ = 4;
    k = 0;
    for(i_=k_;i_<200;i_++){
    if ( bufrs[i_]=='"') break;
    }
    k_ = i_+1;
    for(i_=k_;i_<200;i_++){
    if ( bufrs[i_]=='"') break;
    if ( k>_MAXTEL_-1)break;
    if ( bufrs[i_]>='0' && bufrs[i_]<='9'){
    tel[k++]= bufrs[i_];
    }
    }
    tel[k] = 0;
    ...........

    }
REKLAMA