Witam!
Staram sie komunikowac z modemem GSM. Chce opracowac metode rozłanczania osoby dzwoniącej niezaleznie od chwili w której dzwoni.
Zalozenie jest takie iż w sposób ciągły:
- wysyłam "AT" i sprawdzam czy jest "OK"
- w miedzyczasie sprawdzam czy nie pojawilo sie RING, jezeli pojawilo wydaje komende "ATH0"
*opcja echo jest off
Wszystko działa tylko moje bufory nie zerują się.
Puki nikt do mnie nie dzwoni zawartosc zmiennej bufor w kolejnych obiagach petli wyglada następująco:
W momencie gdy ktos do mnie zadzwoni wszystko wyglada jak by sie wogole nie zerowaly bufory:
Wniosek: Poprawna ilosc znakow jest tylko w dwoch pierwszych wersach 6 oraz 22, pozniej kiedy zeruje bufory bo ringa juz nie ma bo rozlaczylem..on dalej pamieta koncowki..
Pytanie: jak zerowac tablice volatile char zapisująca sie w przerwaniu w sposob inny niz bufor[0]=0; poniewaz to nie działa.
inventco.eu - temat poprawiłem. Regulamin p.11.1.
Staram sie komunikowac z modemem GSM. Chce opracowac metode rozłanczania osoby dzwoniącej niezaleznie od chwili w której dzwoni.
Zalozenie jest takie iż w sposób ciągły:
- wysyłam "AT" i sprawdzam czy jest "OK"
- w miedzyczasie sprawdzam czy nie pojawilo sie RING, jezeli pojawilo wydaje komende "ATH0"
*opcja echo jest off
Wszystko działa tylko moje bufory nie zerują się.
volatile char wynikGSM[50];
volatile char bufor[50];
volatile int ilosc_znakow=0;
int ilosc;
.
.
.
.
ISR(USART1_RX_vect) // przerwanie wywolywane naplywem znaków
{
char temp;
temp=UDR1;
wynikGSM[ilosc_znakow]=temp;
++ilosc_znakow;
}
int szukaj(char *wzorzec) // szukanie okreslonego wzorca, jezeli nie ma zwraca 0, jezeli jest zwraca wartosc rózna od zera
{
char *pozycja;
pozycja=strstr((char*)bufor,wzorzec);
return *pozycja;
}
.
.
.
.
int main (void)
{
usart_init();
usart_debug();
while(1)
{
sei()
wyslij("AT\r");
delayms(1000);
strcpy((char*)bufor,(char*)wynikGSM); // przepisujemy do bufor,aby przeanalizowac
wynikGSM[0]=0; // zerujemy aby mogly naplywac nowe dane
int ilosc;
ilosc=ilosc_znakow;
ilosc_znakow=0; // zeruje aby dane naplywaly od poczatku do wynikGSM
wyslij2((char*)bufor); //wysylam zawartosc przeszukiwanego nizej bufora na drugiego uarta, taki debug robie dla siebie
char x[5]; // wyswietla ilość znaków zapisanych w buforze
itoa(ilosc,x,10); //
wyslij2(" "); //
wyslij2(x); //
wyslij2("||"); //
int wynik;
wynik=szukaj("RING"); // jezeli ktoś dzwoni, szukam ring i rozlanczam go podajac komende ATH0;
if(wynik==0) {wyswietl("nie ma ring");delayms(2000);}
else{wyswietl("znalazlem, rozlanczam :)");delayms(2000);wyslij("ATH0\r");delayms(1000);}
wynik=0;
}Puki nikt do mnie nie dzwoni zawartosc zmiennej bufor w kolejnych obiagach petli wyglada następująco:
..ok..6||
..ok..6||
..ok..6||
itd.W momencie gdy ktos do mnie zadzwoni wszystko wyglada jak by sie wogole nie zerowaly bufory:
..OK.. 6||
..RING....RING....OK.. 22||
..RING....OK....OK.... 20||
..OK....OK......OK.... 12||
..OK....OK......OK.... 6||
Wniosek: Poprawna ilosc znakow jest tylko w dwoch pierwszych wersach 6 oraz 22, pozniej kiedy zeruje bufory bo ringa juz nie ma bo rozlaczylem..on dalej pamieta koncowki..
Pytanie: jak zerowac tablice volatile char zapisująca sie w przerwaniu w sposob inny niz bufor[0]=0; poniewaz to nie działa.
inventco.eu - temat poprawiłem. Regulamin p.11.1.