#include "check_out.h" #include "gpio.h" #define LOW_FLOW_CNT 3 #define CHECK_PERIOD 250 #define WORK_FLOW_PARA 14400 CHECK_CAL_INF check_cal_g = { .device_type = G10 }; uint8_t get_led_para_output_flag(void) { return check_cal_g.pluse_flag; } void set_led_para_output_flag(uint8_t flag) { check_cal_g.pluse_flag = flag; } /*½øÈëϵͳ±ê¶¨Ö®Ç°µÄ³õʼ»¯¹¤×÷*/ void led_para_output_init(void) { switch (check_cal_g.device_type) { case G6: check_cal_g.check_fre = 0.005; check_cal_g.check_fre_low = 0.001; check_cal_g.check_fre_flow = 0.9; break; case G10: check_cal_g.check_fre = 0.01; check_cal_g.check_fre_low = 0.005; check_cal_g.check_fre_flow = 1.45; break; case G16: check_cal_g.check_fre = 0.01; check_cal_g.check_fre_low = 0.005; check_cal_g.check_fre_flow = 2.3; break; case G25: check_cal_g.check_fre = 0.01; check_cal_g.check_fre_low = 0.005; check_cal_g.check_fre_flow = 3.70; break; default: break; } check_cal_g.check_utotal = 0.1; check_cal_g.low_pluse_out = check_cal_g.check_utotal; check_cal_g.pluse_flag = 0; check_cal_g.low_pluse_cnt = 0; check_cal_g.work_period = CHECK_PERIOD; LED_LOW; //LOWER_PLUSE_LOW } uint16_t led_pluse_out(double flow) { uint8_t new_pluse; double data_differ; double led_data_delay; uint16_t time; /*µÍƵÂö³åͨ¹ýÒ»¸ö¾ÃµÄÀۼƼǼԭÏȵÄÀÛ¼ÆÁ¿*/ check_cal_g.uvol = flow; check_cal_g.check_utotal = check_cal_g.check_utotal + check_cal_g.uvol;//ÀÛ¼ÆÁ÷Á¿ check_cal_g.workConInstantFlow = check_cal_g.uvol * WORK_FLOW_PARA; /*ÅжÏÁ÷Á¿ÓÃÓÚÉ趨µÆÉÁƵÂÊ,СÁ÷Á¿Çл»*/ if(check_cal_g.workConInstantFlow < check_cal_g.check_fre_flow) { /*Ï໥»º³åÉèÖÃ*/ if(check_cal_g.low_pluse_cnt == LOW_FLOW_CNT) { data_differ = check_cal_g.check_fre_low; }else { check_cal_g.low_pluse_cnt ++; } }else { /*Ï໥»º³åÉèÖÃ*/ if(check_cal_g.low_pluse_cnt == 0) { data_differ = check_cal_g.check_fre; }else { check_cal_g.low_pluse_cnt --; } } //data_differ = cal_gas_struct_g.check_fre; if(check_cal_g.low_pluse_out <= 0) { check_cal_g.low_pluse_out = check_cal_g.check_utotal; } //Èç¹û¼ÓÆðÀ´ ±ÈËü´ó£¬ÄÇôÌáǰԤ²âÊä³öledµÄÐźš£ if((check_cal_g.check_utotal) >= (check_cal_g.low_pluse_out + data_differ)) { if(check_cal_g.uvol > data_differ) //Òì³£Çé¿öÏ·µ»Ø,²»¼Æ±ê¶¨ { check_cal_g.pluse_flag = 0; return 0; } //Test_101_P // if(check_cal_g.pluse_flag == 0) { led_data_delay = check_cal_g.check_utotal - (check_cal_g.low_pluse_out + data_differ) ; led_data_delay = 1 - (led_data_delay / check_cal_g.uvol); led_data_delay = check_cal_g.work_period * led_data_delay;//Ô¤²âʱ¼ä¡£ÔÚ´ïµ½¼ÆËãʱ¼äʱÁÁµÆ¡£ /*Ô¤²âʱ¼äÊÇ·ñ´ïµ½ÉÁµÆµÄÁ÷Á¿µã¡£*/ //Test_001_P if(led_data_delay <= 0) { // Test_011_P LED_HIGH; delay_ms(35); LED_LOW; time = 0; //Test_011_P }else if(led_data_delay < (double) (check_cal_g.work_period - 60)) { //Test_111_P if(led_data_delay < 2) time = 1; else time = (uint16_t)led_data_delay; delay_ms(time); //Test_100_P LED_HIGH; delay_ms(35); LED_LOW; }else { //Test_100_P delay_ms(check_cal_g.work_period - 60); LED_HIGH; delay_ms(35); LED_LOW; time = check_cal_g.work_period - 60; } //Test_110_P check_cal_g.low_pluse_out = check_cal_g.low_pluse_out + data_differ; check_cal_g.pluse_flag = 1;//Èç¹ûÕâÒ»¸öÖÜÆÚ´ïµ½ÒªÇóÁË»òÕß³öÏÖ³¬¹ý10L/sÕâÖÖÇé¿öÏȲ»¿¼ÂÇ¡£ } return (36 + time); } return 1; }