物联网竞赛LoRa模块双击实现某些功能-新大陆

一、任务要求

    1、第一次双击key3使得OLED屏幕显示工位号

    2、第二次双击key3使得OLED屏幕显示某个图标

    3、第三次双击key3使得OLED屏幕环境监测

    4、能实现以上三步循环操作

二、代码main.c文件编写

#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"
#include "math.h"     //获取pow计算x的y次幂函数
#include "sht3x.h"    //温湿度
void Init() {
    BoardInitMcu();
    BoardInitPeriph();
    keys_init();//按键初始化
    setTimer2Callback(Time2Handler);
    Tim2McuInit(1);//定时器初始化,设置定时中断1ms中断一次
	OLED_Init();     //OLED初始化
	OLED_Clear();
	ADCS_Init();      //ADC初始化
}
void number()    //显示工位号
{
	OLED_ShowString(56,3,(uint8_t *)"01");
}
uint8_t tubiao[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xF0,0xF8,0xF8,0x7C,0x7C,0x3E,
0x3E,0x3E,0x1F,0x1F,0x1F,0x1F,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFE,0xBE,
0x3E,0x7C,0xFC,0xF8,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0xE0,0xF8,0xFC,0xFF,0x7F,0x1F,0x8F,0x87,0xC3,0xC1,0xE0,0xE0,0xE0,0xE0,
0xE0,0xE0,0xC0,0xC0,0xC0,0x80,0xFF,0xFF,0xFF,0xFF,0x01,0x03,0x07,0x0F,0xFF,0xFF,
0xFE,0xFC,0xF0,0x00,0x01,0x03,0x07,0x0F,0x3F,0x7F,0xFE,0xFC,0xF8,0xE0,0x80,0x00,
0xFC,0xFF,0xFF,0xFF,0xFF,0xF9,0xFE,0xFF,0xFF,0xDF,0xCF,0xC7,0xC3,0xC3,0xC3,0xC3,
0xC3,0xE3,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF8,0xFF,0xFF,
0xFF,0xDF,0xC7,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC3,0xBF,0xFF,0xFF,0xFF,0xF8,
0x3F,0xFF,0xFF,0xFF,0xFD,0x83,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xE3,0xFB,0xFF,
0xFF,0xFF,0x1F,0x3F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xC7,0xC3,
0x87,0x87,0xC7,0xC7,0xC7,0xE7,0xFB,0xFF,0xFF,0x7F,0xDF,0xFF,0xFF,0xFF,0xFF,0x3F,
0x00,0x01,0x07,0x1F,0x3F,0xFF,0xFE,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x1F,0x3F,0xFF,
0xFF,0xFF,0xE0,0xC0,0xC0,0x80,0xFF,0xFF,0xFF,0xFF,0x01,0x03,0x03,0x07,0x07,0x07,
0x07,0x07,0x07,0x07,0x87,0xC3,0xE3,0xF1,0xFC,0xFE,0x7F,0x3F,0x1F,0x07,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0F,0x1F,0x1F,0x3E,0x3E,0x7C,
0x7D,0x7B,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xF8,0xF8,0xF8,0xF8,0x7C,0x7C,
0x7C,0x3E,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
};  
void picture()     //显示图标
{
	OLED_DrawBMP(40,1,48,48,tubiao);
}	
//float temp;
//float humi;
//char str_temp[64];
//char str_humi[64];
float value;
unsigned char databuffer[64];  
void get_sensor()
{
	AdcScanChannel();
	value = pow(10, ((1.395 - log10((50 / AdcReadCh0() - 20) / 10)) / 0.465));
  HAL_Delay(200);
	sprintf((char *)databuffer,"value:%2.0f",value);
	OLED_ShowString(32,3,databuffer);	
//	call_sht11(&temp,&humi);
//	sprintf(str_temp,"%.0f",temp);    //温度
//	OLED_ShowString(50,2,(uint8_t*)str_temp);
//	sprintf(str_humi,"%.0f Rh",humi);   //湿度
//	OLED_ShowString(50,4,(uint8_t*)str_humi);
}
int fun,n,clickkey3,key3time;
void KeyDownHandler()
{
	scan_keys();    
	if(isKey3Pressed())
	{
		resetKey3();   //重置key3状态
		clickkey3++;   //统计双击次数
		if(clickkey3>=2&&key3time<50)
		{
			fun++; //统计功能
			clickkey3=0;
			key3time=0;   //
			if(fun%3==1){n=1;OLED_Clear();}   
			if(fun%3==2){n=2;OLED_Clear();}
			if(fun%3==0){n=3;OLED_Clear();}   
		}else if(clickkey3>=2&&key3time>=50)
		{
			key3time=0;   //两次单击超出时间则归零
		}
	}
}
int main( void )
{
    Init();
    while( 1 )
    {
			KeyDownHandler();
			if(clickkey3)
			{
				++key3time;
				HAL_Delay(5);
			}else{
				key3time=0;
			}
			switch(n)
			{
			  case 1:  number();       break;
				case 2:  picture();      break;
				case 3:  get_sensor();   break;
			}
    }
}

三、LoRa模块烧写代码

 编译无错误,直接用STlink下载,"模组串口连接拨码开关"无要求

四、实验效果

 

 

 

 

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值