私のプログラムは、Zigbee からデータを受け取り、それをフィルタリングして必要なものを取得することです。
unsigned char idata buff[100]; //To read data from rawrxd[] and process data
unsigned char count=0; //To store counter for rawrxd[]
unsigned char buff_count=0; //store counter for buff[], read counter for rawrxd[]
if(buff_count!=count) //checking Is there any unread data?
{
if(buff_count==100) //go back to start position of array
buff_count=0;
buff[buff_count] = rawrxd[buff_count]; //read the data
if(strcmp(buff, "UCAST:000D6F0000A9BBD8,06=!221~@") ==0)
{
ES0=0;
Serial_txString("AT+UCAST:000D6F0000A9BBD8=!222~@");
tx(0x0D);
tx(0x0A);
ES0=1;
}
if(strcmp(buff, "UCAST:000D6F0000A9BBD8,06=!221#@") ==0)
{
ES0=0;
Serial_txString("AT+UCAST:000D6F0000A9BBD8=!222#@");
tx(0x0D);
tx(0x0A);
ES0=1;
}
buff_count++; //increase the read_count
}
これは、バッファが UCAST を受信し、それを文字列と比較して同じ場合は 0 を返す方法です。ただし、比較は 1 回だけで、その後は次の UCAST を受信してもまったく比較されません。 .
また、最初の比較は、機能するために同じでなければなりません。間違った文字を受け取ってから正しい文字を受け取った場合、機能しません。このことから、ポインタの問題でしょうか。私のバッファはcharの配列なので、それを文字列と比較しようとしています。