野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8787|回复: 5

求助各位亲:app发送给wifi的字符怎么读取判断以实现功能?

[复制链接]
发表于 2016-5-21 15:57:11 | 显示全部楼层 |阅读模式
求助各位坛友:


我在用app发送指令给wifi模块的过程当中,wifi模块能够获取信息并且在串口调试工具上显示,但是我想根据不同的指令来实现不同的功能。。。。。在判断是什么指令的时候出现了一点问题。。
以下是用串口来调试的时候用的代码:
        while ( 1 )                     
        {         
        pRecStr        = ESP8266_ReceiveString(DISABLE);
        macPC_Usart ( "%s", pRecStr );
                if(pRecStr=="AT!")             ///////////也就是这里的,虽然app发送的"AT!",而且串口调试模块上显示的是“AT!”,但就是判断的不对。。。
                {        printf ( "\r\n 打开继电器\r\n" );          //////////////把改成pRecStr!="AT!",就会显示“打开继电器”了,说明就是读取指令不对
                }
                else if(pRecStr=="AT~")
                {   printf ( "\r\n 现在在更新\r\n" );
//////////////////////////////////etc////////////////////////////////////////

以上。。。。。

希望懂得亲能够帮忙看一下,非常感谢。。。。。

回复

使用道具 举报

发表于 2016-5-22 09:04:10 | 显示全部楼层
试一下strcasecmp(pRecStr,"AT!")
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-22 15:03:02 | 显示全部楼层
hgsss 发表于 2016-5-22 09:04
试一下strcasecmp(pRecStr,"AT!")

首先感谢您的回复。。。
我试了一下,还是不行。其实想想,两个函数的原理其实是差不多的,我的那个是判断是否相等,你的这个是判断是否大小写相对应,所以还是没有正确读取出来。
我用printf(pRecStr);把它打印出来,显示的是这样的,+IPD,0,3:AT!
而获取pRecStr的函数如下:
char * ESP8266_ReceiveString ( FunctionalState enumEnUnvarnishTx )
{
        char * pRecStr = 0;
       
       
        strEsp8266_Fram_Record .InfBit .FramLength = 0;
        strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0;
       
        while ( ! strEsp8266_Fram_Record .InfBit .FramFinishFlag );
        strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0';
       
        if ( enumEnUnvarnishTx )
                pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
       
        else
        {
                if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )                //本来是IPD
                        pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;

        }

        return pRecStr;
       
}



所以   我觉得是不是函数的问题??致使获取的pRecStr不是AT!了????
回复 支持 反对

使用道具 举报

发表于 2016-5-22 22:31:20 | 显示全部楼层
对字符串指针使用==来判断 或者=来赋值都不是有效的做法吧~
你的程序逻辑是等待strEsp8266_Fram_Record .InfBit .FramFinishFlag置位为1然后将strEsp8266_Fram_Record .Data_RX_BUF的接收帧数组最后一位赋值为“\0”,
如果enumEnUnvarnishTx为真,则pRecStr引用strEsp8266_Fram_Record .Data_RX_BUF
否则查找strEsp8266_Fram_Record .Data_RX_BUF内是否有“+IPD”,如果是,则pRecStr引用strEsp8266_Fram_Record .Data_RX_BUF
最后返回pRecStr指针  感觉你这个程序好像没有作用。。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-22 23:25:40 | 显示全部楼层
hgsss 发表于 2016-5-22 22:31
对字符串指针使用==来判断 或者=来赋值都不是有效的做法吧~
你的程序逻辑是等待strEsp8266_Fram_Record .I ...

真的超级感谢你能够回复我。
我现在解决啦,用的strstr函数。
总之,非常感谢
回复 支持 反对

使用道具 举报

发表于 2016-11-1 11:37:44 | 显示全部楼层
你好,我也在学习这个,你能分享一下你的代码给我看下吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-1 03:49 , Processed in 0.030112 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表