查看: 362|回复: 18

[未解决] 字符串是否对比该使用哪个函数?

[复制链接]

该用户从未签到

发表于 2021-3-4 22:14 | 显示全部楼层 |阅读模式
现有问题是,
               串口接收到的数据是正常的,(通过print函数打印串口收到的数据,与我用上位机软件发出的数据是一样的)
               串口对外发送数据也是正常的,
               现在问题出在字符串是否相同这个比较判断上,
               网上我能找到的帖子里介绍方法都试了一遍,问题还没解决。

源码功能,就是收到上位机发来的命令后,先判断收到的命令,是否与已知的命令相同?如果相同则给上位机返回一个命令。求助前辈门指导一下迷津,谢谢。
00000.png

该用户从未签到

发表于 2021-3-5 09:04 | 显示全部楼层
cdjo定义有问题吧,

该用户从未签到

发表于 2021-3-5 10:27 | 显示全部楼层
试试
(1) XXX.equals(YYY);
(2) strcmp(XXX.c_str(), YYY.c_str()) ==0)

签到天数: 1 天

[LV.1]初来乍到

发表于 2021-3-5 10:50 | 显示全部楼层
定义字符串用 String

该用户从未签到

 楼主| 发表于 2021-3-5 21:36 | 显示全部楼层
王尼玛1 发表于 2021-3-5 10:50
定义字符串用 String

改成定义字符串用 String 后,
# include <stdlib.h>
# include <string.h>
String cdjo = "B07000C0";
String comdata = "";

调用

if(strcmp(comdata,cdjo)==0),//判断 2 个字符串是否相同

编译器提示
cannot convert 'String' to 'const char*' for argument '1' to 'int strcmp(const char*, const char*)'
编译无法通过

该用户从未签到

发表于 2021-3-5 22:32 | 显示全部楼层
tv998 发表于 2021-3-5 21:36
改成定义字符串用 String 后,
# include
# include

直接==判断即可

该用户从未签到

 楼主| 发表于 2021-3-5 22:34 | 显示全部楼层

问题是:
           直接==判断 ,即使判断条件成立,也无法进入 if 的后续语句啊。

该用户从未签到

 楼主| 发表于 2021-3-5 23:26 | 显示全部楼层

  1. # include <stdlib.h>
  2. # include <string.h>
  3. String cdjo = "B07000C0";
  4. String comdata = "";
  5. unsigned char itea[6] = {0xB0,0x70,0x30,0x1C,0x77,0xEC};

  6. void setup() {
  7.   
  8.   Serial.begin(9600,SERIAL_8E1);
  9.   while(Serial.read() >= 0){}//清除串口缓冲区
  10. }

  11. String readLine()//读整行字符串子程序
  12. {
  13.   String comdata="";
  14.   while(Serial.available())
  15.   {
  16.     comdata += char(Serial.read());
  17.     delay(2);
  18.   }
  19. return comdata;
  20. }

  21. void loop()
  22. {
  23.         comdata=readLine();//读整行字符串
  24.       //Serial.print(comdata);//调试用,执行到这里都正常
  25.       if(comdata=="B07000C0")//这个语句始终无法正确判断
  26.         {
  27.           Serial.print(comdata);//调试用
  28.           //Serial.write(itea,6);
  29.           comdata = "";
  30.           while(Serial.read() >= 0){}//清除串口缓冲区
  31.           delay(200);
  32.         }

  33. }

复制代码

该用户从未签到

 楼主| 发表于 2021-3-5 23:30 | 显示全部楼层
kevinzhang19701 发表于 2021-3-5 10:27
试试
(1) XXX.equals(YYY);
(2) strcmp(XXX.c_str(), YYY.c_str()) ==0)

谢谢你的答复,这个 2 个函数我已经都试过,也是无法正确判断。(细看图片,我里面注解,已经测试过的,都不正常的函数)

该用户从未签到

发表于 2021-3-6 14:22 | 显示全部楼层

把奇偶校验去掉,SERIAL_8E1
或者换一个串口监视器,选择8位数据,校验位even,1个停止位。(arduinoide的默认无校验)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

arduino程序设计基础 blinker物联网解决方案

热门推荐

基于麦克纳姆轮的PID实例学习--机甲大师PID控制
基于麦克纳姆轮的PID实例
一 认识pid 首先要了解PID算法是什么。网上很多帖子要么就是只有理论,要么就没讲清
OLED 128*64自制可达10000000个选项的菜单(已更新)
OLED 128*64自制可达10000
OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
有没有人遇到过"MQTT Ping!"进入500ms间隔发送,偶现自动复位...
有没有人遇到过"MQTT Ping
出现该情况后,我在5V与3.3V端都加了1000uf和104。之后用弱网络进行测试,在一定程度
HC05发送数据出错
HC05发送数据出错
HC05往手机发送数据会产生错乱和缺失?
arduinoT12焊台 控制器 炫酷UI
arduinoT12焊台 控制器 炫
*声明:本项目源于https://github.com/wagiminator/ATmega-Soldering-Station 采用CC3
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表