极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12323|回复: 2

sds011粉尘模块if生效求教

[复制链接]
发表于 2017-7-1 22:21:11 | 显示全部楼层 |阅读模式
程序如下,红字标识部分为判断,
但是奇怪的是三种都输出了,默认刚烧录完Pm2.5应该是0,小屏幕上也是显示Pm2.5为0.判断没作用,求支招

#include "U8glib.h"


unsigned int Pm25 = 0;
unsigned int Pm10 = 0;
//Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
U8GLIB_SSD1306_128X64 u8g(13, 12, 11, 10);  // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9


void draw() {
  // 设置字体
u8g.setFont(u8g_font_7x14);
  // 设置文字及其显示位置
  u8g.drawStr( 0, 10, "By MS17E2 Martinxu");
  u8g.drawStr( 0, 30, "Pm2.5:");
  u8g.setPrintPos(47,30);          //设置位置
  u8g.print(Pm25);//打印内容
if (Pm<=35)
   {u8g.drawStr( 70, 30, "good");}
  if (35<Pm<=75)
   {u8g.drawStr( 70, 30, "moderate");}
if (75<Pm)
   {u8g.drawStr( 70, 30, "bad");}  

   u8g.drawStr( 0, 40, "Pm10:");  
     u8g.setPrintPos(43,40);          //设置位置
  u8g.print(Pm10);      //打印内容
}


void ProcessSerialData()
{
  uint8_t mData = 0;
  uint8_t i = 0;
  uint8_t mPkt[10] = {0};
  uint8_t mCheck = 0;
while (Serial.available() > 0)
  {  
    // from www. inovafitness. com
    // packet format: AA C0 PM25_Low PM25_High PM10_Low PM10_High 0 0 CRC AB
     mData = Serial.read();     delay(2);//wait until packet is received
    if(mData == 0xAA)//head1 ok
     {
        mPkt[0] =  mData;
        mData = Serial.read();
        if(mData == 0xc0)//head2 ok
        {
          mPkt[1] =  mData;
          mCheck = 0;
          for(i=0;i < 6;i++)//data recv and crc calc
          {
             mPkt[i+2] = Serial.read();
             delay(2);
             mCheck += mPkt[i+2];
          }
          mPkt[8] = Serial.read();
          delay(1);
          mPkt[9] = Serial.read();
          if(mCheck == mPkt[8])//crc ok
          {
            Serial.flush();

            Pm25 = (uint16_t)mPkt[2] | (uint16_t)(mPkt[3]<<8);
            Pm10 = (uint16_t)mPkt[4] | (uint16_t)(mPkt[5]<<8);
            if(Pm25 > 9999)
             Pm25 = 9999;
            if(Pm10 > 9999)
             Pm10 = 9999;            
            //get one good packet
             return;
          }
        }
     }
  }
}




void setup() {

    Serial.begin(9600);
    Pm25=0;
    Pm10=0;
     
}
// 主循环
void loop() {
  ProcessSerialData();
    // u8glib图片循环结构:
  u8g.firstPage();  
  do {
    draw();
  }
while( u8g.nextPage() );


delay(1000);

}
回复

使用道具 举报

发表于 2017-7-2 08:41:42 | 显示全部楼层
if (Pm<=35)
   {u8g.drawStr( 70, 30, "good");}
else if (Pm>35&&Pm<=75)
   {u8g.drawStr( 70, 30, "moderate");}
else if (Pm>75)
   {u8g.drawStr( 70, 30, "bad");}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-3 21:38:52 | 显示全部楼层
Paderboy 发表于 2017-7-2 08:41
if (Pm35&&Pm75)
   {u8g.drawStr( 70, 30, "bad");}

可以了,但有个问题,pm25为0,即使我不用else也只是会拖慢速度而已啊,其他的比如,大于35小于75,或大于75的应该是不会失效才对的啊
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 17:00 , Processed in 0.038115 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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