我正在开发一个项目,该项目必须在向微控制器发送短信时关闭泵。下面的代码必须能够读取和下载消息,以便它可以关闭泵,但它不起作用。有人可以检查代码,让我知道问题。使用的微控制器是atmega32,编程的软件是atmel studio 6.1。 而(1) { // check_sensor(); / * uint8_t x = 0;
while(GSMWaitForMsg(&id)!=GSM_OK)
{
if(x)
{
LCDWriteStringXY(10,3,"%3"); //LOVE SYMBOL TILL MSG COMES CHECK MYUTILS.H
x=0;
}
else
{
LCDWriteStringXY(10,3,"%4"); //ARROW TO SHOW MESSAGE DOWNLOAD
x=1;
}
}
LCDWriteStringXY(10,3,"%2");
_delay_ms(1000);
//function to read message
char msg[300];
int8_t r=GSMReadMsg(id,msg); //ID=NUMBER MSg=MESSAGE OA=THE REPLY
if(r==GSM_OK)
{
if(strcasecmp(msg,"STOP")==0) // checking if message read is stop
{
PORTC|=(1<<PC7);
LCDClear();
LCDWriteStringXY(0,1,"PUMP TURNED OFF"); // displaying on the lcd screen
RelayOff(); // turning the relay off
_delay_ms(2000);
goto comehomeboy; // going back to home
}
}
}
答案 0 :(得分:0)
GSM模块收到的消息(在控制器的UART上)只是ASCII字符。大多数数据都没有附加NULL(\ 0)。 对于strcasecmp()函数,您需要将NULL终止的字符串作为输入。 请确保&#39; msg&#39;数组以NULL结束。