心率界面调整
authordxy15521469561 <1731678236@qq.com>
Thu, 13 Jul 2023 07:18:23 +0000 (15:18 +0800)
committerdxy15521469561 <1731678236@qq.com>
Thu, 13 Jul 2023 07:18:23 +0000 (15:18 +0800)
2.sdk/project/K5/ext/static/IMAGE_HEART_ONLY_TEST_DONE.png [deleted file]
2.sdk/project/K5/ext/static/hr_gif_01.png [new file with mode: 0644]
2.sdk/project/K5/ext/static/hr_gif_02.png [new file with mode: 0644]
2.sdk/project/K5/ext/static/hr_gif_03.png [new file with mode: 0644]
2.sdk/project/K5/ext/static/hr_line_bg.png [new file with mode: 0644]
2.sdk/project/K5/ext/static/reset_hr_btn.png [new file with mode: 0644]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appWechat.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui.py

diff --git a/2.sdk/project/K5/ext/static/IMAGE_HEART_ONLY_TEST_DONE.png b/2.sdk/project/K5/ext/static/IMAGE_HEART_ONLY_TEST_DONE.png
deleted file mode 100644 (file)
index 5d641a0..0000000
Binary files a/2.sdk/project/K5/ext/static/IMAGE_HEART_ONLY_TEST_DONE.png and /dev/null differ
diff --git a/2.sdk/project/K5/ext/static/hr_gif_01.png b/2.sdk/project/K5/ext/static/hr_gif_01.png
new file mode 100644 (file)
index 0000000..e7c7d58
Binary files /dev/null and b/2.sdk/project/K5/ext/static/hr_gif_01.png differ
diff --git a/2.sdk/project/K5/ext/static/hr_gif_02.png b/2.sdk/project/K5/ext/static/hr_gif_02.png
new file mode 100644 (file)
index 0000000..800f918
Binary files /dev/null and b/2.sdk/project/K5/ext/static/hr_gif_02.png differ
diff --git a/2.sdk/project/K5/ext/static/hr_gif_03.png b/2.sdk/project/K5/ext/static/hr_gif_03.png
new file mode 100644 (file)
index 0000000..6a7f6ac
Binary files /dev/null and b/2.sdk/project/K5/ext/static/hr_gif_03.png differ
diff --git a/2.sdk/project/K5/ext/static/hr_line_bg.png b/2.sdk/project/K5/ext/static/hr_line_bg.png
new file mode 100644 (file)
index 0000000..2088812
Binary files /dev/null and b/2.sdk/project/K5/ext/static/hr_line_bg.png differ
diff --git a/2.sdk/project/K5/ext/static/reset_hr_btn.png b/2.sdk/project/K5/ext/static/reset_hr_btn.png
new file mode 100644 (file)
index 0000000..289316b
Binary files /dev/null and b/2.sdk/project/K5/ext/static/reset_hr_btn.png differ
index 4674d1f..9ca790f 100644 (file)
@@ -370,12 +370,9 @@ class WechatScreen(Screen):
         Wechat_log("updata_list_show2")            
         
     def talking_cb(self,e):
-        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#有卡时触发sos报警 无卡时自动关机
-            Wechat_log("talking_cb1")
-            EventMesh.publish("publish_message_event_ui",{"func":self.talking,"data":e})
-            Wechat_log("talking_cb2")
-        else:
-            EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
+        Wechat_log("talking_cb1")
+        EventMesh.publish("publish_message_event_ui",{"func":self.talking,"data":e})
+        Wechat_log("talking_cb2")
     #按下录音
     def talking(self,e):
         Wechat_log("talking1")
@@ -406,10 +403,14 @@ class WechatScreen(Screen):
    
 
     def sending_cb(self,e):
-        Wechat_log("sending_cb1")
-        EventMesh.publish("publish_message_event_ui",{"func":self.sending,"data":e})
-        #self.sending(e)
-        Wechat_log("sending_cb2")
+        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#有卡时触发sos报警 无卡时自动关机
+            Wechat_log("sending_cb1")
+            EventMesh.publish("publish_message_event_ui",{"func":self.sending,"data":e})
+            #self.sending(e)
+            Wechat_log("sending_cb2")
+        else:
+            EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
+       
     #松手0.2秒后显示
     def hide_label(self,*args):
         Wechat_log("hide_label1")
