STM32单片机智能蓝牙APP定时开关插座喂食器药盒
Posted Sandra_C
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32单片机智能蓝牙APP定时开关插座喂食器药盒相关的知识,希望对你有一定的参考价值。
程序源码PCB参考设计 +QQ2142686503
产品功能描述:
本系统由STM32F103C8T6单片机核心板、蓝牙模块、蜂鸣器驱动、LCD1602液晶显示、继电器及电源组成。
1、通过手机蓝牙app可以设置继电器打开的时间段。
2、通过STM32内部RTC实时时钟获取时间信息,将年月日时分秒周几时间信息实时上传到手机蓝牙APP。
3、通过手机蓝牙app可以校时。
4、例如当天设置时间段为:
蓝牙更新数据命令:08:20-11:50,当前时间在09:10时继电器打开,当前时间12:20时继电器关闭。
unsigned char setMin = 12;
unsigned char setSec = 12;
unsigned char midWeek = 0;//星期中间变量
unsigned char dsHour_start_01 = 8; //A组定时时分
unsigned char dsMin_start_01 = 0;
unsigned char dsHour_end_01 = 10;
unsigned char dsMin_end_01 = 30;
unsigned char timeOverFlag = 0; //设置时间范围内 即时间覆盖
unsigned char buzzerReportFlag = 0; //报警置位 表示报过警了
int main(void)
{
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为115200
TIM3_Int_Init(499,7199);//50ms
LED_Init(); //初始化硬件接口
// KEY_Init();
relay=1; buzzer =1 ;//继电器打开
delay_ms(200);
relay=0;relayFlag=0;buzzer = 0 ; //继电器状态标识
Lcd_GPIO_init(); //初始化lcd接口
Lcd_Init(); //初始化lcd
delay_ms(20);
while(RTC_Init()) //RTC初始化 ,一定要初始化成功
{
delay_ms(100);
}
// RTC_Set(2020,1,19,15,52,10); //设置时间 年 月 日 时 分 秒
delay_ms(10);
while(1)
{
if(setTimeFlag == 1)//接收到设置时间命令
{
setTimeFlag = 0;//清空标志
RTC_Set(setYear,setMonth,setDate,setHour,setMin,setSec);
}
if(disFlag == 1)//更新显示
{
disFlag = 0;
if(calendar.week == 0) midWeek = 7;//星期 切换
else midWeek = calendar.week ;//星期 切换
sprintf((char*)dis0,"%02d-%02d-%02d %ds%02d:%02d",(int)calendar.w_year%100,(int)calendar.w_month,(int)calendar.w_date,(int)midWeek,(int)dsHour_start_01,(int)dsMin_start_01);//年月日周
Lcd_Puts(0,0,dis0);//显示
sprintf((char*)dis1,"%02d:%02d:%02d e%02d:%02d",(int)calendar.hour,(int)calendar.min,(int)calendar.sec,(int)dsHour_end_01,(int)dsMin_end_01);//时分秒 10
Lcd_Puts(0,1,dis1);//显示
if((calendar.hour>=dsHour_start_01)&&(calendar.hour<=dsHour_end_01)) //对比时间段1
{
if((dsHour_start_01 != dsHour_end_01)) //设置起止时不再同一小时
{
if((calendar.hour>dsHour_start_01)&&(calendar.hour<dsHour_end_01)) //两个时 范围内
{
timeOverFlag = 1;//打开
}
else if((calendar.hour == dsHour_start_01) && (calendar.min>=dsMin_start_01)) //启停不在一个小时内 当前时间在启动时内
{
timeOverFlag = 1;//打开
}
else if((calendar.hour == dsHour_end_01) && (calendar.min<dsMin_end_01)) //启停不在一个小时内 当前时间在停止时内
{
timeOverFlag = 1;//打开
}
else
{timeOverFlag = 0;}
}
else if((dsHour_end_01 == dsHour_start_01)) //同一个小时内
{
if((calendar.min>=dsMin_start_01) && (calendar.min<dsMin_end_01)) //统一小时分钟范围内
{timeOverFlag = 1;}//打开
else
{timeOverFlag = 0;} //关闭
}
}
else
{
timeOverFlag = 0; //关闭
}
if(timeOverFlag == 1){//时间段内
relay=1;relayFlag=1; //闭合
if(buzzerReportFlag==0){ //蜂鸣器是否报警标志
buzzerReportFlag = 1; //报警置位 表示报过警了
buzzer = 1;delay_ms(200);buzzer = 0;delay_ms(200);
buzzer = 1;delay_ms(200);buzzer = 0;delay_ms(200);
buzzer = 1;delay_ms(200);buzzer = 0;
}
}
else{
relay=0;relayFlag=0; //继电器状态标识
buzzerReportFlag = 0;//蜂鸣器没有报警过
buzzer = 0;
}
sendDataFlag++;// 数据发送延时计数
if(sendDataFlag >= 8)//大概800ms
{
sendDataFlag = 0;//清空
sprintf((char*)dis2,"*D20%02d%02d%02d#\\r\\n",(int)calendar.w_year%100,(int)calendar.w_month,(int)calendar.w_date);//年月日
printf((char*)dis2);//显示
sprintf((char*)dis2,"*T%02d%02d%02d#\\r\\n",(int)calendar.hour,(int)calendar.min,(int)calendar.sec);//时分秒
printf((char*)dis2);//显示
sprintf((char*)dis2,"*S%02d:%02d~%02d:%02d#\\r\\n",(int)dsHour_start_01,(int)dsMin_start_01,(int)dsHour_end_01,(int)dsMin_end_01);//打印
printf((char*)dis2);//显示
}
}
}
}
以上是关于STM32单片机智能蓝牙APP定时开关插座喂食器药盒的主要内容,如果未能解决你的问题,请参考以下文章
毕业设计:基于STM32的智能家居无线(蓝牙wifi)语音控制系统