boolean怎么用_奇怪的boolean输出,arduino学习笔记

在Arduino编程中,遇到boolean变量显示为大数字(如48, 50, 51)的问题,原因是boolean并非标准的bool类型,可能导致逻辑判断错误。通过排查发现,问题出在char数组定义长度不足导致的溢出。调整数组大小后,问题得到解决。总结学习关键点包括:排除法、设置输出点监控、查资料、尝试与确认数组定义、理解sprintf函数的使用。" 99976214,8433553,"Keras LSTM参数详解:input_dim, return_sequences与return_state

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【现象】

变量定义 boolean showdebug_Time=false 为何输出的时候出现值为一个大数字(48,50,51等)

因为非0则1就是真,不是0则为真,造成逻辑判断失败!不该输出的结果输出了...

boolean showdebug_Time=false;//定义条件变量,调试时间输出和计数输出   .........................Serial.print("showDebug_Time=");Serial.println(showDebug_Time);//结果输出48,50,51等数字,bool怎么能有第3种输出结果?

【结果】

找到问题所在,在此记录一下...

【前因后果】

1)定义一个bool变量

boolean showDebug_Time=false;

关于此变量官方的解释,难道因为定义的不对?查资料

f8c1a5a869a214b5d45cafa9a7f71a94.png

boolean并非标准的bool 是扩展过来的

boolean是bool的一个扩展,并非标准类型

c58d5e604eaa63ea5c7643c8a47f9e03.png

真正的bool 只有true,false 并没错误啊

就是改变变量的值控制调试输出,判断是否重启或延时等问题

loop()中打印代码(防止溢出对一个unsigned int做下处理)

c8b0f9009f34b0ea92f2b930d8ec51d0.png

就这么一段 输出系统时间 每秒

倒推,发现只要触发MQTT发布消息时就会出现这个问题

check_relay_status(){//就是检查各路继电器输出状态,供电方式,干接点状态发布}

里面就检查电平高低和发布2个功能。

检查电平高低确定没问题if(digitalRead(relay_PIN1)==HIGH)等等

根据状态发布出去 mqtt_pub(pub_topic_name1,"55 AA AA AA AA 82 01 01");等等

没问题,难道 mqtt_pub 出了问题?

7453a6505b2ed1e44a25365ac45f53a0.png

方法在这

就是通过EEPROM中读取的配置信息及目前模块运行的数据发布出去

pub_res=mqttClient.publish(_topic,_msg,retained);

确定方法没错。难道是变量的问题?_msg看下输出

43df6dddaaa635257ab312642294d05f.png

看似没什么异常啊,难道???

是不是太长了?还专门写了个小工具 查长度的!一看149个字符!

727b41ab8290f79d73a9ee698bb4d039.png

查询输出是149个字符

而临时变量_tmp咋定义的?

char _tmp[128];难道是这问题引起??尝试修改128为 char _tmp[256];

重新下载!调试!!

运行了数小时,一次异常也没有出现!

4d77952998fbce525b2391b08abc4ba3.png

运行近9小时 无丢包和数据异常

确定是因为数组申请的长度太小,可能造成了溢出造成了系统定义的各种bool变量出现了怪异的输出,明明输出的是 50 if判断是否大于1 居然不对,既然是真 取反是否为false等各种尝试

a1270482f80afca4820f17aa1d17d753.png

断电记忆的是1和3路,故意打开2和4如果重启1-3会开

8小时后依然2,4开,说明系统没有复位重启。故很稳定!

这样的问题遇到不少,可能一个小小的失误造成数小时的研究调试,最后做到稳定!

1f10a700e1beebe9eddcc5e420a7dc55.png

随时保存或自动保存断电记忆状态输出

【学习关键点总结】

1)排除法,倒推法

2)设置输出点,监控输出数据异常位置

3)查资料,反复尝试

4)数组大小定义要合适,char[]和string类型不一样,关键要会各种转换及指针的理解

5)sprintf()的函数使用,用的很多,做输出模板,注意数据类型的使用 %d %s %lf等等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值