index 44cbe13..b0d2ac3 100644 (file)
@@ -13,7 +13,7 @@ class BtnDevice(Abstract):
         self.__pwk_timer = osTimer()
 
         self.keypad = machine.KeyPad(4, 1)
-        self.__PowerDownTimeOut = 4000
+        self.__PowerDownTimeOut = 3000
         self.__tp = tp
         self.long_press = 0
 
index ab4c24b..7eab200 100644 (file)
@@ -1905,6 +1905,7 @@ class gethistoryDataManager(Abstract):
         self.oldstep = 0
         self.old_step = 0
         self.read_data = {}
+        self.read_histroy_data = {}
         check_json= ql_fs.path_exists("/ext/static/storage_file/config.json")
         if check_json == True :
             with open("/ext/static/storage_file/config.json","r") as fd:#音频文件编号
@@ -1929,6 +1930,10 @@ class gethistoryDataManager(Abstract):
                     self.oldHr = 0
                     self.oldspo2 = 0
                     self.oldstep = 0
+        check_= ql_fs.path_exists("/ext/static/storage_file/history_hr.json")
+        if check_json == True :
+            with open("/ext/static/storage_file/history_hr.json","r") as fd:#音频文件编号
+                self.read_histroy_data = ujson.load(fd)
 
     def post_processor_after_instantiation(self):
         EventMesh.subscribe("set_old_hr_data", self.save_hr_value)
@@ -1939,6 +1944,26 @@ class gethistoryDataManager(Abstract):
         EventMesh.subscribe("get_old_step_value", self.get_old_step_value)
         EventMesh.subscribe("set_old_step_value", self.set_old_step_value)
 
+
+        EventMesh.subscribe("get_history_hr_value", self.get_history_hr_value)
+        EventMesh.subscribe("set_history_hr_value", self.set_history_hr_value)
+
+    def get_history_hr_value(self, event, msg): #近7次历史数据统计显示
+        return self.read_histroy_data
+
+    def set_history_hr_value(self, event, msg): 
+        if msg >= 50:
+            self.read_histroy_data = EventMesh.publish("get_history_hr_value")
+            count = len(self.read_histroy_data)
+            if count >= 7:
+                for i in range(6):
+                    self.read_histroy_data["0{}".format(i+1)] = self.read_histroy_data["0{}".format(i+2)]
+                self.read_histroy_data["07"] = msg
+            else:
+                self.read_histroy_data["0{}".format(count+1)] = msg
+            with open("/ext/static/storage_file/history_hr.json","w",encoding="utf-8") as fd:
+                ujson.dump(self.read_histroy_data,fd)
+
     def save_hr_value(self, event, msg): 
         if msg >= 50:
             self.read_data = EventMesh.publish("get_storage_data")
@@ -2206,6 +2231,7 @@ class getStorageDataManager(Abstract):#获取内存数据
 
     def get_storage_data(self, event, msg): 
         return self.read_data 
+    
 
 #定位频率
 class getUpLoadDataManager(Abstract):#
index 8d260c3..743a77e 100644 (file)
@@ -1197,7 +1197,7 @@ no_sim_power_screen_title = None
 no_sim_power_screen_label =None
 no_sim_power_screen_comfirm =None
 no_sim_power_screen_cancel = None
-
+no_sim_power_screen_img = None
 
 #未插卡,长按关机
 class NoSimPowerScreen(Screen):#
@@ -1208,20 +1208,27 @@ class NoSimPowerScreen(Screen):#
         self.meta_type = "popup"
 
     def initialization(self):
-        global no_sim_power_screen,no_sim_power_screen_title,no_sim_power_screen_comfirm,no_sim_power_screen_cancel,no_sim_power_screen_label
+        global no_sim_power_screen,no_sim_power_screen_img,no_sim_power_screen_title,no_sim_power_screen_comfirm,no_sim_power_screen_cancel,no_sim_power_screen_label
         if no_sim_power_screen == None :
             no_sim_power_screen = lv.obj()
             print("no_sim_power_screen")
             no_sim_power_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
 
             no_sim_power_screen_title = lv.label(no_sim_power_screen)
