|
楼主 |
发表于 2021-10-17 14:33:52
|
显示全部楼层
- typedef enum
- {
- PM25_Head1,
- PM25_Head2,
- PM25_Length,
- PM25_Data
- }PM25_ST;
- PM25_ST pm25St = PM25_Head1;
- /**
- * @brief serial of pm2.5 loop
- * @param[in] none.
- * @param[out] none.
- * @return none.
- */
- static void Display_PM25_Loop(void)
- {
- static uint16_t dataLength = 0;
- uint16_t sum, i, chksum;
- if(digitalRead(PM25_POWER_PIN) == HIGH)
- {
- if(Serial.available() > 0)
- {
- switch(pm25St)
- {
- case PM25_Head1:
- pm25Index = 0;
- pm25Buffer[pm25Index] = Serial.read();
- if(pm25Buffer[pm25Index] == 0x32)
- pm25St = PM25_Head2;
- break;
- case PM25_Head2:
- pm25Index = 1;
- pm25Buffer[pm25Index] = Serial.read();
- if(pm25Buffer[pm25Index] == 0x3D)
- pm25St = PM25_Length;
- else
- pm25St = PM25_Head1;
- break;
- case PM25_Length:
- pm25Index++;
- pm25Buffer[pm25Index] = Serial.read();
- if(pm25Index >= 3)
- {
- pm25Index = 4;
- pm25St = PM25_Data;
- dataLength = pm25Buffer[2] * 256 + pm25Buffer[3] + 4;
- }
- break;
- case PM25_Data:
- pm25Buffer[pm25Index] = Serial.read();
- pm25Index++;
- if(pm25Index >= dataLength)
- {
- sum = 0;
- for(i=0; i<dataLength-2; i++)
- {
- sum += pm25Buffer[i];
- }
- chksum = pm25Buffer[dataLength-2]*256 + pm25Buffer[dataLength-1];
- if(chksum == sum)
- Dis_Pm25 = pm25Buffer[6]*256+pm25Buffer[7];
- pm25St = PM25_Head1;
- }
- break;
- }
- }
- }
- else if(Serial.available() > 0)
- {
- Serial.flush();
- }
- }
复制代码
随便写的
|
打赏
-
查看全部打赏
|