【小华HC32F4A0】RTT OLED温湿计
[复制链接]
【小华HC32F4A0】初识工规级高性能 开发板
【小华HC32F4A0】零代码闪灯
【小华HC32F4A0】RTT 命令行点亮LED灯
【小华HC32F4A0】RTT —UART Hello world
【小华HC32F4A0】RTT OLED
【小华HC32F4A0】RTT HS3003温湿度计
结合上面的OLED、HS3003一起,打OLED显示整合在一起。
1、修改sensor_renesas_hs300x.h文件如下:
#ifndef SENSOR_RENESAS_HS300X_H__
#define SENSOR_RENESAS_HS300X_H__
#include "sensor.h"
#define HS300X_I2C_ADDR 0x44
int rt_hw_hs300x_init(const char *name, struct rt_sensor_config *cfg);
extern struct hs300x_device temp_humi_dev;
int hs300x_read_data(struct hs300x_device* dev, float *humi_f, float *temp_f); //增加外文件调用
#endif
main.c函数修改如下:
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include "sensor_renesas_hs300x.h"
#include "ssd1306.h"
/* defined the LED_GREEN pin: PC9 */
#define LED_GREEN_PIN GET_PIN(C, 9)
#include "sensor_renesas_hs300x.h"
#define HS300X_I2C_BUS "i2c1"
int rt_hw_hs300x_port(void)
{
struct rt_sensor_config cfg;
cfg.intf.dev_name = HS300X_I2C_BUS;
cfg.intf.user_data = (void *)HS300X_I2C_ADDR;
rt_hw_hs300x_init("hs300x", &cfg);
return RT_EOK;
}
INIT_ENV_EXPORT(rt_hw_hs300x_port);
int main(void)
{
float humi_f;
float temp_f;
char buf[128] = {0};
ssd1306_Init();
ssd1306_Fill(Black);
ssd1306_UpdateScreen();
/* set LED_GREEN_PIN pin mode to output */
rt_pin_mode(LED_GREEN_PIN, PIN_MODE_OUTPUT);
while (1)
{
hs300x_read_data(&temp_humi_dev,&humi_f,&temp_f); //读取温温度
rt_sprintf(buf,"T:%d.%2d",(int)temp_f,(int)(temp_f*100)%100);
ssd1306_SetCursor(10, 0);
ssd1306_WriteString(buf, Font_16x26, White); //显示
rt_sprintf(buf,"H:%d.%2d",(int)humi_f,(int)(humi_f*100)%100);
ssd1306_SetCursor(10, 30);
ssd1306_WriteString(buf, Font_16x26, White);
ssd1306_UpdateScreen();
rt_pin_write(LED_GREEN_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED_GREEN_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
}
保存后下载到开发板,效果如下:
【小结】在前面的基础上,只要增加少量代码就可以实现OLED显示的温湿度计了。这得益于RTT与小华半导体的生态建立得好。在我没拿到开发板时,对这个还算是小众的开发板有时担心是不是入门很难。现在看来,太简单了!给小华半导体公司点赞!
|