-            no_sim_power_screen_title.set_pos(0, 60)
-            no_sim_power_screen_title.set_size(240, 80)
+            no_sim_power_screen_title.set_pos(0, 20)
+            no_sim_power_screen_title.set_size(240, 40)
             no_sim_power_screen_title.set_text("无SIM卡,无法拨打")
             no_sim_power_screen_title.set_long_mode(lv.label.LONG.WRAP)
             no_sim_power_screen_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
             no_sim_power_screen_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
+            no_sim_power_screen_img = lv.img(no_sim_power_screen)
+            no_sim_power_screen_img.set_pos(100, 70)
+            no_sim_power_screen_img.set_size(61, 61)
+            no_sim_power_screen_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+            no_sim_power_screen_img.set_src("E:/static/poweroff_icon.png")
+
+
             no_sim_power_screen_label = lv.label(no_sim_power_screen)
             no_sim_power_screen_label.set_pos(0, 150)
             no_sim_power_screen_label.set_size(240, 40)
@@ -1231,24 +1238,29 @@ class NoSimPowerScreen(Screen):#
             no_sim_power_screen_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 
-            no_sim_power_screen_comfirm = lv.label(no_sim_power_screen)
-            no_sim_power_screen_comfirm.set_pos(0, 200)
-            no_sim_power_screen_comfirm.set_size(120, 80)
-            no_sim_power_screen_comfirm.set_text("是")
-            no_sim_power_screen_comfirm.set_long_mode(lv.label.LONG.WRAP)
+            no_sim_power_screen_comfirm = lv.img(no_sim_power_screen)
+            no_sim_power_screen_comfirm.set_size(176, 46)
+            no_sim_power_screen_comfirm.set_pos(32, 190)
+            no_sim_power_screen_comfirm.set_src("E:/static/off_icon.png")
             no_sim_power_screen_comfirm.add_flag(lv.obj.FLAG.CLICKABLE)
-            no_sim_power_screen_comfirm.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-            no_sim_power_screen_comfirm.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            no_sim_power_screen_comfirm.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
+            poweroff_confirm_label = lv.label(no_sim_power_screen_comfirm)
+            poweroff_confirm_label.set_text("确定")
+            poweroff_confirm_label.align(lv.ALIGN.CENTER, 0, 5)
+            poweroff_confirm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-            no_sim_power_screen_cancel = lv.label(no_sim_power_screen)
-            no_sim_power_screen_cancel.set_pos(120, 200)
-            no_sim_power_screen_cancel.set_size(120, 80)
-            no_sim_power_screen_cancel.set_text("否")
+            no_sim_power_screen_cancel = lv.img(no_sim_power_screen)
+            no_sim_power_screen_cancel.set_size(176, 46)
+            no_sim_power_screen_cancel.set_pos(32, 250)
+            no_sim_power_screen_cancel.set_src("E:/static/cancel_icon.png")
             no_sim_power_screen_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
