伴随着生活质量的提高,人们对空气质量的要求也开始提升,这里就介绍一种空气质量检测器的实现方法。
要进行空气质量检测就离不开相应的检测器配合,这里采用的是一款体积小巧的功能模块,其外观见图1所示。

图1 功能模块外观
该模块共有4个引脚,是以串口通信的方式来工作,其引脚排列如图2所示。

图2 引脚功能
该模块所依照的通信协议要求见图3所示,其检测到数据结构见图4所示。

图3 通信参数

图4 检测值数据结构
需要说明的是:B1和B2的内容是模块的固定地址,B9则是检测结果的校验码,其内容等于B1至B7的数据之和,只占用一个字节空间。该模块的检测值是以气体浓度为单位,即mg/m3,精度为0.001。
为实现空气质量的检测及显示,它以RA6E2 地奇星开发板为控制核心,以1.8寸TFT显示屏为显示器件,并通过扩展板进行连接。
为此,需要以RASC来配置所涉及的引脚,串口的参数配置见图5所示。

图5 参数配置
受扩展板引脚排列顺序的制约,其不便以SPI的方式来驱动TFT显示屏,故以软件模拟的方式来驱动。
为输出高低电平,所进行的定义语句为:
#define LCD_CS_CLR R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_00_PIN_13, BSP_IO_LEVEL_LOW)
#define LCD_CS_SET R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_00_PIN_13, BSP_IO_LEVEL_HIGH)
#define LCD_DC_CLR R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_00_PIN_14, BSP_IO_LEVEL_LOW)
#define LCD_DC_SET R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_00_PIN_14, BSP_IO_LEVEL_HIGH)
#define LCD_RST_CLR R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_05_PIN_00, BSP_IO_LEVEL_LOW)
#define LCD_RST_SET R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_05_PIN_00, BSP_IO_LEVEL_HIGH)
#define LCD_SDI_CLR R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_02_PIN_07, BSP_IO_LEVEL_LOW)
#define LCD_SDI_SET R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_02_PIN_07, BSP_IO_LEVEL_HIGH)
#define LCD_SCK_CLR R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_03_PIN_02, BSP_IO_LEVEL_LOW)
#define LCD_SCK_SET R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_03_PIN_02, BSP_IO_LEVEL_HIGH)
对显示屏的初始化函数为:
void Lcd_Init(void)
{
unsigned int i;
Lcd_Reset(); .
Lcd_WriteIndex(0x11);
R_BSP_SoftwareDelay(120, BSP_DELAY_UNITS_MILLISECONDS);
Lcd_WriteIndex(0xB1);
Lcd_WriteData(0x01);
Lcd_WriteData(0x2C);
Lcd_WriteData(0x2D);
Lcd_WriteIndex(0xB2);
Lcd_WriteData(0x01);
Lcd_WriteData(0x2C);
Lcd_WriteData(0x2D);
Lcd_WriteIndex(0xB3);
Lcd_WriteData(0x01);
Lcd_WriteData(0x2C);
Lcd_WriteData(0x2D);
Lcd_WriteData(0x01);
Lcd_WriteData(0x2C);
Lcd_WriteData(0x2D);
Lcd_WriteIndex(0xB4);
Lcd_WriteData(0x07);
Lcd_WriteIndex(0xC0);
Lcd_WriteData(0xA2);
Lcd_WriteData(0x02);
Lcd_WriteData(0x84);
Lcd_WriteIndex(0xC1);
Lcd_WriteData(0xC5);
Lcd_WriteIndex(0xC2);
Lcd_WriteData(0x0A);
Lcd_WriteData(0x00);
Lcd_WriteIndex(0xC3);
Lcd_WriteData(0x8A);
Lcd_WriteData(0x2A);
Lcd_WriteIndex(0xC4);
Lcd_WriteData(0x8A);
Lcd_WriteData(0xEE);
Lcd_WriteIndex(0xC5);
Lcd_WriteData(0x0E);
Lcd_WriteIndex(0x36);
Lcd_WriteData(0xC0);
Lcd_WriteIndex(0xe0);
Lcd_WriteData(0x0f);
Lcd_WriteData(0x1a);
Lcd_WriteData(0x0f);
Lcd_WriteData(0x18);
Lcd_WriteData(0x2f);
Lcd_WriteData(0x28);
Lcd_WriteData(0x20);
Lcd_WriteData(0x22);
Lcd_WriteData(0x1f);
Lcd_WriteData(0x1b);
Lcd_WriteData(0x23);
Lcd_WriteData(0x37);
Lcd_WriteData(0x00);
Lcd_WriteData(0x07);
Lcd_WriteData(0x02);
Lcd_WriteData(0x10);
Lcd_WriteIndex(0xe1);
Lcd_WriteData(0x0f);
Lcd_WriteData(0x1b);
Lcd_WriteData(0x0f);
Lcd_WriteData(0x17);
Lcd_WriteData(0x33);
Lcd_WriteData(0x2c);
Lcd_WriteData(0x29);
Lcd_WriteData(0x2e);
Lcd_WriteData(0x30);
Lcd_WriteData(0x30);
Lcd_WriteData(0x39);
Lcd_WriteData(0x3f);
Lcd_WriteData(0x00);
Lcd_WriteData(0x07);
Lcd_WriteData(0x03);
Lcd_WriteData(0x10);
Lcd_WriteIndex(0x2a);
Lcd_WriteData(0x00);
Lcd_WriteData(0x00);
Lcd_WriteData(0x00);
Lcd_WriteData(0x7f);
Lcd_WriteIndex(0x2b);
Lcd_WriteData(0x00);
Lcd_WriteData(0x00);
Lcd_WriteData(0x00);
Lcd_WriteData(0x9f);
Lcd_WriteIndex(0xF0);
Lcd_WriteData(0x01);
Lcd_WriteIndex(0xF6);
Lcd_WriteData(0x00);
Lcd_WriteIndex(0x3A);
Lcd_WriteData(0x05);
Lcd_WriteIndex(0x29);
}为进行汉字显示,其提取字模时的方式如图6所示。

图6 字模提取方式
针对所提取的字模,相应的显示函数为:

在此基础上,实现空气质量检测与显示的主程序为:

经程序的编译及下载,其测试效果如图7所示,说明效果符合预期要求。

图7 检测效果
演示视频:
https://www.bilibili.com/video/BV1YXzXBNE6H/?vd_source=f302fc0cc3a0425328db53a3b92082ca
我要赚赏金
