题目要求:
使用一个LoRa模块、一个光照传感器模块完成一个光环境的监控。
任务要求:
使用提供的未完成的工程进行开发。设备上电后,板上的LED1亮,LED2灭。液晶屏上实时显示当前光照值,效果如下: 当光照低于某一设定值时(可用手遮住),板上的LED2灯亮起,高于这一值(手拿开)时LED2灭。编程思路:
先调用AdcReadCh0()实时获取设备值,再将获取到的电压值转换后实时输出值OLED上。
题目分析:
这道题属于较为基础的题目,涉及到电压采集,led控制与OLED显示,相对来说较为简单,只要调用基础库即可完成编程。
代码实现:
这里展示代码,只展示.C部分所编写要用到的主要代码
float hum,temp,light;/*** Main application entry point.*/int main( void ){Init();ADCS_Init();OLED_Init();while( 1 ){handlerPre10Ms();light = AdcReadCh0();light = (2000/3.3)*light;char str[32];sprintf(str,"light: %.2f lux ",light);OLED_ShowString(0,2,str);}}
完整代码:
复制粘贴替换基础工程.C内容
/********************************************************************************* File Name: main.c* Description : Main program body*******************************************************************************/#include <string.h>#include "board.h"#include "hal_key.h"#include "tim-board.h"#include "timer_handles.h"#include "hal_oled.h"#include "adc_reader.h"/***********************************************************************************************º¯Êý£ºvoid Init( void )*¹¦ÄÜ£ºÆ½Ì¨³õʼ»¯*ÊäÈ룺ÎÞ*Êä³ö£ºÎÞ*ÌØÊâ˵Ã÷£ºÎÞ**********************************************************************************************/void Init() {// ¿ª·¢°åƽ̨³õʼ»¯BoardInitMcu();BoardInitPeriph();keys_init();//°´¼ü³õʼ»¯setTimer2Callback(Time2Handler);Tim2McuInit(1);//¶¨Ê±Æ÷³õʼ»¯£¬ÉèÖö¨Ê±ÖжÏ1msÖжÏÒ»´ÎOLED_Init();}/***********************************************************************************************º¯Êý£ºvoid KeyDownHandler( void )*¹¦ÄÜ£º°´Å¥Ê¼þ¼àÌý*ÊäÈ룺ÎÞ*Êä³ö£ºÎÞ*ÌØÊâ˵Ã÷£ºÎÞ**********************************************************************************************/void KeyDownHandler(void) {}/***********************************************************************************************º¯Êý£ºvoid handlerPre10Ms( void )*¹¦ÄÜ£º10ºÁÃëÑ»·*ÊäÈ룺ÎÞ*Êä³ö£ºÎÞ*ÌØÊâ˵Ã÷£ºÑ»·´¦Àí×Üʱ³¤300ms**********************************************************************************************/void handlerPre10Ms(void) {for (int delay = 0; delay < 30; delay++) {HAL_Delay(10);AdcScanChannel();}}float hum,temp,light;/*** Main application entry point.*/int main( void ){Init();ADCS_Init();while( 1 ){handlerPre10Ms();light = AdcReadCh0();light = (2000/3.3)*light;//这里要用到一个公式但是我忘记了char str[32];sprintf(str,"light: %.2f lux ",light);OLED_ShowString(0,2,str);}}
题目图:
【22物联网国赛样题第一套】lora屏幕显示 外设值获取 lora光照获取 物联网竞赛今年历年国赛样题真题代码