tjekke på en lidt speciel streng.

Tags:    c++

<< < 12 > >>
Hej!

Jeg sidder og roder med en uC og et GPRS modem i forbindelse med et skole projekt.

jeg har lidt svært ved at få håndteret mit output rigtigt..

Jeg sender fra min uC nogle AT kommandoer i form af strenge til modemet(over RS232/UART og i C) og ønsker så at teste det den tilbagemelding modemet kommer med..

Problemet er nu at modemet pine død vil svare således..

<carriage return>
<line feed>
+CREG: 0,X
<cr>
<lf>
OK
<cr>
<lf>

i dette tilfælde er "X" en værdi mellem 0-4, værdien SKAL være "1" ellers er der en fejl..
Hvis jeg forsøger at gemme input fra modemet i en streng vil denne blive afsluttet hver gang der kommer et <lf> (det tolker C som slut på streng)

Ved de fleste andre kommandoer returnerer modemet "kun"
<cr>
<lf>
OK
<cr>
<lf>

det er til at gøre, men stadig "grimt" jeg har prøvet både løsninger med gets, getch og getchar men har stadig ikke kunne komme op med et simpelt script der tester for mig..

Er der nogen der udfra min mindre danske stil kan komme med en god ide?

Jeg vil blive meget taknemmelig..

pilfinger.....

[Redigeret d. 23/11-05 21:27:27 af Ricki G.]



12 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Hej
Jeg har lige et tillægsspørgsmål hvis det er ok..

da jeg 7 gange i træk tjekker for et "OK" fra modemet har jeg skrevet en standard funktion der tjekker for dette..
Nu render jeg ind i problemet igen med at modemet returnere

<cr><lf>OK<cr><lf>

while(1)
{
gets(input1);
if((s = strstr(input1, "OK")) != 0)
{
return 1;
}
else
{
return 0;

}
}

Jeg har brugt dit eksempel, nu viser det sig dog at den returnere 1 når jeg sender OK<cr><lf>

men 0 npr jeg sender <cr><lf>OK<cr><lf>

altså den samme problematik som før...

Jeg må bruge funktionen forkert da det jo fint virker ved CREG 0,1 tjekket..


pilfinger.....



Når du modtager <cr><lf>OK<cr><lf> modtager du det som to strenge, først <cr><lf> og derpå OK<cr><lf>
I din kode vil du returnere 0 når du modtager første del.
Du kan lave det om til:

Fold kodeboks ind/udKode 

Så vil den ignorere <cr><lf> men returnere 0 på alt andet.

Du kan evt bare slette else delen, så vil den blive i loopen indtil den modtage OK, uanset hvad der ellers måtte blive modtaget.



<< < 12 > >>
t