Files
fastbee/firmware/stm32-esp/user/show/pm_uart3.c
yueming b0605eb980 修订
2021-09-06 15:06:35 +08:00

199 lines
4.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "pm_uart3.h"
// 校验
// 校验正确--0xff 校验错误--0x00
uint8_t PMD4_CheckSum(uint8_t *data) {
uint8_t i = 0, result = 0;
uint16_t sum = 0;
if( (data[0] == 0x42) && (data[1] == 0x4d) )
{
for(i = 0; i < 30; i++)
{
sum += data[i];
}
if( sum == ((data[30]<<8) + data[31]) )
{
result = 0xff;
}
}
return result;
}
// PM 初始化
void PMD4_Init(void) {
Power_PMD4(1);
Delay_ms(200);
BSP_UART3Init(9600);
Delay_ms(200);
}
// 请求获取空气信息
void PMD4_ReqGetAirInfor(uint8_t Code) {
uint16_t sum = 0;
uint8_t data[20] = {0};
uint8_t i = 0;
data[0] = 0x42;
data[1] = 0x4d;
data[2] = Code;
data[3] = 0x00;
data[4] = 0x00;
for(i = 0; i < 5; i++)
{
sum += data[i];
}
data[5] = (uint8_t)(sum>>8);
data[6] = (uint8_t)(sum>>0);
BSP_UART3SendData(data, 7);
}
/*PMD4获取空气信息*/
void PMD4_GetAirInfor(void)
{
#ifdef Device_LCD
uint16_t x = 0, y = 0;
uint8_t i = 0;
#endif
if(UART3ReadFlag&0x8000)
{
if( PMD4_CheckSum(UART3ReadBuf)==0xff)
{
DevParam.PM1_0 = (uint16_t)(UART3ReadBuf[4]<<8) + (uint16_t)(UART3ReadBuf[5]<<0);
DevParam.PM2_5 = (uint16_t)(UART3ReadBuf[6]<<8) + (uint16_t)(UART3ReadBuf[7]<<0);
DevParam.PM10 = (uint16_t)(UART3ReadBuf[8]<<8) + (uint16_t)(UART3ReadBuf[9]<<0);
}
UART3ReadFlag = 0;
memset((void *)UART3ReadBuf, 0, sizeof(UART3ReadBuf));
}
if(DevParam.AirInforGetTime >= 2000)
{
//PMD4_ReqGetAirInfor(0xE2);
DevParam.AirInforGetTime = 0;
}
/**********显示实时空气信息*****************/
#ifdef Device_LCD
// PM1.0
if(DevParam.ShowPM1_0 != DevParam.PM1_0)
{
x = (uint16_t)(SimLCD.width/2/2-20);
y = 260;
// 1
i = (uint8_t)(DevParam.PM1_0/100);
SimLCD_NewShowChar( (x+8), y, (i + 16));
// 1
i = (uint8_t)(DevParam.PM1_0/10%10);
SimLCD_NewShowChar( (x+16), y, (i + 16));
// 0
i = (uint8_t)(DevParam.PM1_0%10);
SimLCD_NewShowChar( (x+24), y, (i + 16));
DevParam.ShowPM1_0 = DevParam.PM1_0;
}
// PM2.5
if(DevParam.ShowPM2_5 != DevParam.PM2_5)
{
x = (uint16_t)(SimLCD.width/2-20);
y = 80;
// 1
i = (uint8_t)(DevParam.PM2_5/100);
SimLCD_NewShowChar( (x+8), y, (i + 16));
// 1
i = (uint8_t)(DevParam.PM2_5/10%10);
SimLCD_NewShowChar( (x+16), y, (i + 16));
// 0
i = (uint8_t)(DevParam.PM2_5%10);
SimLCD_NewShowChar( (x+24), y, (i + 16));
DevParam.ShowPM2_5 = DevParam.PM2_5;
}
// PM10
if(DevParam.PM10 != DevParam.ShowPM10)
{
x = (uint16_t)(SimLCD.width/2/2*3-16);
y = 260;
// 1
i = (uint8_t)(DevParam.PM10/100);
SimLCD_NewShowChar( (x+8), y, (i + 16));
// 1
i = (uint8_t)(DevParam.PM10/10%10);
SimLCD_NewShowChar( (x+16), y, (i + 16));
// 0
i = (uint8_t)(DevParam.PM10%10);
SimLCD_NewShowChar( (x+24), y, (i + 16));
DevParam.ShowPM10 = DevParam.PM10;
}
#endif
}
/*显示部分,基础外形刷新*/
void Show_BasicShapeRefresh(void) {
#ifdef Device_LCD
uint16_t x = 0, y = 0;
// 画上边内圆
x = (uint16_t)(SimLCD.width/2);
y = (uint16_t)(SimLCD.height/3) + 10;
// 填充圆环 r0外圆 r1内圆
SimLCD_PointColor = SimLCDColor_CYAN;
SimLCD_FillTorus( x, y, 100, 90);
// 画下边两个圆
x = (uint16_t)(SimLCD.width/2/2*3);
y = (uint16_t)(SimLCD.height/3*2) + (uint16_t)(SimLCD.height/3/2);
// 填充圆环 r0外圆 r1内圆
SimLCD_PointColor = SimLCDColor_YELLOW;
SimLCD_FillTorus( x, y, 50, 45);
x = (uint16_t)(SimLCD.width/2/2);
y = (uint16_t)(SimLCD.height/3*2) + (uint16_t)(SimLCD.height/3/2);
SimLCD_PointColor = SimLCDColor_LIGHTGREEN;
SimLCD_FillTorus( x, y, 50, 45);
// 显示字符串 PM2.5 ug/m3 PM1.0 PM10
x = (uint16_t)(SimLCD.width/2-24);
y = 40;
SimLCD_Show_PM2_5( x, y);
x = (uint16_t)(SimLCD.width/2-20);
y = 180;
SimLCD_Show_ug_m3( x, y);
x = (uint16_t)(SimLCD.width/2/2-20);
y = 230;
SimLCD_Show_PM1_0( x, y);
x = (uint16_t)(SimLCD.width/2/2*3-16);
y = 230;
SimLCD_Show_PM10( x, y);
#endif
}