diff --git a/.vscode/settings.json b/.vscode/settings.json index bf2512d..a0bad4f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -85,6 +85,7 @@ "task_pen_head.h": "c", "setjmp.h": "c", "algorithm": "c", - "task_w600_ptc.h": "c" + "task_w600_ptc.h": "c", + "task_adc.h": "c" } } \ No newline at end of file diff --git a/keilp/cc_as_stc02_ps5ws.uvprojx b/keilp/cc_as_stc02_ps5ws.uvprojx index 5646501..4de37ba 100644 --- a/keilp/cc_as_stc02_ps5ws.uvprojx +++ b/keilp/cc_as_stc02_ps5ws.uvprojx @@ -399,14 +399,19 @@ ..\source\app\app_eeprom.c - msp_adc.c + task_game.c 1 - ..\source\msp\msp_adc.c + ..\source\app\task_game.c - task_game.c + task_w600_ptc.c 1 - ..\source\app\task_game.c + ..\source\app\task_w600_ptc.c + + + task_adc.c + 1 + ..\source\app\task_adc.c @@ -493,6 +498,11 @@ 1 ..\source\msp\msp_eeprom.c + + msp_adc.c + 1 + ..\source\msp\msp_adc.c + diff --git a/source/app/app_config.c b/source/app/app_config.c index 0bf77ee..2c09f10 100644 --- a/source/app/app_config.c +++ b/source/app/app_config.c @@ -18,7 +18,7 @@ void L3_param_init(void) G.tail[0] = TAIL0; G.tail[1] = TAIL1; - G.bat_percent = 0; + G.Vin = 0; G.volume = 0x15; //U8 i; diff --git a/source/app/app_config.h b/source/app/app_config.h index 6a536bf..4149a2c 100644 --- a/source/app/app_config.h +++ b/source/app/app_config.h @@ -107,8 +107,8 @@ typedef struct global_param U8 head[2]; U8 tail[2]; - // 电量百分比 - U8 bat_percent; + // 电压 + U16 Vin; // 喇叭音量 U8 volume; //调试模式 diff --git a/source/app/main.c b/source/app/main.c index c57f6f9..f1379c3 100644 --- a/source/app/main.c +++ b/source/app/main.c @@ -105,12 +105,14 @@ void main(void) { s_nos_tick.t1s_heartbeat = 0;//置0清空 L0_uart0_uc('.'); - // L0_uart0_sendstr("ADC = "); - // L0_uart0_us(L1_ADC_Read(12)); + L0_uart0_sendstr("ADC = "); + L0_uart0_ushex(_s_task_adc.adc_val[_s_task_adc.index]); + L0_uart0_0d0a(); + L0_uart0_sendstr("Vin = "); + L0_uart0_ushex(G.Vin); // L2_WT2605B_Broadcast(&audio_tcp_noplan); } - // 游戏任务 - L3_task_game_handler(&_s_task_game); + // if (ts_oid.ok == 1) // { @@ -129,29 +131,29 @@ void main(void) // L0_uart0_0d0a(); // L0_uart0_sendstr("oid_p"); // } - + // 系统状态任务 L3_task_appstatus_handler(&_s_task_appstatus); - // 系统状态测试任务 - // L3_task_AppTest_handler(&_s_task_apptest); - // 按键状态任务 L3_task_keystatus_handler(&_s_task_keystatus); - // adc任务 - L3_task_Adc_handler(&_s_task_adc); - - // OID和WIFI任务 + // WIFI任务 if (R.app_status != POW_OFF) { - // OID数据采集 - L1_Oid_readoid(); // WIFI数据解析 L3_uart2_wifi_parse(); L2_task_W600_flow_handle(&_s_task_w600_para); + + // 游戏任务 + L3_task_game_handler(&_s_task_game); + + // adc任务 + L3_task_Adc_handler(&_s_task_adc); } + // 系统状态测试任务 + // L3_task_AppTest_handler(&_s_task_apptest); #if 0 if(s_uart0_rec.ok) diff --git a/source/app/task_adc.c b/source/app/task_adc.c index 83be702..f57adcb 100644 --- a/source/app/task_adc.c +++ b/source/app/task_adc.c @@ -2,6 +2,7 @@ #include "../msp/msp_adc.h" #include "../app/app_config.h" #include "../msp/uart0.h" +#include "../bsp/bsp_WT2605B.h" @@ -13,50 +14,81 @@ void L3_task_Adc_init(void) L1_task_init(&_s_task_adc.task); _s_task_adc.index = 0; _s_task_adc.SUM = 0; + _s_task_adc.LowPower_Flag = 0; + _s_task_adc.LowPower_Count = 0; L3_task_s_go(_s_task_adc,D_task_init); } #define D_task_ADC_READ 0x50 #define D_task_ADC_COUNT 0x51 +#define D_task_LOWPOWER_DETECT 0x52 void L3_task_Adc_handler(S_TASK_ADC *s) { TTSS_Task_init() - L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms); + L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms); TTSS_Task_step(D_task_ADC_READ) s->adc_val[_s_task_adc.index] = L1_ADC_Read(12); s->SUM += s->adc_val[_s_task_adc.index++]; - if (_s_task_adc.index >= 10) { _s_task_adc.index = 0; - L2_task_go_Tdelay(D_task_ADC_COUNT,D_Tdelay_300ms); + L2_task_go_Tdelay(D_task_ADC_COUNT,D_Tdelay_100ms); } else { - L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms); + L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms); } TTSS_Task_step(D_task_ADC_COUNT) +// U8 i; // 计算平均值 - U16 Aver = s->SUM / ADC_NUM; + s->Aver = s->SUM / ADC_NUM; + // L0_uart0_sendstr("s->SUM = "); + // L0_uart0_ulhex(s->SUM); + // L0_uart0_0d0a(); + // L0_uart0_sendstr("s->Aver = "); + // L0_uart0_ushex(s->Aver); + s->SUM = 0; + // s->Variance = 0; // 计算方差 - U8 i; - FP32 Variance = 0; - for(i = 0; i < ADC_NUM; i++) - { - Variance += (s->adc_val[i] - Aver) * (s->adc_val[i] - Aver); - } - Variance /= ADC_NUM; - - // // 方差合格,计算电量,放到G,不合格丢弃 - // if ((U16)(Variance*10) < 2) + // for(i = 0; i < ADC_NUM; i++) // { - // Vin = (Aver / 0x1000) * 3.3; - // Percent = Vin / 4.2 + // S16 diff = s->adc_val[i] - s->Aver; + // s->Variance += diff >= 0 ? diff : -diff; // } - Aver = 0; - L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms); + // s->Variance /= ADC_NUM; + // if (s->Variance <= 200) + // { + // s->Vin = (s->Aver / 0x1000) * 33; + // } + // 分压 0.5 + s->Vin = (s->Aver * 33 * 2) / 0x1000; + G.Vin = s->Vin; + + L2_task_go_Tdelay(D_task_LOWPOWER_DETECT,D_Tdelay_100ms); + + TTSS_Task_step(D_task_LOWPOWER_DETECT) + if (s->LowPower_Flag == 0) + { + if (s->Vin < Alarm_Vol) + { + s->LowPower_Count ++; + if (s->LowPower_Count > Count_Max) + { + L0_uart0_sendstr("s->Aver = "); + s->LowPower_Flag = 1; + // 语音提醒 + L2_WT2605B_Broadcast(&audio_low_power); + s->LowPower_Count = 0; + } + } + else + { + s->LowPower_Count = 0; + } + } + L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms); TTSS_Task_end(); } \ No newline at end of file diff --git a/source/app/task_adc.h b/source/app/task_adc.h index 1c9e289..fcbf8e7 100644 --- a/source/app/task_adc.h +++ b/source/app/task_adc.h @@ -17,13 +17,23 @@ #include "../ctask/task.h" #define ADC_NUM 10 +//电压:3.65v 剩余容量:10% +#define Alarm_Vol 45 +// 最大次数 +#define Count_Max 5 typedef struct _s_task_adc { TS_task task; U16 adc_val[ADC_NUM]; U8 index; - U16 SUM; + U32 SUM; + U32 Aver; + U32 Variance; + U16 Vin; + U8 LowPower_Flag; + // 计数 + U8 LowPower_Count; }S_TASK_ADC; extern S_TASK_ADC _s_task_adc; diff --git a/source/app/task_appstatus.c b/source/app/task_appstatus.c index 8189a48..6fb3cb7 100644 --- a/source/app/task_appstatus.c +++ b/source/app/task_appstatus.c @@ -18,6 +18,8 @@ #include "../bsp/bsp_config.h" #include "../msp/uart0.h" #include "../bsp/bsp_led.h" +#include "../app/task_game.h" +#include "../app/task_Adc.h" #include "../app/task_w600.h" #include "../bsp/bsp_wifi.h" @@ -83,6 +85,11 @@ void L3_task_appstatus_handler(S_TASK_APPSTATUS *s) L2_OID_WIFI_Open(); //wifi任务初始化 L3_task_W600_flow_init(W600_ST); + // Adc任务初始化 + L3_task_Adc_init(); + // game任务初始化 + L3_task_game_init(); + } else if (s->status == WIFI_CONFIG) diff --git a/source/app/task_w600.h b/source/app/task_w600.h index ce0d675..52efdb9 100644 --- a/source/app/task_w600.h +++ b/source/app/task_w600.h @@ -110,9 +110,6 @@ struct _s_task_W600_Para U8 Recieve_QueryAck_Flag; // 发送提交标志 1发送提交 0不发送提交 U8 Send_Submit_Flag; - - - }; extern struct _s_task_W600_Para _s_task_w600_para; diff --git a/source/bsp/bsp_WT2605B.c b/source/bsp/bsp_WT2605B.c index b7fbbce..4c9401f 100644 --- a/source/bsp/bsp_WT2605B.c +++ b/source/bsp/bsp_WT2605B.c @@ -29,6 +29,8 @@ TS_SPEECH_AUDIO audio_tcp_shulte = {0x7E,0x07,0xA3,0x54,0x30,0x31,0x39,0x9 TS_SPEECH_AUDIO audio_tcp_complete = {0x7E,0x07,0xA3,0x54,0x30,0x32,0x30,0x90,0xEF}; //T020恭喜你,今天所有训练任务已完成 TS_SPEECH_AUDIO audio_tcp_noplan = {0x7E,0x07,0xA3,0x54,0x30,0x32,0x31,0x91,0xEF}; //T021今天暂无训练任务,可以进行自由训练哦 +TS_SPEECH_AUDIO audio_low_power = {0x7E,0x07,0xA3,0x54,0x30,0x32,0x32,0x92,0xEF}; //T022 + TS_SPEECH_VOLUME volume_control = {0x7E,0x04,0xAE,0x1E,0xD0,0xEF}; //音量控制 diff --git a/source/bsp/bsp_WT2605B.h b/source/bsp/bsp_WT2605B.h index 20cf27f..9669276 100644 --- a/source/bsp/bsp_WT2605B.h +++ b/source/bsp/bsp_WT2605B.h @@ -47,7 +47,9 @@ extern TS_SPEECH_AUDIO audio_tcp_maze; extern TS_SPEECH_AUDIO audio_tcp_different; extern TS_SPEECH_AUDIO audio_tcp_shulte; extern TS_SPEECH_AUDIO audio_tcp_complete; -extern TS_SPEECH_AUDIO audio_tcp_noplan; +extern TS_SPEECH_AUDIO audio_tcp_noplan; + +extern TS_SPEECH_AUDIO audio_low_power; extern TS_SPEECH_VOLUME volume_control;