-            no_sim_power_screen_cancel.set_long_mode(lv.label.LONG.WRAP)
-            no_sim_power_screen_cancel.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-            no_sim_power_screen_cancel.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            no_sim_power_screen_cancel.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+            poweroff_return_label = lv.label(no_sim_power_screen_cancel)
+            poweroff_return_label.set_text("取消")
+            poweroff_return_label.align(lv.ALIGN.CENTER, 0, 5)
+            poweroff_return_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            no_sim_power_screen_cancel.set_ext_click_area(20)
 
             self.meta = no_sim_power_screen
             no_sim_power_screen_comfirm.add_event_cb(lambda e: EventMesh.callback_wrapper(self.confirm(e)),
@@ -1876,6 +1888,23 @@ heartrate_done_img = None
 heartrate_start_label = None
 heartrate_bpm_label = None
 heartrate_done_label = None
+heartrate_line_bg_img = None
+hr_line1 = None
+hr_line2 = None
+hr_line3 = None
+hr_line4 = None
+hr_line5 = None
+hr_line6 = None
+hr_line7 = None
+heartrate_reset_btn_img = None
+
+style_line_red = lv.style_t()
+style_line_red.init()
+style_line_red.set_line_width(10)
+style_line_red.set_line_color(lv.color_make(0xff, 0x00, 0x00))
+
+hr_line_points = [{"x":0,"y":0},{"x":0,"y":0}]
+
 class HeartrateScreen(Screen):
     NAME = "heartrate"
 
@@ -1888,38 +1917,90 @@ class HeartrateScreen(Screen):
         self.heart_value = 0
 
     def initialization(self):
-        global heartrate_screen,heartrate_label,heartrate_done_img ,heartrate_start_label,heartrate_bpm_label ,heartrate_done_label 
+        global heartrate_screen,heartrate_label,heartrate_reset_btn_img,hr_line1,hr_line2,hr_line3,hr_line4,hr_line5,hr_line6,hr_line7,heartrate_line_bg_img,heartrate_done_img ,heartrate_start_label,heartrate_bpm_label ,heartrate_done_label 
         if heartrate_screen == None:
             heartrate_screen = lv.obj()
             print("heartrate_screen")
             heartrate_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
 
             heartrate_label = lv.label(heartrate_screen)
-            heartrate_label.set_pos(0, 10)
+            heartrate_label.set_pos(0, 20)
             heartrate_label.set_size(240, 40)
             heartrate_label.set_text("心率")
+            heartrate_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0)
             heartrate_label.set_long_mode(lv.label.LONG.WRAP)
-            heartrate_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
             heartrate_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
+            heartrate_line_bg_img = lv.img(heartrate_screen)
+            heartrate_line_bg_img.set_pos(5, 60)
+            heartrate_line_bg_img.set_size(230, 120)
+            heartrate_line_bg_img.set_src("E:/static/hr_line_bg.png")
+
+            
             heartrate_done_img = lv.img(heartrate_screen)
-            heartrate_done_img.set_pos(69, 50)
-            heartrate_done_img.set_size(101, 96)
-            heartrate_done_img.set_src("E:/static/IMAGE_HEART_ONLY_TEST_DONE.png")
+            heartrate_done_img.set_pos(20, 249)
+            heartrate_done_img.set_src("E:/static/hr_gif_03.png")
+
+            heartrate_reset_btn_img = lv.img(heartrate_screen)
+            heartrate_reset_btn_img.set_pos(0, 192)
+            heartrate_reset_btn_img.set_src("E:/static/reset_hr_btn.png")
+            heartrate_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN)
+            heartrate_reset_btn_img.add_flag(lv.obj.FLAG.CLICKABLE)
 
             heartrate_start_label = lv.label(heartrate_screen)
             heartrate_start_label.set_size(240,40)
-            heartrate_start_label.set_pos(0,160)
+            heartrate_start_label.set_pos(0,200)
             heartrate_start_label.set_text(" ")
-            heartrate_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            heartrate_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0)
             heartrate_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
             heartrate_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
 
 
+            hr_line1 = lv.line(heartrate_screen)
+            hr_line1.set_points(hr_line_points,2)
+            hr_line1.set_pos(25,60)
+            hr_line1.set_size(10,0)
+            hr_line1.add_style(style_line_red,0)
+
+            hr_line2 = lv.line(heartrate_screen)
+            hr_line2.set_points(hr_line_points,2)
+            hr_line2.set_pos(53,60)
+            hr_line2.set_size(10,0)
+            hr_line2.add_style(style_line_red,0)
+
+            hr_line3 = lv.line(heartrate_screen)
+            hr_line3.set_points(hr_line_points,2)
+            hr_line3.set_pos(80,60)
+            hr_line3.set_size(10,0)
+            hr_line3.add_style(style_line_red,0)
+
+            hr_line4 = lv.line(heartrate_screen)
+            hr_line4.set_points(hr_line_points,2)
+            hr_line4.set_pos(109,60)
+            hr_line4.set_size(10,0)
+            hr_line4.add_style(style_line_red,0)
+
+            hr_line5 = lv.line(heartrate_screen)
+            hr_line5.set_points(hr_line_points,2)
+            hr_line5.set_pos(136,60)
+            hr_line5.set_size(10,0)
+            hr_line5.add_style(style_line_red,0)
+
+            hr_line6 = lv.line(heartrate_screen)
+            hr_line6.set_points(hr_line_points,2)
+            hr_line6.set_pos(164,60)
+            hr_line6.set_size(10,0)
+            hr_line6.add_style(style_line_red,0)
+
+            hr_line7 = lv.line(heartrate_screen)
+            hr_line7.set_points(hr_line_points,2)
+            hr_line7.set_pos(192,60)
+            hr_line7.set_size(10,0)
+            hr_line7.add_style(style_line_red,0)
+
             heartrate_bpm_label = lv.label(heartrate_screen)
