"我们不做一锤子买卖,只做技术成长的长期伙伴!"
目录
一、视频展示
二、项目简介
题目:基于stm32的自动升降棋系统
主控:STM32
oled显示
雨滴传感器
步进电机(转动模拟升旗)
JQ8400语音播报
遥控模块
功能:
1、可以一键升旗降旗(升旗时播放国歌,降旗不播放)
2、可以一键升降半旗(不播放)
3、雨滴传感器检测到下雨,自动降旗。
4、屏幕显示当前旗子状态。
5、步进电机正转二圈代表升旗到顶,一圈代表半旗,反之同理。
三、原理图设计

四、PCB硬件设计


五、程序设计
#include "stm32f10x.h" // Device header
#include "delay.h"
#include "lcd.h"
#include "IOput.h"
#include "usart.h"
#include "timer.h"
#include "STEPMOTOR.h"
#include "jq8400.h"
#include "IRC.h"
#include "adc.h"
extern u8 res;
u8 rain,on_flag=0,half=0;
u8 show_flag,show1_flag,max_wd=30,dec_wd=20,max_sd=60,dec_sd=40;
void beep_()
{
BEEP=0;
Delay_50ms(200);
BEEP=1;
}
int main (void)
{
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
OLED_Init();
delay_ms(1);
OLED_Clear();
output_init();
input_init();
TIM2_Int_Init(71,9999);
stepmotor_init();
USART_Config();
Drv_Hw_Init ();
Adc_Init();
while(1)
{
Med_Hw_ReadKeyValue();
rain= 100- Get_Adc_Average(0,10)*100/4096;
key_scan(1,0,0);
if(set_flag==1)
{
beep_();
set_flag=0;
show_flag++;
if(show_flag>=1)
{
show_flag=0;
}
}
if(show_flag==0)
{
OLED_ShowCH(0,0," 自动升旗系统 ");
OLED_ShowCH(0,2,"雨情:");
OLED_ShowNum(40,2,rain,2,16);
// OLED_ShowNum(64,2,remote_val,2,16);
OLED_ShowCH(0,4,"全旗:");
OLED_ShowCH(0,6,"半旗:");
if((add_flag==1 || remote_val==15) && half==0)
{
beep_();
remote_val=0;
add_flag=0;
on_flag++;
if(on_flag>=2)
on_flag=0;
OLED_ShowCH(40,4,"运行中");
if(on_flag==1)
{
playsong(1);
MotorCW(1200,1280);
MotorStop();
}
else if(on_flag==0)
{
MotorCCW(1200,1280);
MotorStop();
}
}
else
{
if(remote_val==15)
remote_val=0;
add_flag=0;
}
if(on_flag==1)
{
OLED_ShowCH(40,4,"升起 ");
}
else
{
OLED_ShowCH(40,4,"收起 ");
}
if((dec_flag==1 || remote_val==16 ) && on_flag==0)
{
beep_();
remote_val=0;
dec_flag=0;
half++;
if(half>=2)
half=0;
OLED_ShowCH(40,6,"运行中");
if(half==1)
{
MotorCW(1200,640);
MotorStop();
}
else if(half==0)
{
MotorCCW(1200,640);
MotorStop();
}
}
else
{
remote_val=0;
dec_flag=0;
}
if(half==1)
{
OLED_ShowCH(40,6,"升起 ");
}
else
{
OLED_ShowCH(40,6,"收起 ");
}
if(rain>=50 && on_flag==1)
{
on_flag=0;
MotorCCW(1200,1280);
MotorStop();
}
else if(rain>=50 && half==1)
{
half=0;
MotorCCW(1200,640);
MotorStop();
}
}
}
}
六、资料分享
点击即可查看当前资料分享。