使用 if 语句评估连续回复
Evaluating serial replies with if statement
我正在尝试使用 atmel MCU 从调制解调器读取网络状态,然后 debug/restart 基于某些状态回复。我使用以下代码(并且有效)这样做:
scanf("%s", state);
printf_P(PSTR("%s\n%d\n"),state,tempstate);
if (*state=='4'|| *state=='7' || *state == '9' || *state == '11' || *state == '12' || *state == '13' ||*state == '19' || *state == '30' || *state == '31')
{
count++;
if(count == 5)
{
send_string("ATZ\r");
_delay_ms(10000);
count = 0;
}
else{}
}
但是,当尝试在引脚更改中断(用于门开关)中执行类似操作时,我可以读取调制解调器回复 'OK',但是当尝试使用 if 语句确认该回复时,回复无法识别。见下文。
send_string("AT\r\n");
scanf("%s", reply);
printf_P(PSTR("\n%s"),reply);
if (*reply == 'OK')
{
printf_P(PSTR("\nWill text contact now."));
send_string("AT*SMSM2M=\"15555555TESTING\"\r");
scanf("%s", reply);
}
我无法让我的代码在收到 'OK' 后输入该 if 语句。任何帮助表示赞赏。
见http://en.cppreference.com/w/c/string/byte/strcmp
用于比较字符串 "OK"
(注意引号与代码中的引号不同)
对于 char* reply
指向的内容,使用
strcmp(reply, "OK")
注意这个returns0代表身份。
因此,if
类似于您尝试的
if(!strcmp(reply, "OK"))
正如 dbush 在评论中提到的:
请注意,您也需要为数字比较执行此操作,因为您的字符串包含数字而不是实际数字。
其中一些(那些与单个字符进行比较的)误导性工作,因为您不小心将回复字符串的第一个字符与单字符字符文字进行了比较。
(像往常一样 "string" 阅读“char
s 的空终止序列。)
我正在尝试使用 atmel MCU 从调制解调器读取网络状态,然后 debug/restart 基于某些状态回复。我使用以下代码(并且有效)这样做:
scanf("%s", state);
printf_P(PSTR("%s\n%d\n"),state,tempstate);
if (*state=='4'|| *state=='7' || *state == '9' || *state == '11' || *state == '12' || *state == '13' ||*state == '19' || *state == '30' || *state == '31')
{
count++;
if(count == 5)
{
send_string("ATZ\r");
_delay_ms(10000);
count = 0;
}
else{}
}
但是,当尝试在引脚更改中断(用于门开关)中执行类似操作时,我可以读取调制解调器回复 'OK',但是当尝试使用 if 语句确认该回复时,回复无法识别。见下文。
send_string("AT\r\n");
scanf("%s", reply);
printf_P(PSTR("\n%s"),reply);
if (*reply == 'OK')
{
printf_P(PSTR("\nWill text contact now."));
send_string("AT*SMSM2M=\"15555555TESTING\"\r");
scanf("%s", reply);
}
我无法让我的代码在收到 'OK' 后输入该 if 语句。任何帮助表示赞赏。
见http://en.cppreference.com/w/c/string/byte/strcmp
用于比较字符串 "OK"
(注意引号与代码中的引号不同)
对于 char* reply
指向的内容,使用
strcmp(reply, "OK")
注意这个returns0代表身份。
因此,if
类似于您尝试的
if(!strcmp(reply, "OK"))
正如 dbush 在评论中提到的:
请注意,您也需要为数字比较执行此操作,因为您的字符串包含数字而不是实际数字。
其中一些(那些与单个字符进行比较的)误导性工作,因为您不小心将回复字符串的第一个字符与单字符字符文字进行了比较。
(像往常一样 "string" 阅读“char
s 的空终止序列。)