文章目录

  • 前言
  • 一、设备上电后,板上的LED1亮,LED2灭。
  • 二、光照值的显示
    • 1.OLED显示,获取光照值,判断光照值
    • 2.主函数
  • 总结


前言

使用一个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"

引用请求不能忘

更多推荐