![cover](https://img-blog.csdnimg.cn/72e9bb14dfc24c0eb8dd3333f520e872.png)
物联网竞赛DAY2----LORA开发(光照值)
使用一个LoRa模块、一个光照传感器模块完成一个光环境的监控。使用提供的未完成的工程进行开发。设备上电后,板上的LED1亮,LED2灭。液晶屏上实时显示当前光照值,效果如下:当光照低于某一设定值时(可用手遮住),板上的LED2灯亮起,高于这一值(手拿开)时LED2灭。引用请求不能忘。
·
前言
使用一个LoRa模块、一个光照传感器模块完成一个光环境的监控。
任务要求:
- 使用提供的未完成的工程进行开发。
- 设备上电后,板上的LED1亮,LED2灭。
- 液晶屏上实时显示当前光照值,效果如下:
- 当光照低于某一设定值时(可用手遮住),板上的LED2灯亮起,高于这一值(手拿开)时LED2灭。
一、设备上电后,板上的LED1亮,LED2灭。
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET); //打开LED1
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET); //关闭LED2
二、光照值的显示
1.OLED显示,获取光照值,判断光照值
代码如下(示例):
void OLED_InitView()
{
OLED_Clear();
OLED_ShowCHinese(0*16+10,3,29);//光
OLED_ShowCHinese(1*16+10,3,30);//照
OLED_ShowCHinese(2*16+10,3,52);//值
OLED_ShowChar(3*16+10,3,':');//:
}
void LoRa_GetSensorDataProcess(void)
{
float voltage;
AdcScanChannel(); //转换ADC双信道寄存器数据为电压值
voltage = AdcReadCh0(); //获得ADC0获得电压值
LightLux = (uint16_t)(5/2.0)*(voltage*100); //转化为光照强度
printf("光照值:%d",LightLux); //把光照强度打印到串口
char StrBuf[64]={0};
memset(StrBuf, '\0', 64);
sprintf(StrBuf, " %d Lx",LightLux);
OLED_ShowString(4*16,3,(uint8_t *)StrBuf); //oled显示光照值
void Light_up(void)
{
if(LightLux <= 200)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET); //光照值小于200Lux时,开启LED2
}
else
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET); //光照值大于200Lux时,关闭LED2
}
2.主函数
代码如下(示例):
int main( void )
{
Init();//开发板设备初始化
OLED_Init(); //液晶初始化
USART1_Init(115200); //串口1初始化
OLED_Clear();
OLED_InitView(); //OLED屏幕显示初始化信息
ADCS_Init(); //ADC初始化
printf("LoRa Light\r\n"); //串口输出信息
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET); //打开LED1
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET); //关闭LED2
while( 1 )
{
LoRa_GetSensorDataProcess(); //获取光照值
Light_up(); //设置阈值为80Lux,如果光照强度小于80Lux,打开LED2,否则关闭LED2
handlerPre10Ms();
}
}
总结
#include "adc_reader.h"
#include "uart_receiver.h"
#include "usart1-board.h"
引用请求不能忘
更多推荐
所有评论(0)