diff --git a/source/app/app_config.c b/source/app/app_config.c index 439aa37..55a90d6 100644 --- a/source/app/app_config.c +++ b/source/app/app_config.c @@ -53,6 +53,9 @@ void L3_reg_reset(void) //离床报警参考重量值 R.Weight_Ref = 0; + + //校准体重 + R.calib_kg_x100 = 0; } diff --git a/source/app/app_config.h b/source/app/app_config.h index 91ff0df..ddbeccd 100644 --- a/source/app/app_config.h +++ b/source/app/app_config.h @@ -199,7 +199,7 @@ typedef struct global_register U16 sensor_adc[4]; U16 kgx10_out; U16 adc16; - U16 differ; + S16 differ; } weight; //电量 diff --git a/source/app/app_screen_save.c b/source/app/app_screen_save.c index 6512a33..342d09d 100644 --- a/source/app/app_screen_save.c +++ b/source/app/app_screen_save.c @@ -1,7 +1,7 @@ #include "app_screen_save.h" #include "../msp/msp_eeprom.h" #include "../msp/uart/msp_uart1.h" -#include "../app/app_config.h" +#include "app_config.h" SCREEN_SAVE screen_save_arr[SCREEN_SAVE_LEN] = {0}; @@ -35,7 +35,7 @@ void screen_save_push(U16 weight) // 遍历寻找空位 for(i = 0;i < SCREEN_SAVE_LEN; i++) { - if(screen_save_arr[i].available != 0) + if(screen_save_arr[i].available == 1) { free = i; break; @@ -53,10 +53,7 @@ void screen_save_push(U16 weight) // 放到free位置 screen_save_arr[free].available = 0; screen_save_arr[free].kgx100_out = weight; + // 把数组放回(写入)eeprom中 L0_Iap_Program_array(EEPROM_WEIGHT_ADDR, screen_save_arr,sizeof(screen_save_arr)); - // L0_uart1_str("L0_Iap_Program_array OK!!!!! "); - // L0_uart1_0d0a(); - // L0_uart1_us(weight); - // L0_uart1_0d0a(); } diff --git a/source/app/app_weight.c b/source/app/app_weight.c index 4360240..f96f47a 100644 --- a/source/app/app_weight.c +++ b/source/app/app_weight.c @@ -174,7 +174,7 @@ void L3_task_weight_handler(TS_TASK_weight_ *s) //L2_task_go(D_task_WEIGHT_getADC); TTSS_Task_step(D_task_WEIGHT_getADC): - + ////四个传感器相加后平均 tst_weight.sum32 = ts_adc_samples[0].out5; tst_weight.sum32 += ts_adc_samples[1].out5; diff --git a/source/app/main.c b/source/app/main.c index 199b14a..1aa2c46 100644 --- a/source/app/main.c +++ b/source/app/main.c @@ -71,6 +71,16 @@ void L0_main_initled(void) void L0_main_init(void) { + // A5 5A 05 80 02 32 F0 9D 0.5s + // A5 5A 05 80 02 14 71 47 0.2s + SCRControlPkg scrBeepPowOnPkg = { + 0xA5, 0x5A, + 0x05, //长度 + 0x80, //指令 + 0x02, 0x14, //数据 + 0x71, 0x47, // CRC + }; + int r = 0; Lc_delay_ms(200); L0_main_initled(); @@ -85,8 +95,12 @@ void L0_main_init(void) printf1("\r\nD_sys_MainFre %ld",D_sys_MainFre); + //上电时控制蜂鸣器响一声 + L1_uart1_Array((U8 *)&scrBeepPowOnPkg, sizeof(scrBeepPowOnPkg)); + r = L3_S_init(); printf1("\r\nL3_S_init %d",r); + } //=============================================== @@ -113,7 +127,7 @@ void main(void) { s_nos_tick.t1s_heartbeat = 0; // L1_uartD_uc('.'); - // D_LED1_REV(); + D_LED1_REV(); } if((tpc_flag = L2_debug_ONcomand())) diff --git a/source/app/task_bedalarm.c b/source/app/task_bedalarm.c index 4a4a79a..41e16ad 100644 --- a/source/app/task_bedalarm.c +++ b/source/app/task_bedalarm.c @@ -41,21 +41,20 @@ void L3_task_bed_alarm_handler(S_TASK_Bed_ALARM *s) //判定是否触发报警 TTSS_Task_step(D_task_ALARM_JUDGE): R.weight.differ = R.Weight_Ref - R.weight.kgx10_out; - //放在该task的第二步 if(R.LeaveForbid_flag == LeaveForbid_OPEN) { //触发报警 //取绝对值abs(); - if( abs(R.weight.differ) > 50 ) //&& R.beep != beep_on R.weight.differ + if( R.weight.differ > 50 ) //&& R.beep != beep_on R.weight.differ { L0_uart1_str("R.weight.differ:"); - L0_uart1_ushex(abs(R.weight.differ)); + L0_uart1_ushex(R.weight.differ); L0_uart1_0d0a(); L0_uart1_str("R.Weight_Ref:"); L0_uart1_ushex(R.Weight_Ref); L0_uart1_0d0a(); R.beep = beep_on; - D_LED1_ON(); - L0_uart1_str("Enter1->"); + // D_LED1_ON(); + L0_uart1_str("Enter Alarm->"); L0_uart1_0d0a(); R.beep_startime = D_sys_now; @@ -68,26 +67,27 @@ void L3_task_bed_alarm_handler(S_TASK_Bed_ALARM *s) //判定是否解除报警 TTSS_Task_step(D_task_ALARM_DELETE): - L0_uart1_str("Jump1Jump1Jump1->"); - L0_uart1_0d0a(); - //手动解除 - // if(R.ForbidDelate_flag == 1) - // { - // R.beep = beep_on; - // R.beep_startime = 0; - // R.LeaveForbid_flag = LeaveForbid_OFF; 应在解除按键按下时,操作beep还和置位R.LeaveForbid_flag = LeaveForbid_OFF - // } - //超时解除 //放在该task的第一步 - if(D_sys_now - R.beep_startime > D_COUNT_JIFFIES(5000)) //5000 5秒 30000 30秒 + //超时解除 + if(D_sys_now - R.beep_startime > D_COUNT_JIFFIES(30000)) //5000 5秒 30000 30秒 { R.beep = beep_off; - L0_uart1_str("Jump1->"); + L0_uart1_str("Overtime!! Jump Alarm ->"); L0_uart1_0d0a(); - D_LED1_OFF(); + // D_LED1_OFF(); R.beep_startime = 0; R.LeaveForbid_flag = LeaveForbid_OFF; L2_task_go_Tdelay(D_task_ALARM_JUDGE, D_Tdelay_200ms); } + else if(R.LeaveForbid_flag == LeaveForbid_OFF) + { + R.beep = beep_off; + L0_uart1_str("Manually dismiss!! Jump Alarm->"); + L0_uart1_0d0a(); + // D_LED1_OFF(); + R.beep_startime = 0; + // R.LeaveForbid_flag = LeaveForbid_OFF; + L2_task_go_Tdelay(D_task_ALARM_JUDGE, D_Tdelay_200ms); + } else L2_task_go_Tdelay(D_task_ALARM_DELETE, D_Tdelay_200ms); TTSS_Task_end(); diff --git a/source/app/task_screen.c b/source/app/task_screen.c index 492071e..810034d 100644 --- a/source/app/task_screen.c +++ b/source/app/task_screen.c @@ -67,7 +67,10 @@ SCRControlPkg scrPingOnPkg = { 0x71, 0xAC, // CRC }; -//蜂鸣器指令A5 5A 05 80 02 C8 70 DE +//蜂鸣器指令 +// A5 5A 05 80 02 32 F0 9D 0.5s +// A5 5A 05 80 02 C8 70 DE 2s +// A5 5A 05 80 02 FF 31 08 2.55s SCRControlPkg scrBeepOnPkg = { 0xA5, 0x5A, 0x05, //长度 @@ -100,12 +103,6 @@ void L3_task_screen_handler(S_TASK_SCREEN *s) TTSS_Task_step(D_task_RS485_SEND_BEFORE): //检测功耗模式 ScreenPingOff_judge(); - // L0_uart1_str("R.power_mode: "); - // L0_uart1_uchex(R.power_mode); - // L0_uart1_0d0a(); - // L0_uart1_str("s->power_mode : "); - // L0_uart1_uchex(s->power_mode ); - // L0_uart1_0d0a(); //检测到模式转变 if(s->power_mode != R.power_mode) @@ -140,7 +137,7 @@ void L3_task_screen_handler(S_TASK_SCREEN *s) L2_task_go_Tdelay(D_task_RS485_SEND_BEFORE, D_Tdelay_400ms); //发送后 // TTSS_Task_step(D_task_RS485_SEND_AFTER): - // L2_task_go_Tdelay(D_task_RS485_SEND, D_Tdelay_100ms); + // L2_task_go_Tdelay(D_task_RS485_SEND, D_Tdelay_100ms); TTSS_Task_end(); } @@ -165,27 +162,28 @@ void constructor_scr_pkg() // L0_uart1_str("scrSetValPkg.buf.dl: "); // L0_uart1_us(R.dl); // L0_uart1_0d0a(); -// scrSetValPkg.buf.dl[0] = R.dl >> 8 & 0xFF; -// scrSetValPkg.buf.dl[1] = R.dl >> 0 & 0xFF; -// scrSetValPkg.buf.net_status[0] = R.net_status >> 8 & 0xFF; -// scrSetValPkg.buf.net_status[1] = R.net_status >> 0 & 0xFF; -// -// scrSetValPkg.buf.danwei[0] = R.danwei >> 8 & 0xFF; -// scrSetValPkg.buf.danwei[1] = R.danwei >> 0 & 0xFF; + // scrSetValPkg.buf.dl[0] = R.dl >> 8 & 0xFF; + // scrSetValPkg.buf.dl[1] = R.dl >> 0 & 0xFF; -// scrSetValPkg.buf.beep[0] = R.beep >> 8 & 0xFF; -// scrSetValPkg.buf.beep[1] = R.beep >> 0 & 0xFF; + // scrSetValPkg.buf.net_status[0] = R.net_status >> 8 & 0xFF; + // scrSetValPkg.buf.net_status[1] = R.net_status >> 0 & 0xFF; + // + // scrSetValPkg.buf.danwei[0] = R.danwei >> 8 & 0xFF; + // scrSetValPkg.buf.danwei[1] = R.danwei >> 0 & 0xFF; -// scrSetValPkg.buf.LeaveForbid_flag[0] = R.LeaveForbid_flag >> 8 & 0xFF; -// scrSetValPkg.buf.LeaveForbid_flag[1] = R.LeaveForbid_flag >> 0 & 0xFF; + // scrSetValPkg.buf.beep[0] = R.beep >> 8 & 0xFF; + // scrSetValPkg.buf.beep[1] = R.beep >> 0 & 0xFF; + + // scrSetValPkg.buf.LeaveForbid_flag[0] = R.LeaveForbid_flag >> 8 & 0xFF; + // scrSetValPkg.buf.LeaveForbid_flag[1] = R.LeaveForbid_flag >> 0 & 0xFF; CRC = CRC_16(((U8 *)&scrSetValPkg) + 3, 5); scrSetValPkg.crc[1] = CRC; scrSetValPkg.crc[0] = CRC >> 8; } -//构造历史重量数据协议包 +// 构造历史重量数据协议包 void constructor_weightsave_pkg() { U16 CRC = 0; @@ -202,7 +200,7 @@ void constructor_weightsave_pkg() scrSaveValPkg.crc[0] = CRC >> 8; } -// 屏幕回传协议解析 A5 5A 07 83 00 01 02 22 00 00 +// 屏幕回传协议解析 A55A 07 83 0001 0222 0000 void parse_screen_pkg() { SCReturnPkg *p = (SCReturnPkg *) ts_Urec[D_UART1].sp; @@ -228,10 +226,17 @@ void parse_screen_pkg() tst_weight.kgx10_zero = tst_weight.kgx10; break; case 0xD3://离床报警 + if(R.LeaveForbid_flag != LeaveForbid_OPEN) + { R.LeaveForbid_flag = LeaveForbid_OPEN;//按键按下时,就置标志位R.LeaveForbid_flag == LeaveForbid_OPEN和获取参考点位的重量。 R.Weight_Ref = tst_weight.kgx10; // 参考重量 weight_ref = 当前重量 L0_uart1_str("LeaveForbid_OPEN!!!"); - L0_uart1_0d0a(); + L0_uart1_0d0a(); + } + else if (R.LeaveForbid_flag == LeaveForbid_OPEN) + { + R.LeaveForbid_flag = LeaveForbid_OFF; + } break; case 0xD4://保存 screen_save_push(tst_weight.kgx10);// register1 = tst_weight.kgx10; @@ -243,7 +248,7 @@ void parse_screen_pkg() // scrSetValPkg.buf.language[1] = p->Data[1]; break; case 0xD7://重量单位切换 - R.danwei = p->Data[1]; + R.danwei = (R.danwei == KG)? lb : KG; break; case 0xD8://查看历史数据 // 1.从eeprom中读出数组 @@ -260,12 +265,12 @@ void parse_screen_pkg() // 发送pkg L1_uart1_Array((U8 *)&scrSaveValPkg, sizeof(scrSaveValPkg)); break; - case 0xD9://校准确认 buf[index] 放入寄存器,写入eeprom + case 0xD9://校准确认 // ts_weight_SPara.ts_WPoint[pd485->buf[0]].kg = D_2uc_u16(pd485->buf[1],pd485->buf[2]); - ts_weight_SPara.ts_WPoint[R.calib_index].kg = R.calib_kg_x100 / 100; + ts_weight_SPara.ts_WPoint[R.calib_index].kg = R.calib_kg_x100 / 10; ts_weight_SPara.ts_WPoint[R.calib_index].adc = tst_weight.adc32;//使用当前采样值 L4_WPoint_out(); - //写入IAP + // 写入IAP L3_R_2_S(); L0_Iap_Program_array(D_EEP_BASE,D_struct2U8(S),D_S_LEN); break; @@ -278,11 +283,29 @@ void parse_screen_pkg() { switch (p->start_addr[1]) { + case 0xA0://校准点 + R.calib_index = 0; + // L0_uart1_str("R.calib_index ="); + // L0_uart1_uchex(R.calib_index); + // L0_uart1_0d0a(); + break; case 0xA1://校准点 - R.calib_index = p->Data[1]; + R.calib_index = 1; + // L0_uart1_str("R.calib_index ="); + // L0_uart1_uchex(R.calib_index); + // L0_uart1_0d0a(); + break; + case 0xA2://校准点 + R.calib_index = 2; + // L0_uart1_str("R.calib_index ="); + // L0_uart1_uchex(R.calib_index); + // L0_uart1_0d0a(); break; - case 0xA2://校准体重 - R.calib_kg_x100 = (U16)p->Data[0] << 8 & p->Data[1]; + case 0xA3://校准体重 + R.calib_kg_x100 = (U16)p->Data[0] << 8 | p->Data[1]; + // L0_uart1_str("R.calib_kg_x100 = "); + // L0_uart1_ushex(R.calib_kg_x100); + // L0_uart1_0d0a(); break; default: break; @@ -290,6 +313,7 @@ void parse_screen_pkg() } } // 亮屏时回传A5 5A 06 81 01 01 40 79 B8 + // 给屏幕发送熄屏指令时,回传 A5 5A 06 81 01 01 00 78 48 if(p->cmd == 0x81 && p->num_word == 0x40 ) { R.ScrTouch_flag = 1; @@ -320,7 +344,7 @@ U16 CRC_16(U8 *pMsg, U16 Len) void ScreenPingOff_judge() { U32 Nowtime = D_sys_now; - if( Nowtime - R.ScrTouch_time > D_COUNT_JIFFIES(30000)) //180000 180秒 + if( Nowtime - R.ScrTouch_time > D_COUNT_JIFFIES(30000)) //180000 180秒 30000 30秒 { R.ScrTouch_flag = 0; R.power_mode = POWER_LOW; diff --git a/source/app/task_screen.h b/source/app/task_screen.h index bf3818a..517b8f5 100644 --- a/source/app/task_screen.h +++ b/source/app/task_screen.h @@ -72,6 +72,10 @@ typedef struct // } SCRSetValPkg; // A5 5A 08 83 00 00 01 02 22 00 00 +//A5 5A 08 83 06 D6 01 00 00 FE 60 +// A5 5A 08 83 07 A3 01 05 DC DB 65 +// A5 5A 08 83 07 A1 01 00 00 D8 14 +// A5 5A 08 83 07 A2 01 00 00 D8 50 // A5 5A 06 81 01 01 40 79 B8 typedef struct { @@ -93,6 +97,9 @@ typedef struct U8 crc[2]; } SCRControlPkg; +// A5 5A 05 80 02 32 F0 9D 0.5s +extern SCRControlPkg scrBeepPowOnPkg; + // typedef struct _tpc_screen_ // { // U8 head[2];