-            heartrate_bpm_label.set_size(240, 40)
-            heartrate_bpm_label.set_pos(0, 180)
-            heartrate_bpm_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            heartrate_bpm_label.set_size(120, 40)
+            heartrate_bpm_label.set_pos(120, 270)
             heartrate_bpm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
             heartrate_bpm_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
 
@@ -1930,36 +2011,11 @@ class HeartrateScreen(Screen):
             heartrate_done_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
             heartrate_done_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
 
-            # screen_chart_1 = lv.chart(heartrate_screen)
-            # screen_chart_1.set_pos(int(0),int(79))
-            # screen_chart_1.set_size(240,155)
-            # screen_chart_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-            # screen_chart_1.set_type(lv.chart.TYPE.BAR)
-            # screen_chart_1.set_range(lv.chart.AXIS.PRIMARY_Y, 0, 100)
-            # screen_chart_1.set_div_line_count(0, 0)
-            # screen_chart_1.set_point_count(24)
-            # chart_series_0 = lv.chart.add_series(screen_chart_1, lv.color_make(0xff,0x00,0x00), lv.chart.AXIS.PRIMARY_Y)
-            # screen_chart_1.set_next_value(chart_series_0, 1)
-            # screen_chart_1.set_next_value(chart_series_0, 20)
-            # # create style style_screen_chart_1_main_main_default
-            # style_screen_chart_1_main_main_default = lv.style_t()
-            # style_screen_chart_1_main_main_default.init()
-            # style_screen_chart_1_main_main_default.set_radius(0)
-            # style_screen_chart_1_main_main_default.set_bg_color(lv.color_make(0x00,0x00,0x00))
-            # style_screen_chart_1_main_main_default.set_bg_grad_color(lv.color_make(0x00,0x00,0x00))
-            # style_screen_chart_1_main_main_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
-            # style_screen_chart_1_main_main_default.set_bg_opa(255)
-            # style_screen_chart_1_main_main_default.set_border_color(lv.color_make(0xe8,0xe8,0xe8))
-            # style_screen_chart_1_main_main_default.set_border_width(6)
-            # style_screen_chart_1_main_main_default.set_border_opa(255)
-            # style_screen_chart_1_main_main_default.set_line_color(lv.color_make(0xe8,0xe8,0xe8))
-            # style_screen_chart_1_main_main_default.set_line_width(2)
-            # style_screen_chart_1_main_main_default.set_line_opa(255)
-            # # add style for screen_chart_1
-            # screen_chart_1.add_style(style_screen_chart_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
             self.meta = heartrate_screen
+            heartrate_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)),
+                lv.EVENT.CLICKED, None)
         heartrate_done_label.set_text(" ")
-        heartrate_bpm_label.set_text(" ")
+        heartrate_bpm_label.set_text("-- bpm")
         heartrate_start_label.set_text("正在测量中.")
         EventMesh.publish("set_hr_state",1)#1代表手动进入测试界面
         
@@ -1967,43 +2023,172 @@ class HeartrateScreen(Screen):
 
     def post_processor_after_initialization(self):
         self.point = 0
-        self.timer.start(1*1000, 1, self.start_measure)
+        self.heart_value = 0
+        self.show_history_data()
+        self.restart_up(0)
+
+    def restart_up(self,e):
+        global heartrate_done_label,heartrate_bpm_label,heartrate_start_label,heartrate_reset_btn_img
+        self.timer.start(1*500, 1, self.start_measure)
+        heartrate_bpm_label.set_text("-- bpm")
+        if heartrate_reset_btn_img != None:
+            heartrate_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN)
+        self.point = 0
+        self.heart_value = 0
         
