|
@@ -10,7 +10,7 @@
|
|
|
#include "ds1302.h"
|
|
|
#include "oled.h"
|
|
|
#include "sk9822.h"
|
|
|
-
|
|
|
+#include "string.h"
|
|
|
|
|
|
u8 humi=0;//湿度值
|
|
|
u8 temp=0;//温度值
|
|
@@ -25,13 +25,18 @@ u16 cj_val=0;//
|
|
|
u8 openflag=0;//手动模式开关按钮
|
|
|
u8 mode_flag=0;
|
|
|
|
|
|
+#define YP1 PCout(13)
|
|
|
+#define YP2 PCout(14)
|
|
|
+#define YP3 PCout(15)
|
|
|
+
|
|
|
+u8 warning_cnt=0;
|
|
|
|
|
|
u16 GetTimer=0;//采集时间计数器
|
|
|
u8 dw_val=0;//挡位//亮度值
|
|
|
u8 sc_val=0;//色彩
|
|
|
int set_s1=7,set_f1=0; //设置 时间1
|
|
|
-int cnt_s1=0,cnt_f1=0,cnt_m1=0;//学习时间 时分秒
|
|
|
-#define RT_INPUT PBin(1)//人体红外感应
|
|
|
+int cnt_s1=2,cnt_f1=0,cnt_m1=0;//学习时间 时分秒
|
|
|
+#define RT_INPUT PBin(8)//人体红外感应
|
|
|
|
|
|
#define KEY_GPIO_PROT GPIOA
|
|
|
#define KEY1_GPIO_PIN GPIO_Pin_0
|
|
@@ -173,7 +178,7 @@ void TIMER3_Int_Init(u16 arr,u16 psc)
|
|
|
int key_Task(void)
|
|
|
{
|
|
|
static char key_flag=0;
|
|
|
- if(KEY1_IN==0|KEY2_IN==0|KEY3_IN==0|KEY4_IN==0)
|
|
|
+ if(KEY1_IN==0|KEY2_IN==0|KEY3_IN==0|KEY4_IN==0|KEY5_IN==0)
|
|
|
{
|
|
|
if(key_flag==0)
|
|
|
{
|
|
@@ -212,6 +217,10 @@ int key_Task(void)
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+ else if(KEY5_IN==0)
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
}else
|
|
|
{
|
|
@@ -238,7 +247,7 @@ void TIM3_IRQHandler(void)//
|
|
|
rt_cnt=0;
|
|
|
}else
|
|
|
{
|
|
|
- if(rt_cnt++>100*10)
|
|
|
+ if(rt_cnt++>50*15)//15s没人了
|
|
|
{
|
|
|
rt_cnt=0;rt_flag=0;
|
|
|
}
|
|
@@ -282,6 +291,214 @@ void ShowTo(char* Pdat,char len)//
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+#define IO_TX_GPIO_Port PAout(7)
|
|
|
+
|
|
|
+void uartX_sendByte(uint8_t val)
|
|
|
+{
|
|
|
+ int i = 0;
|
|
|
+ IO_TX_GPIO_Port=0;
|
|
|
+ delay_us(104);
|
|
|
+
|
|
|
+ for (i = 0; i < 8; i++)
|
|
|
+ {
|
|
|
+ if (val & 0x01)
|
|
|
+ {
|
|
|
+ IO_TX_GPIO_Port=1;
|
|
|
+ } else {
|
|
|
+ IO_TX_GPIO_Port=0;
|
|
|
+ }
|
|
|
+ delay_us(104);
|
|
|
+ val >>= 1;
|
|
|
+ }
|
|
|
+ IO_TX_GPIO_Port=1;
|
|
|
+ delay_us(104);
|
|
|
+}
|
|
|
+/*********************************************************************************************
|
|
|
+//函数名:Next_Play()
|
|
|
+//
|
|
|
+//功能说明:设定音量
|
|
|
+//
|
|
|
+//入口参数:
|
|
|
+//
|
|
|
+//出口参数:NO
|
|
|
+***********************************************************************************************/
|
|
|
+void Next_Play()
|
|
|
+{
|
|
|
+ uartX_sendByte(0x7E);
|
|
|
+ uartX_sendByte(0x02);
|
|
|
+ uartX_sendByte(0x01);
|
|
|
+ uartX_sendByte(0xEF);
|
|
|
+}
|
|
|
+
|
|
|
+/*********************************************************************************************
|
|
|
+//函数名:Last_Play()
|
|
|
+//
|
|
|
+//功能说明:
|
|
|
+//
|
|
|
+//入口参数:
|
|
|
+//
|
|
|
+//出口参数:NO
|
|
|
+***********************************************************************************************/
|
|
|
+void Last_Play()
|
|
|
+{
|
|
|
+ uartX_sendByte(0x7E);
|
|
|
+ uartX_sendByte(0x02);
|
|
|
+ uartX_sendByte(0x02);
|
|
|
+ uartX_sendByte(0xEF);
|
|
|
+}
|
|
|
+/*********************************************************************************************
|
|
|
+//函数名:Specify_Musi_Play()
|
|
|
+//
|
|
|
+//功能说明:指定曲目播放
|
|
|
+//
|
|
|
+//入口参数:
|
|
|
+//
|
|
|
+//出口参数:NO
|
|
|
+***********************************************************************************************/
|
|
|
+void Specify_Musi_Play(u8 num)
|
|
|
+{
|
|
|
+ uartX_sendByte(0x7E);
|
|
|
+ uartX_sendByte(0x04);
|
|
|
+ uartX_sendByte(0x03);
|
|
|
+ uartX_sendByte(0x00);
|
|
|
+ uartX_sendByte(num);
|
|
|
+ uartX_sendByte(0xEF);
|
|
|
+}
|
|
|
+
|
|
|
+/*********************************************************************************************
|
|
|
+//函数名:Volume_add()
|
|
|
+//
|
|
|
+//功能说明:音量加
|
|
|
+//
|
|
|
+//入口参数:
|
|
|
+//
|
|
|
+//出口参数:NO
|
|
|
+***********************************************************************************************/
|
|
|
+void Volume_add()
|
|
|
+{
|
|
|
+ uartX_sendByte(0x7E);
|
|
|
+ uartX_sendByte(0x02);
|
|
|
+ uartX_sendByte(0x04);
|
|
|
+ uartX_sendByte(0xEF);
|
|
|
+}
|
|
|
+/*********************************************************************************************
|
|
|
+//函数名:Volume_nec()
|
|
|
+//
|
|
|
+//功能说明:音量减
|
|
|
+//
|
|
|
+//入口参数:
|
|
|
+//
|
|
|
+//出口参数:NO
|
|
|
+***********************************************************************************************/
|
|
|
+void Volume_nec()
|
|
|
+{
|
|
|
+ uartX_sendByte(0x7E);
|
|
|
+ uartX_sendByte(0x02);
|
|
|
+ uartX_sendByte(0x05);
|
|
|
+ uartX_sendByte(0xEF);
|
|
|
+}
|
|
|
+/*********************************************************************************************
|
|
|
+//函数名:Specify_Volume()
|
|
|
+//
|
|
|
+//功能说明:指定音量
|
|
|
+//
|
|
|
+//入口参数:
|
|
|
+//
|
|
|
+//出口参数:NO
|
|
|
+***********************************************************************************************/
|
|
|
+void Specify_Volume(u8 num)
|
|
|
+{
|
|
|
+ uartX_sendByte(0x7E);
|
|
|
+ uartX_sendByte(0x03);
|
|
|
+ uartX_sendByte(0x06);
|
|
|
+ uartX_sendByte(num);
|
|
|
+ uartX_sendByte(0xEF);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/*********************************************************************************************
|
|
|
+//函数名:Music_play()
|
|
|
+//
|
|
|
+//功能说明:播放
|
|
|
+//
|
|
|
+//入口参数:
|
|
|
+//
|
|
|
+//出口参数:NO
|
|
|
+***********************************************************************************************/
|
|
|
+void Music_play()
|
|
|
+{
|
|
|
+ uartX_sendByte(0x7E);
|
|
|
+ uartX_sendByte(0x02);
|
|
|
+ uartX_sendByte(0x0D);
|
|
|
+ uartX_sendByte(0xEF);
|
|
|
+}
|
|
|
+/*********************************************************************************************
|
|
|
+//函数名:Music_pause()
|
|
|
+//
|
|
|
+//功能说明:暂停
|
|
|
+//
|
|
|
+//入口参数:
|
|
|
+//
|
|
|
+//出口参数:NO
|
|
|
+***********************************************************************************************/
|
|
|
+void Music_pause()
|
|
|
+{
|
|
|
+ uartX_sendByte(0x7E);
|
|
|
+ uartX_sendByte(0x02);
|
|
|
+ uartX_sendByte(0x0E);
|
|
|
+ uartX_sendByte(0xEF);
|
|
|
+}
|
|
|
+/*********************************************************************************************
|
|
|
+//函数名:Music_stop()
|
|
|
+//
|
|
|
+//功能说明:停止
|
|
|
+//
|
|
|
+//入口参数:
|
|
|
+//
|
|
|
+//出口参数:NO
|
|
|
+***********************************************************************************************/
|
|
|
+void Music_stop()
|
|
|
+{
|
|
|
+ uartX_sendByte(0x7E);
|
|
|
+ uartX_sendByte(0x02);
|
|
|
+ uartX_sendByte(0x10);
|
|
|
+ uartX_sendByte(0xEF);
|
|
|
+}
|
|
|
+/*********************************************************************************************
|
|
|
+//函数名:Switch_play_Device()
|
|
|
+//
|
|
|
+//功能说明:U/TF/AUX/SLEEP/FLASH(0/1/2/3/4)切换
|
|
|
+//
|
|
|
+//入口参数:
|
|
|
+//
|
|
|
+//出口参数:NO
|
|
|
+***********************************************************************************************/
|
|
|
+void Switch_play_Device(u8 num)
|
|
|
+{
|
|
|
+ uartX_sendByte(0x7E);
|
|
|
+ uartX_sendByte(0x03);
|
|
|
+ uartX_sendByte(0x09);
|
|
|
+ uartX_sendByte(num);
|
|
|
+ uartX_sendByte(0xEF);
|
|
|
+}
|
|
|
+/*********************************************************************************************
|
|
|
+//函数名:Cycle_play()
|
|
|
+//
|
|
|
+//功能说明:1:全部循环 0:单曲循环
|
|
|
+//
|
|
|
+//入口参数:
|
|
|
+//
|
|
|
+//出口参数:NO
|
|
|
+***********************************************************************************************/
|
|
|
+void Cycle_play(u8 num)
|
|
|
+{
|
|
|
+ uartX_sendByte(0x7E);
|
|
|
+ uartX_sendByte(0x03);
|
|
|
+ uartX_sendByte(0x11);
|
|
|
+ uartX_sendByte(num);
|
|
|
+ uartX_sendByte(0xEF);
|
|
|
+}
|
|
|
+u8 test=0;
|
|
|
|
|
|
int main(void)
|
|
|
{
|
|
@@ -289,26 +506,110 @@ int main(void)
|
|
|
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
|
|
|
delay_init(); //延时函数初始化
|
|
|
LED_Init(); //初始化与连接的硬件接口
|
|
|
- uart_init(115200);
|
|
|
+ YP1=1;YP2=1;YP3=1;
|
|
|
+ uart_init(9600);
|
|
|
delay_ms(1000);
|
|
|
+ key_gpio_init();
|
|
|
+
|
|
|
TIMER3_Int_Init(20000,71);//定时器初始化 //10ms进一次中断
|
|
|
- Wave_IO_Init();
|
|
|
+
|
|
|
BH1750_Init();
|
|
|
OLED_Init();//液晶初始化
|
|
|
OLED_Clear();//液晶清屏
|
|
|
delay_ms(10);//上电延时一会
|
|
|
- key_gpio_init();
|
|
|
+
|
|
|
Ds1302_Gpio_Init();
|
|
|
SK9822_Intit();
|
|
|
-
|
|
|
- SK9822_Write_Data(0xf0,0x55,0xa0,0x0f);
|
|
|
+ Wave_IO_Init();
|
|
|
+ SK9822_Write_Data(0xff,0,0,0);
|
|
|
+ Ds1302_Write_Time_All(1);
|
|
|
+// Next_Play();
|
|
|
+ delay_ms(10);
|
|
|
+ Cycle_play(1);
|
|
|
+ delay_ms(10);
|
|
|
+ Cycle_play(1);
|
|
|
+ delay_ms(10);
|
|
|
+ Specify_Musi_Play(2);
|
|
|
+ delay_ms(10);
|
|
|
+ Cycle_play(1);
|
|
|
+ delay_ms(10);
|
|
|
while(1)
|
|
|
{
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
if(GetTimer>50)//1S
|
|
|
{
|
|
|
GetTimer=0;
|
|
|
+ if(openflag)
|
|
|
+ {
|
|
|
+ switch(dw_val)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ switch(sc_val)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ YP1=0;YP2=1;YP3=1;
|
|
|
+ SK9822_Write_Data(0xff,0xff,0xff,0xff);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 1:
|
|
|
+ YP1=1;YP2=0;YP3=1;
|
|
|
+ SK9822_Write_Data(0xff,255,255,0);
|
|
|
+ break ;
|
|
|
+
|
|
|
+ case 2:
|
|
|
+ YP1=1;YP2=1;YP3=0;
|
|
|
+ SK9822_Write_Data(0xff,60,255,60);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 1:
|
|
|
+ switch(sc_val)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ SK9822_Write_Data(0xff,125,125,125);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 1:
|
|
|
+ SK9822_Write_Data(0xff,125,125,0);
|
|
|
+ break ;
|
|
|
+
|
|
|
+ case 2:
|
|
|
+ SK9822_Write_Data(0xff,30,125,30);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 2:
|
|
|
+ switch(sc_val)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ SK9822_Write_Data(0xff,30,30,30);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 1:
|
|
|
+ SK9822_Write_Data(0xff,40,40,0);
|
|
|
+ break ;
|
|
|
+
|
|
|
+ case 2:
|
|
|
+ SK9822_Write_Data(0xff,10,50,10);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ SK9822_Write_Data(0xff,0,0,0);//熄灭
|
|
|
+ }
|
|
|
+ if(mode_flag)
|
|
|
+ {
|
|
|
+ OLED_ShowString(90,6,"A",16);
|
|
|
+ }else{
|
|
|
+ OLED_ShowString(90,6,"M",16);
|
|
|
+ }
|
|
|
+
|
|
|
if(dht11_read_data(buffer) == 0)//读取温湿度
|
|
|
{
|
|
|
humi = buffer[0] + buffer[1] / 10;//取湿度值
|
|
@@ -316,16 +617,32 @@ int main(void)
|
|
|
}
|
|
|
GzVal = Dispose();//读取光照
|
|
|
cj_val=Wave_Start();
|
|
|
- if(cj_val<10)
|
|
|
+ if(cj_val>15)
|
|
|
{
|
|
|
OLED_ShowText(0,6,"坐姿:异常",0);
|
|
|
+ warning_cnt|=0x01;
|
|
|
}else
|
|
|
{
|
|
|
+ warning_cnt&=~0x01;
|
|
|
OLED_ShowText(0,6,"坐姿:正常",0);
|
|
|
}
|
|
|
- printf("drv_X%dH%dD%dZ\r\n",temp,humi,GzVal);//发送到上位机app
|
|
|
+
|
|
|
+ if(rt_flag) //有人
|
|
|
+ {
|
|
|
+ OLED_ShowString(103,6,"1",16);
|
|
|
+ }
|
|
|
+ else //没人
|
|
|
+ {
|
|
|
+ OLED_ShowString(103,6,"0",16);
|
|
|
+ }
|
|
|
+ printf("drv_X%dH%dD%dZ%d\r\n",temp,humi,GzVal,cj_val);//发送到上位机app
|
|
|
|
|
|
-
|
|
|
+ if(mode_flag)//自动模式
|
|
|
+ {
|
|
|
+
|
|
|
+ }else{ //手动模式
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if(DataUpTime>20) //400ms刷新一次数据
|
|
@@ -333,38 +650,48 @@ int main(void)
|
|
|
DataUpTime=0;//
|
|
|
Ds1302_Readtime();
|
|
|
sprintf((char*)DateShowBuf,"时间:%2d:%2d:%2d", (int)ds1302Data.hour, (int)ds1302Data.min, (int)ds1302Data.sec);
|
|
|
- ShowTo(DateShowBuf,9);
|
|
|
+ ShowTo(DateShowBuf,strlen(DateShowBuf));
|
|
|
OLED_ShowText(0,0,DateShowBuf,0);
|
|
|
sprintf((char*)DateShowBuf,"闹钟:%2d:%2d:00", (int)set_s1, (int)set_f1);
|
|
|
- ShowTo(DateShowBuf,10);
|
|
|
+ ShowTo(DateShowBuf,strlen(DateShowBuf));
|
|
|
OLED_ShowText(0,2,DateShowBuf,0);
|
|
|
|
|
|
sprintf((char*)DateShowBuf,"学习:%2d:%2d:%2d", (int)cnt_s1, (int)cnt_f1,cnt_m1);
|
|
|
- ShowTo(DateShowBuf,10);
|
|
|
+ ShowTo(DateShowBuf,strlen(DateShowBuf));
|
|
|
OLED_ShowText(0,4,DateShowBuf,0);
|
|
|
- if(ds1302Data.hour==set_f1&&ds1302Data.min==set_s1) //到达闹钟时间
|
|
|
+ if((ds1302Data.hour==set_s1)&&(ds1302Data.min==set_f1)) //到达闹钟时间
|
|
|
{
|
|
|
-
|
|
|
+ warning_cnt|=0x02;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ warning_cnt&=~0x02;
|
|
|
+ }
|
|
|
|
|
|
+ if(cnt_s1>=2)
|
|
|
+ {
|
|
|
+ warning_cnt|=0x04;
|
|
|
+ }else{
|
|
|
+ warning_cnt&=~0x04;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+// if((warning_cnt&0x01)==0x01) //坐姿异常
|
|
|
+// {
|
|
|
+// YP1=0;delay_us(10);YP2=1;delay_us(10);YP3=1;delay_us(10);
|
|
|
+// }
|
|
|
+// else if((warning_cnt&0x02)==0x02)//闹钟
|
|
|
+// {
|
|
|
+// YP1=1;delay_us(10);YP2=0;delay_us(10);YP3=1;delay_us(10);
|
|
|
+// }
|
|
|
+// else if((warning_cnt&0x04)==0x04)//学习时间过长
|
|
|
+// {
|
|
|
+// YP1=1;delay_us(10);YP2=1;delay_us(10);YP3=0;delay_us(10);
|
|
|
+// }
|
|
|
+// else{
|
|
|
+// YP1=1;YP2=1;YP3=1;delay_us(10);
|
|
|
+// }
|
|
|
}
|
|
|
- if(mode_flag)//自动模式
|
|
|
- {
|
|
|
- if(rt_flag) //有人
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
- else //没人
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
- }else{ //手动模式
|
|
|
|
|
|
- }
|
|
|
|
|
|
}
|
|
|
}
|