keil5涉及多个传感器程序使用
1. 实现功能举例
光照传感器控制RGB亮绿灯
RFID卡读取后控制RGB亮红灯
温湿度传感器控制风扇转动
2. 实现流程
a)导包:导入传感器模块所需.c文件
1)光照传感器:
2)RFID读卡
3)温湿度
b)添加所需源文件的.h头文件
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "CTEled.h"
#include "rc522.h"
#include "dht11.h"
#include "i2c.h"
#include "bh1750.h"
#include "lcd.h"
c)风扇及RGB管脚初始化
void FAN_Init(void)//风扇初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits (GPIOA, GPIO_Pin_15);
}
void RGB_Init(void)//RGB初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //ʹÄÜPCʱÖÓ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOC.8
//GPIO_SetBits(GPIOC,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //PC.8/7/6 Êä³ö¸
}
3. 控制逻辑代码
3.1 光照传感器控制RGB亮绿灯
//光照传感器控制RGB绿——>PC15
BH1750_test();
if(result_lx>=1000){
GPIO_SetBits(GPIOC,GPIO_Pin_15); //green
delay_ms(10000);
GPIO_ResetBits(GPIOC,GPIO_Pin_15);
delay_ms(10000);
}
3.2 RFID卡读取后控制RGB亮红灯
//RFID卡读取后控制RGB亮红灯——>PC14 文件rc522.c 函数名RC522_Handel();
if (status == MI_OK) { // 验证成功
status = MI_ERR;
status = PcdWrite(shi,RFID1);
PcdRead(shi,RFID);
if (status == MI_OK) { // 读卡成功
printf("xuehao: ");
GPIO_SetBits(GPIOC,GPIO_Pin_14); //red
for ( i = 0; i < 9; i++) {
printf("%u ", RFID[i]);
}
printf("\r\n");
}
status = MI_ERR;
delay_ms(100);
}
else{
GPIO_ResetBits(GPIOC,GPIO_Pin_14);
}
3.3 温湿度传感器控制风扇转动
//温湿度传感器控制风扇转动 ——>PA15
delay_ms(500);
FAN_Init();
if ((Standard_Humi == 0) && (humidity>40) )
{
Standard_Humi = humidity;
}
USART1_Send_BUF((u8*)msg1,16);
delay_ms (500);
if ( (humidity > Standard_Humi) && (Standard_Humi != 0) )
{
data = humidity - Standard_Humi;
if (data > 10)
{
data = 0;
GPIO_SetBits (GPIOA, GPIO_Pin_15);
}