+        heartrate_done_label.set_text(" ")
+        heartrate_bpm_label.set_text("-- bpm")
+        heartrate_start_label.set_text("正在测量中.")
+        EventMesh.publish("set_hr_state",1)#1代表手动进入测试界面
+        
+        EventMesh.publish(constants.EVENT.START_HEART)
+
+    def show_history_data(self):
+        global hr_line1,hr_line2,hr_line3,hr_line4,hr_line5,hr_line6,hr_line7
+        read_data = {}
+        read_data = EventMesh.publish("get_history_hr_value")
+        print("hr history read_data",read_data)
+        if read_data != None:
+            count = len(read_data)
+            if count != 0:
+                if count >= 7:
+                    for i in  range(count):
+                        value = read_data["0{}".format(i+1)]
+                        if value < 30:
+                            value = 30
+                        if value >= 210:
+                            value = 210
+                        line_value = value - 30 #180-80 = 100 160-100 = 60
+                        line_value = int(line_value*0.58)+1
+                        if line_value >= 100:
+                            line_value = 100
+                        #print("hr hist",line_value)
+                        hr_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
+                        if i == 0:
+                            hr_line1.set_points(hr_line_points,2)
+                            hr_line1.set_pos(25,160-line_value)
+                            hr_line1.set_size(10,line_value)
+                        if i == 1:
+                            hr_line2.set_points(hr_line_points,2)
+                            hr_line2.set_pos(53,160-line_value)
+                            hr_line2.set_size(10,line_value)
+
+                        if i == 2:
+                            hr_line3.set_points(hr_line_points,2)
+                            hr_line3.set_pos(80,160-line_value)
+                            hr_line3.set_size(10,line_value)
+
+                        if i == 3:
+                            hr_line4.set_points(hr_line_points,2)
+                            hr_line4.set_pos(109,160-line_value)
+                            hr_line4.set_size(10,line_value)
+
+                        if i == 4:
+                            hr_line5.set_points(hr_line_points,2)
+                            hr_line5.set_pos(136,160-line_value)
+                            hr_line5.set_size(10,line_value)
+
+                        if i == 5:
+                            hr_line6.set_points(hr_line_points,2)
+                            hr_line6.set_pos(164,160-line_value)
+                            hr_line6.set_size(10,line_value)
+
+                        if i == 6:
+                            hr_line7.set_points(hr_line_points,2)
+                            hr_line7.set_pos(192,160-line_value)
+                            hr_line7.set_size(10,line_value)
+                else:
+                    value = read_data["0{}".format(count)]
+                    if value < 30:
+                        value = 30
+                    if value >= 180:
+                        value = 180
+                    line_value = value - 30 #180-80 = 100 160-100 = 60
+                    line_value = int(line_value*0.58)+1
+                   #
+                    hr_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
+                    if count == 1:
+                        hr_line1.set_points(hr_line_points,2)
+                        hr_line1.set_pos(25,160-line_value)
+                        hr_line1.set_size(10,line_value)
+                    if count == 2:
+                        hr_line2.set_points(hr_line_points,2)
+                        hr_line2.set_pos(53,160-line_value)
+                        hr_line2.set_size(10,line_value)
+
+                    if count == 3:
+                        hr_line3.set_points(hr_line_points,2)
+                        hr_line3.set_pos(80,160-line_value)
+                        hr_line3.set_size(10,line_value)
+
+                    if count == 4:
+                        hr_line4.set_points(hr_line_points,2)
+                        hr_line4.set_pos(109,160-line_value)
+                        hr_line4.set_size(10,line_value)
+
+                    if count == 5:
+                        hr_line5.set_points(hr_line_points,2)
+                        hr_line5.set_pos(136,160-line_value)
+                        hr_line5.set_size(10,line_value)
+
+                    if count == 6:
+                        hr_line6.set_points(hr_line_points,2)
+                        hr_line6.set_pos(164,160-line_value)
+                        hr_line6.set_size(10,line_value)
+
+                    if count == 7:
+                        hr_line7.set_points(hr_line_points,2)
+                        hr_line7.set_pos(192,160-line_value)
+                        hr_line7.set_size(10,line_value)      
 
 
     def start_measure(self,*args):
