求大神帮帮忙 谢谢

2019-07-21 03:25发布

QQ截图20190403140318.png 这是我读到的CO2传感器数据,不过顺序不对,哪位大神可以指点一下,正确顺序应该是 42 4d 然后往下排,一共12个字节
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
1599064432
1楼-- · 2019-07-21 18:43
edmund1234 发表于 2019-4-3 22:58
CO2.ppm = (uint8_t)CO2.data_buf[(i+4)%12]*256+CO2.data_buf[(i+5)%12];
这不应该是uint8_t, 你的CO2.p ...

我定义的ppm是uint8_t类型的,这里是强制转换类型
1599064432
2楼-- · 2019-07-21 20:19
lvb 发表于 2019-4-3 21:00
42 4D 应该是攀藤的二氧化碳传感器吧,问题就出在你的串口接收中断没有加协议

对的,DS-CO2-20,

void CO2_unpack(void)
{
  for (int i = 0; i < 12; i++)
  {
    if (CO2.data_buf == 0x42 && CO2.data_buf[(i+1)%12] == 0x4D)
    {
      CO2.ppm = (uint8_t)CO2.data_buf[(i+4)%12]*256+CO2.data_buf[(i+5)%12];
    }
    co2_data_anl();
  }
}


这个就是协议啊,buf0 和1 是 42和4d  ,co2的数据是第五位*256加上第六位
1599064432
3楼-- · 2019-07-21 23:40
lvb 发表于 2019-4-3 21:00
42 4D 应该是攀藤的二氧化碳传感器吧,问题就出在你的串口接收中断没有加协议

CO2传感器中文说明书V2.1.pdf (899.08 KB, 下载次数: 3) 2019-4-4 08:38 上传 点击文件名下载附件         这个是传感器资料
DongInker
4楼-- · 2019-07-22 00:25
 精彩回答 2  元偷偷看……
1599064432
5楼-- · 2019-07-22 01:05
DongInker 发表于 2019-4-4 09:02
if(CO2.counter > 11)
   CO2.counter = 0;
这个写法有可能导致数据偏移,比如上电串口接收到几个乱码;
...

那该怎么该呢?  求帮帮忙
edmund1234
6楼-- · 2019-07-22 05:44
本帖最后由 edmund1234 于 2019-4-4 11:27 编辑
1599064432 发表于 2019-4-4 08:31
我定义的ppm是uint8_t类型的,这里是强制转换类型

你把1个uint8_t类型的变量, 其值x256 再加 另一uint8_t的变量的值, 放回一个uint8类型的变量去

随便拿两个数试试, 0x12 * 256 + 0x23 , 这答案uint8_t有可能放得下?


这是什么算法? 有可能不错?

一周热门 更多>