皮皮鲁的鲁鲁西 发表于 2022-2-6 14:07:48

通过软串口实现Co2传感器被动问询返回浓度数据


如上图,官方描述说,软串口输出数据与读取数据同时使用,可能导致数据异常,我在读取co2传感器项目中测试一下这个问题,好像没遇到?


测试项目如下:
1、主程序相关定义
首先定义一个问询帧字符串,正常情况下使用unsigned char mind_s_co2ask = {0xFF, 0x01, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0xF9};这样定义就行,可是mind+中只有列表可以用,只能用笨办法制造一个;
然后定义软串口,初始化软串口和物理串口;



2、定义问询帧发送函数
定义一个向软串口发送问询帧函数,共9位,需要进行类型转换,原始输出成HEX格式;


3、定义返回帧输出函数
如上图,定义向物理串口输出返回帧函数,连续读取12位返回帧数据,需要转换成ascii码字符串并进行合并;


4、循环执行问询和读取输出
循环执行问询帧发送,软串口返回帧数据读取以及物理串口输出返回帧数据即可;


5、完成效果
串口输出数据前面红色部分是HEX格式的问询帧数据,后面部分是传感器返回的CO2浓度数据


ps:其实如果用手动编程方式,几行代码就搞定了;
#include <SoftwareSerial.h>

// 创建对象
SoftwareSerial softwareSerial1(3, 6);
unsigned char mind_s_co2ask = {0xFF, 0x01, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0xF9};

// 主程序开始
void setup() {
        softwareSerial1.begin(9600);
        Serial.begin(9600);

}
void loop() {
        softwareSerial1.write(mind_s_co2ask,9);//软串口输出问询帧
        Serial.write(mind_s_co2ask,9);//物理串口输出问询帧
        //softwareSerial1.println();
        while (!softwareSerial1.available()) {}   //如果软串口有数据
        for (int index = 0; index < 12; index++) {
                Serial.write(softwareSerial1.read());//连续读取12次返回帧数据,并输出至物理串口
        }
        Serial.println("");
        delay(1000);
}

mind+这种积木编程模式非常好,就是变量类型和函数太少了,而且使用方式也不一样,对于初学者来说,容易引起困惑,希望在后续升级中越来越完善。

Forgotten 发表于 2022-2-7 19:40:03

本帖最后由 Forgotten 于 2022-2-7 19:41 编辑

冲突提示里面的都是警告并非错误,如页面最上面写的并不是一定会出现错误。
默认的变量类型为了初学者(没有任何编程基础的小白)使用方便只保留了数字和字符串两种类型,数组这种可以尝试使用开放用户库来自定义一个高级库满足各种高级玩法。

皮皮鲁的鲁鲁西 发表于 2022-2-9 12:01:59

Forgotten 发表于 2022-2-7 19:40
冲突提示里面的都是警告并非错误,如页面最上面写的并不是一定会出现错误。
默认的变量类型为了初学者(没 ...

学习了,谢谢!

赤星三春牛! 发表于 2022-2-11 20:50:33

冲突的情况有时候有,有时候没有

赤星三春牛! 发表于 2022-2-11 20:51:35

所以你不用很担心。

赤星三春牛! 发表于 2022-2-11 20:53:25

希望mind+能做得更好,更加让初学者适应一下。

KkQ1VrB7W776 发表于 2022-6-10 22:25:47

请问作者用的是哪款传感器
页: [1]
查看完整版本: 通过软串口实现Co2传感器被动问询返回浓度数据