-        global heartrate_screen,heartrate_label,heartrate_done_img ,heartrate_start_label,heartrate_bpm_label ,heartrate_done_label
+        global heartrate_screen,heartrate_label,heartrate_done_img ,heartrate_reset_btn_img,heartrate_start_label,heartrate_bpm_label ,heartrate_done_label
         self.point = self.point + 1
         EventMesh.publish("system_sleep_rest")#防止黑屏
         self.heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
-        # print("self.heart_value:{}".format(self.heart_value))
-        if self.heart_value < 40:
-            self.heart_value = 0
-        if self.heart_value != 0:
-            heartrate_start_label.set_text(" ")
-            heartrate_bpm_label.set_text("{} bpm".format(self.heart_value))
-        else:
-            heartrate_bpm_label.set_text(" ")
-            if self.point%4 == 0 :
-                heartrate_start_label.set_text("正在测量中..")
-            if self.point%4 == 1 :
-                heartrate_start_label.set_text("正在测量中...")
-            if self.point%4 == 2 :
-                heartrate_start_label.set_text("正在测量中....")
-            if self.point%4 == 3 :
-                heartrate_start_label.set_text("正在测量中.")   
+        print("self.heart_value:{}".format(self.heart_value))
+        if self.point >= 2:
+            if self.heart_value < 40:
+                self.heart_value = 0
+            if self.heart_value != 0:
+                heartrate_bpm_label.set_text("{} bpm".format(self.heart_value))
+            else:
+                heartrate_bpm_label.set_text("-- bpm")
+        
+        if self.point%4 == 0 :
+            heartrate_start_label.set_text("正在测量中..")
+            heartrate_done_img.set_src("E:/static/hr_gif_02.png")
+        if self.point%4 == 1 :
+            heartrate_start_label.set_text("正在测量中...")
+            heartrate_done_img.set_src("E:/static/hr_gif_01.png")
+        if self.point%4 == 2 :
+            heartrate_start_label.set_text("正在测量中.")
+            heartrate_done_img.set_src("E:/static/hr_gif_02.png")
+        
+        if self.point%4 == 3 :
+            heartrate_start_label.set_text("正在测量中.")
+            heartrate_done_img.set_src("E:/static/hr_gif_03.png")
 
-        if self.point > 60: #测20s
+
+
+        if self.point > 120: #测20s
+            heartrate_done_img.set_src("E:/static/hr_gif_03.png")
             self.heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
             if self.heart_value > 50:
                 EventMesh.publish("set_old_hr_data",self.heart_value)
+                EventMesh.publish("set_history_hr_value",self.heart_value)
                 EventMesh.publish(constants.PROTOCOL.HEART_SEND,self.heart_value)
+            heartrate_reset_btn_img.clear_flag(lv.obj.FLAG.HIDDEN)
+            
+            heartrate_start_label.set_text("测量结束,点击重测")
             if self.heart_value != 0:
-                heartrate_start_label.set_text(" ")
                 heartrate_bpm_label.set_text("{} bpm".format(self.heart_value))
-                heartrate_done_label.set_text("测量完成")
+                # heartrate_done_label.set_text("测量完成")
             else:
-                heartrate_start_label.set_text("退出,请重新测量")
+                heartrate_bpm_label.set_text("-- bpm")
+                
+            self.show_history_data()
 
             self.timer.stop()
             self.point = 0
@@ -2394,7 +2579,7 @@ class IncomingCallScreen(Screen):
         pass
     
     def done_return(self):
-       pass
+        pass
         
 
 on_call_screen = None
@@ -2687,7 +2872,7 @@ class OnCallScreen(Screen):
 
     def show_num(self):
         global on_call_screen_tab_label
-        print("phone self.phone_num ",self.phone_num,self.phone_list)
+        #print("phone self.phone_num ",self.phone_num,self.phone_list)
         on_call_screen_tab_label.set_size(200, 30)
         on_call_screen_tab_label.set_text(self.phone_num)
     def one(self,e):