From: dxy15521469561 <1731678236@qq.com> Date: Mon, 4 Dec 2023 06:40:39 +0000 (+0800) Subject: C06S: X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=72d0cd16576240e3e37f90cc6bd0d69875d7f488;p=mirrors%2FASR1603_G5.git C06S: 血压UI界面 --- diff --git a/2.sdk/project/C06S/ext/static/blood_gif01.png b/2.sdk/project/C06S/ext/static/blood_gif01.png new file mode 100644 index 00000000..a00555ca Binary files /dev/null and b/2.sdk/project/C06S/ext/static/blood_gif01.png differ diff --git a/2.sdk/project/C06S/ext/static/blood_gif02.png b/2.sdk/project/C06S/ext/static/blood_gif02.png new file mode 100644 index 00000000..52d0f20b Binary files /dev/null and b/2.sdk/project/C06S/ext/static/blood_gif02.png differ diff --git a/2.sdk/project/C06S/ext/static/blood_gif03.png b/2.sdk/project/C06S/ext/static/blood_gif03.png new file mode 100644 index 00000000..b7161a26 Binary files /dev/null and b/2.sdk/project/C06S/ext/static/blood_gif03.png differ diff --git a/2.sdk/project/C06S/ext/static/health/health_blood.png b/2.sdk/project/C06S/ext/static/health/health_blood.png new file mode 100644 index 00000000..f592d810 Binary files /dev/null and b/2.sdk/project/C06S/ext/static/health/health_blood.png differ diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/main_init.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/main_init.py index 9e5e21f9..3084186c 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/main_init.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/main_init.py @@ -64,7 +64,7 @@ def main_init(): from ui_main_menu import MainMenuScreen # from ui_WatchFaceScreen import WatchFaceScreen - + from ui_health import HealthScreen,Spo2Screen,TemperatureScreen,bloodpressureScreen,HeartrateScreen from appFactoryMode import FactoryModestepScreen,FactoryModeLocationScreen,FactoryModeScreen ,FactoryModeBatTestScreen,FactoryModeHsensorTestScreen,FactoryModeLogScreen from mgr import setCallStateManager,setclassTimeManager,setSmsIndexManager,ConfigStoreManager,testSmsSetIPManager,playPowerAudioManager,sosInfoCallManager,getBootOffManager,getSosFlagManager,CountdownManager, LocationManager, getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, getplayAudiodStateManager,\ AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldTimeManager,getStorageDataManager,getBrightnessManager,getHrTimeManager,getTempTimeManager,getLowBatManager @@ -91,7 +91,7 @@ def main_init(): ui.add_screen(MainMenuScreen()) ui.add_screen(_ui.PopupScreen()) ui.add_screen(_ui.PhoneScreen()) - ui.add_screen(_ui.HeartrateScreen()) + except Exception as e: usys.print_exception(e) try: @@ -103,8 +103,10 @@ def main_init(): ui.add_screen(_ui.CountdownScreen()) ui.add_screen(_ui.StopwatchScreen()) ui.add_screen(_ui.WeatherScreen()) - ui.add_screen(_ui.Spo2Screen()) - ui.add_screen(_ui.TemperatureScreen()) + ui.add_screen(Spo2Screen()) + ui.add_screen(HeartrateScreen()) + ui.add_screen(TemperatureScreen()) + ui.add_screen(bloodpressureScreen()) ui.add_screen(_ui.ContactsScreen()) except Exception as e: usys.print_exception(e) @@ -112,7 +114,7 @@ def main_init(): from appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen ui.add_screen(WechatScreen()) from alarm import ClkListScreen,ClockManager,NewEditClk,CLKTimeScreen,ClkPeriod,PopupAlarmScreen - from ui_health import HealthScreen + ui.add_screen(ClkListScreen()) ui.add_screen(_ui.CountdownEndScreen()) ui.add_screen(NewEditClk()) diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/mgr.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/mgr.py index 35ed3047..3b26b5f2 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/mgr.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/mgr.py @@ -854,7 +854,7 @@ class DeviceInfoManager(Abstract): """电量小于20% 5分钟提醒一次""" if self.alarm_count <= 120: self.alarm_count+=10 - if self.alarm_count == 60: + if self.alarm_count == 20: EventMesh.publish("set_rtc_alarm") get_low_btn = EventMesh.publish("get_low_bat_btn")# @@ -2469,6 +2469,10 @@ class gethistoryDataManager(Abstract): self.read_histroy_hr_data = [] self.read_histroy_temp_data = [] self.read_histroy_spo2_data = [] + self.read_histroy_blood_data = [] + + self.blMin = 0 + self.blMax = 0 oldHr = EventMesh.publish("get_storage_config","old_hr") if oldHr != None: @@ -2499,15 +2503,22 @@ class gethistoryDataManager(Abstract): self.read_histroy_spo2_data = ujson.load(fd) if self.read_histroy_spo2_data == None: self.read_histroy_spo2_data = [] + + check_blood= ql_fs.path_exists("/ext/static/storage_file/history_blood.json") + if check_blood == True : + with open("/ext/static/storage_file/history_blood.json","r") as fd:#音频文件编号 + self.read_histroy_blood_data = ujson.load(fd) + if self.read_histroy_blood_data == None: + self.read_histroy_blood_data = [] self.temp_value = 0 # self.read_histroy_hr_data=[{"timeSec":16789890,"value":90},{"timeSec":16789888,"value":78},{"timeSec":16789688,"value":68},{"timeSec":16789898,"value":58},\ # {"timeSec":16789897,"value":88},{"timeSec":16789867,"value":77},{"timeSec":16789895,"value":70}] def post_processor_after_instantiation(self): - EventMesh.subscribe("set_old_hr_data", self.save_hr_value) - EventMesh.subscribe("get_old_hr_data", self.get_hr_value) - EventMesh.subscribe("set_old_spo2_data", self.save_spo2_value) + EventMesh.subscribe("set_old_hr_data", self.set_old_hr_data) + EventMesh.subscribe("get_old_hr_data", self.get_old_hr_data) + EventMesh.subscribe("set_old_spo2_data", self.set_old_spo2_data) EventMesh.subscribe("get_old_spo2_data", self.get_spo2_value) EventMesh.subscribe("get_old_step_value", self.get_old_step_value) @@ -2523,6 +2534,40 @@ class gethistoryDataManager(Abstract): EventMesh.subscribe("get_history_spo2_value", self.get_history_spo2_value) EventMesh.subscribe("set_history_spo2_value", self.set_history_spo2_value) + EventMesh.subscribe("set_old_blood_data", self.set_old_blood_data) + EventMesh.subscribe("get_old_blood_data", self.get_old_blood_data) + + def set_old_blood_data(self, event, msg): + self.blMax = msg[0]#收缩压 + self.blMin = msg[1]#舒张压 + if self.blMax > 0 and self.blMin > 0: + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp) + if len(self.read_histroy_blood_data) >= 7: + sort_new = {} + sort_new = sorted(self.read_histroy_blood_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条 + print(sort_new) + for i in range(len(self.read_histroy_blood_data)-1): + sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7 + self.read_histroy_blood_data[i] = sort_new[i] + pass + self.read_histroy_blood_data[6] = {"timeSec": time_tmp, "blMax": self.blMax,"blMin": self.blMin} + else: + self.read_histroy_blood_data.append({"timeSec": time_tmp, "blMax": self.blMax,"blMin": self.blMin}) + + with open("/ext/static/storage_file/history_blood.json","w",encoding="utf-8") as fd: + ujson.dump(self.read_histroy_blood_data,fd) + print(self.read_histroy_blood_data) + EventMesh.publish("show_history_blood_data") + + def get_old_blood_data(self, event, msg): #近7次血压历史数据统计显示 + if self.read_histroy_blood_data: + return self.read_histroy_blood_data + else : + return [] + + + def get_history_spo2_value(self, event, msg): #近7次血氧历史数据统计显示 return self.read_histroy_spo2_data @@ -2567,7 +2612,7 @@ class gethistoryDataManager(Abstract): - def save_hr_value(self, event, msg): + def set_old_hr_data(self, event, msg): if msg >= 50: EventMesh.publish("set_storage_config",["old_hr",msg]) @@ -2595,10 +2640,10 @@ class gethistoryDataManager(Abstract): #print(self.read_histroy_hr_data) - def get_hr_value(self, event, msg): + def get_old_hr_data(self, event, msg): return self.oldHr - def save_spo2_value(self, event, msg): + def set_old_spo2_data(self, event, msg): if msg >= 85: EventMesh.publish("set_storage_config",["old_spo2",msg]) diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/protocol.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/protocol.py index a17e6781..159ff9ec 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/protocol.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/protocol.py @@ -1404,7 +1404,7 @@ class Time_ProtoCol(ProtoCol): machine.RTC().datetime((next_alarm_time[0],next_alarm_time[1],next_alarm_time[2],next_alarm_time[6],next_alarm_time[3],next_alarm_time[4],next_alarm_time[5],0)) #next_alarm_time = utime.localtime(old_Timesec)#年月日时分秒星期365中的第几天 - + EventMesh.publish("set_rtc_alarm") #EventMesh.publish(constants.PROTOCOL.TIME_SEND) diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui.py index ec3a2bcd..57c6fe1d 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui.py @@ -2545,7 +2545,7 @@ class PopupScreen(Screen): dir = lv.indev_t.get_gesture_dir(indev) if code == lv.EVENT.GESTURE: if dir == lv.DIR.RIGHT: - EventMesh.publish("watch_top_show") + # EventMesh.publish("watch_top_show") EventMesh.publish("load_screen", {"screen": "main_menu"}) elif code == lv.EVENT.SHORT_CLICKED: @@ -2659,358 +2659,7 @@ class MsgDetailScreen(Screen): -# -------------------------------------------heartrate screen---------------------------------------------------------- -heartrate_screen = None -heartrate_label = None -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" - - - def __init__(self): - super().__init__() - self.meta = None - self.timer = osTimer() - self.point = 0 - self.heart_value = 0 - self.is_sliding = 0 - EventMesh.subscribe("show_history_hr_data",self.show_history_hr_data) - - def initialization(self): - self.is_sliding =0 - 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_size(LCD_SIZE_W, 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.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, 45) - 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(20, 229) - 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, 172) - 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(LCD_SIZE_W,40) - heartrate_start_label.set_pos(0,182) - heartrate_start_label.set_text("正在测量中.") - 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,45) - 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,45) - 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,45) - 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,45) - 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,45) - 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,45) - 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,45) - 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(120, 34) - heartrate_bpm_label.set_pos(120, 250) - heartrate_bpm_label.set_text("-- bpm") - 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) - - heartrate_done_label = lv.label(heartrate_screen) - heartrate_done_label.set_size(LCD_SIZE_W, 34) - heartrate_done_label.set_pos(0, 250) - heartrate_done_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) - 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) - - self.meta = heartrate_screen - heartrate_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), - lv.EVENT.SHORT_CLICKED, None) - heartrate_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), - lv.EVENT.PRESSING, None) - - 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 post_processor_after_initialization(self): - self.point = 0 - self.is_sliding = 0 - self.heart_value = 0 - EventMesh.publish("show_history_hr_data") - # self.show_history_data() - self.start_init() - - def restart_up(self,e): - global heartrate_done_label,heartrate_bpm_label,heartrate_start_label,heartrate_reset_btn_img - - code = e.get_code() - if code == lv.EVENT.PRESSING: - #print("PRESSING") - self.is_sliding += 1 - - elif code == lv.EVENT.SHORT_CLICKED: - #utime.sleep_ms(10) - print("1self.is_sliding",self.is_sliding) - if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件 - self.is_sliding =0 - self.point = 0 - 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.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) - - self.is_sliding =0 - def start_init(self): - self.point = 0 - 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.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_hr_data(self,event,msg): - 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") - if read_data != None: - if len(read_data) != 0: - sort_new = {} - sort_new = sorted(read_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条 - # print("hr history sort_new",sort_new) - if sort_new != []: - for i in range(len(sort_new)): - print(int(sort_new[i]["hr"])) - # print("hr history read_data",read_data) - value = int(sort_new[i]["hr"]) - 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,145-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,145-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,145-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,145-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,145-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,145-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,145-line_value) - hr_line7.set_size(10,line_value) - def start_measure(self,*args): - EventMesh.publish("publish_message_event_ui",{"func":self.start_measure_do,"data":0}) - def start_measure_do(self,data): - 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) - WEAR = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据 - #print("heart WEAR:{}".format(WEAR)) - # 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 > 120 or (WEAR == 0 and self.point > 10): #测60s或没佩戴 - self.timer.stop() - heartrate_done_img.set_src("E:/static/hr_gif_03.png") - - self.heart_value = EventMesh.publish(constants.EVENT.GET_HEART) - if WEAR == 0: - self.heart_value = 0 - heartrate_start_label.set_text("佩戴异常,点击重测") - else : - heartrate_start_label.set_text("测量结束,点击重测") - - 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) - - - if self.heart_value != 0: - heartrate_bpm_label.set_text("{} bpm".format(self.heart_value)) - # heartrate_done_label.set_text("测量完成") - else: - heartrate_bpm_label.set_text("-- bpm") - - self.point = 0 - EventMesh.publish("set_hr_state",0)#0代表关闭测试 - print("stop debug9") - EventMesh.publish(constants.EVENT.STOP_HEART) - - def Close(self): - self.timer.stop() - get_hr_state = EventMesh.publish("get_hr_state") - get_spo2_state = EventMesh.publish("get_spo2_state") - if get_hr_state == 1 or get_spo2_state == 1: - EventMesh.publish("set_hr_state",0)#0代表关闭测试 - print("stop debug10") - EventMesh.publish(constants.EVENT.STOP_HEART) - - def done_return(self): - EventMesh.publish("load_screen", {"screen": "health"}) - - - - def btn1_release(self): - EventMesh.publish("load_screen", {"screen": "health"}) - - def done_left_to_right(self): - self.timer.stop() - get_hr_state = EventMesh.publish("get_hr_state") - get_spo2_state = EventMesh.publish("get_spo2_state") - if get_hr_state == 1 or get_spo2_state == 1: - EventMesh.publish("set_hr_state",0)#0代表关闭测试 - print("stop debug10") - EventMesh.publish(constants.EVENT.STOP_HEART) - EventMesh.publish("return_prev_screen") - - def btn8_press(self): - EventMesh.publish("watch_top_show") - EventMesh.publish("load_screen", {"screen": "main_menu"}) - - # -------------------------------------------toolbox screen---------------------------------------------------------- toolbox_screen = None @@ -4600,804 +4249,6 @@ class ContactsScreen(Screen): def btn8_press(self): EventMesh.publish("watch_top_show") EventMesh.publish("load_screen", {"screen": "main_menu"}) -# -------------------------------------------temperature screen---------------------------------------------------------- - -temperature_screen = None -temperature_bg_img = None -temperature_body_label = None -temperature_degree_img = None -temperature_value_label = None -temperature_wrist_label = None -temperature_wrist_degree_img = None -temperature_wrist_value_label = None -temperature_measure_end_label = None -temperature_measure_countdown_label = None -temp_reset_btn_img = None -temp_line1 = None -temp_line2 = None -temp_line3 = None -temp_line4 = None -temp_line5 = None -temp_line6 = None -temp_line7 = None -temperature_label = None -temperature_line_bg_img = None -temperature_done_img = None -temperature_start_label=None -temperature_bpm_label = None -temperature_done_label = None -temperature_keep_label = None - -style_line_blue = lv.style_t() -style_line_blue.init() -style_line_blue.set_line_width(10) -style_line_blue.set_line_color(lv.color_make(35, 141, 255)) - -class TemperatureScreen(Screen): - NAME = "temperature" - - - def __init__(self): - super().__init__() - self.meta = None - self.timer = osTimer() - self.point = 0 - self.temp_value = 0 - self.is_sliding =0 - EventMesh.subscribe("show_history_temp_data",self.show_history_temp_data) - def initialization(self): - self.is_sliding =0 - global temperature_screen,temperature_keep_label,temperature_label,temp_reset_btn_img,temp_line1,temp_line2,temp_line3,temp_line4,temp_line5,\ - temp_line6,temp_line7,temperature_degree_img,temperature_line_bg_img,temperature_done_img ,temperature_start_label,temperature_bpm_label ,temperature_done_label - if temperature_screen == None: - temperature_screen = lv.obj() - print("temp_screen") - temperature_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT) - - temperature_label = lv.label(temperature_screen) - temperature_label.set_pos(0, 10) - temperature_label.set_size(LCD_SIZE_W, 40) - temperature_label.set_text("体温") - temperature_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0) - temperature_label.set_long_mode(lv.label.LONG.WRAP) - temperature_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) - - temperature_line_bg_img = lv.img(temperature_screen) - temperature_line_bg_img.set_pos(5, 45) - temperature_line_bg_img.set_size(230, 120) - temperature_line_bg_img.set_src("E:/static/temp_line_bg.png") - - - temperature_done_img = lv.img(temperature_screen) - temperature_done_img.set_pos(30, 218) - temperature_done_img.set_src("E:/static/temp_gif03.png") - - temp_reset_btn_img = lv.img(temperature_screen) - temp_reset_btn_img.set_pos(0, 177) - temp_reset_btn_img.set_src("E:/static/reset_hr_btn.png") - temp_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) - temp_reset_btn_img.add_flag(lv.obj.FLAG.CLICKABLE) - - temperature_start_label = lv.label(temperature_screen) - temperature_start_label.set_size(LCD_SIZE_W,40) - temperature_start_label.set_pos(0,185) - temperature_start_label.set_text("正在测量中.") - temperature_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0) - temperature_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) - temperature_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) - - # hr_line_points1 = [{"x":0,"y":0},{"x":0,"y":30}] - # hr_line_points2 = [{"x":0,"y":0},{"x":0,"y":47}] - # hr_line_points3 = [{"x":0,"y":0},{"x":0,"y":67}] - # hr_line_points4 = [{"x":0,"y":0},{"x":0,"y":85}] - # hr_line_points5 = [{"x":0,"y":0},{"x":0,"y":100}] - # hr_line_points6 = [{"x":0,"y":0},{"x":0,"y":100}] - # hr_line_points7 = [{"x":0,"y":0},{"x":0,"y":100}] - - temp_line1 = lv.line(temperature_screen) - temp_line1.set_points(hr_line_points,2) - temp_line1.set_pos(29,120) - temp_line1.set_size(10,0) - temp_line1.add_style(style_line_blue,0) - - temp_line2 = lv.line(temperature_screen) - temp_line2.set_points(hr_line_points,2) - temp_line2.set_pos(57,103) - temp_line2.set_size(10,0) - temp_line2.add_style(style_line_blue,0) - - temp_line3 = lv.line(temperature_screen) - temp_line3.set_points(hr_line_points,2) - temp_line3.set_pos(84,82) - temp_line3.set_size(10,0) - temp_line3.add_style(style_line_blue,0) - - temp_line4 = lv.line(temperature_screen) - temp_line4.set_points(hr_line_points,2) - temp_line4.set_pos(110,66) - temp_line4.set_size(10,0) - temp_line4.add_style(style_line_blue,0) - - temp_line5 = lv.line(temperature_screen) - temp_line5.set_points(hr_line_points,2) - temp_line5.set_pos(140,50) - temp_line5.set_size(10,0) - temp_line5.add_style(style_line_blue,0) - - temp_line6 = lv.line(temperature_screen) - temp_line6.set_points(hr_line_points,2) - temp_line6.set_pos(167,50) - temp_line6.set_size(10,0) - temp_line6.add_style(style_line_blue,0) - - temp_line7 = lv.line(temperature_screen) - temp_line7.set_points(hr_line_points,2) - temp_line7.set_pos(195,50) - temp_line7.set_size(10,0) - temp_line7.add_style(style_line_blue,0) - - temperature_bpm_label = lv.label(temperature_screen) - temperature_bpm_label.set_size(120, 40) - temperature_bpm_label.set_pos(100, 238) - temperature_bpm_label.set_text("- -") - temperature_bpm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) - temperature_bpm_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) - - temperature_keep_label = lv.label(temperature_screen) - temperature_keep_label.set_size(140, 30) - temperature_keep_label.set_pos(100, 254) - temperature_keep_label.set_text("未出值") - temperature_keep_label.add_flag(lv.obj.FLAG.HIDDEN) - temperature_keep_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) - temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) - - - temperature_degree_img = lv.img(temperature_screen) - temperature_degree_img.set_pos(156, 237) - temperature_degree_img.set_size(22, 22) - temperature_degree_img.set_src("U:/static/degree.png") - temperature_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT) - - - self.meta = temperature_screen - temp_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), - lv.EVENT.SHORT_CLICKED, None) - temp_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), - lv.EVENT.PRESSING, None) - size_x = len(str("- -"))*14 - temperature_degree_img.set_pos(100+size_x, 237) - temperature_bpm_label.set_text("- -") - temperature_start_label.set_text("正在测量中.") - - - def post_processor_after_initialization(self): - self.is_sliding =0 - self.start_init() - - def restart_up(self,e): - - global temperature_done_label,temperature_keep_label,temperature_bpm_label,temperature_start_label,temp_reset_btn_img,temperature_degree_img - code = e.get_code() - - if code == lv.EVENT.PRESSING: - #print("PRESSING") - self.is_sliding += 1 - - elif code == lv.EVENT.SHORT_CLICKED: - #utime.sleep_ms(10) - print("1self.is_sliding",self.is_sliding) - if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件 - self.is_sliding =0 - temperature_bpm_label.set_text("- -") - size_x = len(str("- -"))*14 - temperature_degree_img.set_pos(100+size_x, 237) - temperature_keep_label.set_text("未出值") - temp_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) - self.point = 0 - size_x = len(str("- -"))*14 - temperature_degree_img.set_pos(100+size_x, 237) - temperature_bpm_label.set_text("- -") - temperature_start_label.set_text("正在测量中.") - EventMesh.publish("set_temp_state",1) - EventMesh.publish(constants.EVENT.START_TEMP) - EventMesh.publish("show_history_temp_data") - self.timer.start(1*500, 1, self.start_measure) - - self.is_sliding =0 - - def start_init(self): - temperature_bpm_label.set_text("- -") - size_x = len(str("- -"))*14 - temperature_degree_img.set_pos(100+size_x, 237) - temperature_keep_label.set_text("未出值") - temp_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) - self.point = 0 - size_x = len(str("- -"))*14 - temperature_degree_img.set_pos(100+size_x, 237) - temperature_bpm_label.set_text("- -") - temperature_start_label.set_text("正在测量中.") - EventMesh.publish("set_temp_state",1) - EventMesh.publish(constants.EVENT.START_TEMP) - EventMesh.publish("show_history_temp_data") - self.timer.start(1*500, 1, self.start_measure) - - def show_history_temp_data(self,event,msg): - global temp_line1,temp_line2,temp_line3,temp_line4,temp_line5,temp_line6,temp_line7 - read_data = {} - read_data = EventMesh.publish("get_history_temp_value") - # print("hr get_history_temp_value",read_data) - if read_data != None: - if len(read_data) != 0: - sort_new = {} - sort_new = sorted(read_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五 - count = len(sort_new) - if count != 0: - for i in range(count): - # print(int(sort_new[i]["temp"])) - # print("hr history read_data",read_data) - value = int(sort_new[i]["temp"]) - value_temp = int(value) - if value <= 30: - line_value = int(value_temp) - elif value <= 34: - line_value = int((value_temp-30)*4.25)+30 - elif value <= 38: - line_value = int((value_temp-34)*5)+47 - elif value <= 42: - line_value = int((value_temp-38)*4)+67 - elif value < 46: - line_value = int((value_temp-42)*3.75)+85 - else: - value = 46 - line_value = 100 - - if line_value >= 100: - line_value = 100 - #print("hr hist",line_value) - temp_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}] - if i == 0: - temp_line1.set_points(temp_line_points,2) - temp_line1.set_pos(29,145-line_value) - temp_line1.set_size(10,line_value) - if value >= 37.3: - temp_line1.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) - else: - temp_line1.set_style_line_color(lv.color_make(35,141,255),0) - if i == 1: - temp_line2.set_points(temp_line_points,2) - temp_line2.set_pos(57,145-line_value) - temp_line2.set_size(10,line_value) - if value >= 37.3: - temp_line2.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) - else: - temp_line2.set_style_line_color(lv.color_make(35,141,255),0) - - if i == 2: - temp_line3.set_points(temp_line_points,2) - temp_line3.set_pos(84,145-line_value) - temp_line3.set_size(10,line_value) - if value >= 37.3: - temp_line3.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) - else: - temp_line3.set_style_line_color(lv.color_make(35,141,255),0) - if i == 3: - temp_line4.set_points(temp_line_points,2) - temp_line4.set_pos(112,145-line_value) - temp_line4.set_size(10,line_value) - if value >= 37.3: - temp_line4.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) - else: - temp_line4.set_style_line_color(lv.color_make(35,141,255),0) - if i == 4: - temp_line5.set_points(temp_line_points,2) - temp_line5.set_pos(140,145-line_value) - temp_line5.set_size(10,line_value) - if value >= 37.3: - temp_line5.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) - else: - temp_line5.set_style_line_color(lv.color_make(35,141,255),0) - - if i == 5: - temp_line6.set_points(temp_line_points,2) - temp_line6.set_pos(167,145-line_value) - temp_line6.set_size(10,line_value) - if value >= 37.3: - temp_line6.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) - else: - temp_line6.set_style_line_color(lv.color_make(35,141,255),0) - - if i == 6: - temp_line7.set_points(temp_line_points,2) - temp_line7.set_pos(195,145-line_value) - temp_line7.set_size(10,line_value) - if value >= 37.3: - temp_line7.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) - else: - temp_line7.set_style_line_color(lv.color_make(35,141,255),0) - - def start_measure(self,*args): - EventMesh.publish("publish_message_event_ui",{"func":self.start_measure_do,"data":0}) - def start_measure_do(self,data): - global temperature_label,temperature_keep_label,temperature_done_img ,temp_reset_btn_img,temperature_start_label,temperature_bpm_label ,temperature_done_label - self.point = self.point + 1 - EventMesh.publish("system_sleep_rest")#防止黑屏 - WEAR = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据 - temp = EventMesh.publish(constants.EVENT.GET_TEMP) - temp += 0.5 - if temp < 25 or temp > 42: - temp = 0 - if str(temp).find(".") != -1: - tmp = str(temp).split('.')[0] + '.' + str(temp).split('.')[1][:1]#获取小数点后一位 舍去小数点最后一位 - else: - tmp = temp#获取小数点后一位 舍去小数点最后一位 - - # print("self.temp:{}".format(temp)) - if self.point >= 2: - if temp != 0: - size_x = len(str(tmp))*14 - temperature_degree_img.set_pos(100+size_x, 237) - temperature_bpm_label.set_text("{}".format(tmp)) - else: - size_x = len(str("- -"))*14 - temperature_degree_img.set_pos(100+size_x, 237) - temperature_bpm_label.set_text("- -") - - if self.point%4 == 0 : - temperature_start_label.set_text("正在测量中..") - temperature_done_img.set_src("E:/static/temp_gif02.png") - if self.point%4 == 1 : - temperature_start_label.set_text("正在测量中...") - temperature_done_img.set_src("E:/static/temp_gif01.png") - if self.point%4 == 2 : - temperature_start_label.set_text("正在测量中.") - temperature_done_img.set_src("E:/static/temp_gif02.png") - - if self.point%4 == 3 : - temperature_start_label.set_text("正在测量中.") - temperature_done_img.set_src("E:/static/temp_gif03.png") - - tmp_f_tmp = 0 - tmp_d_tmp = 0 - if str(temp).find(".") != -1: - tmp_f = str(temp).split('.')[0] - tmp_f_tmp = int(tmp_f) - - tmp_d = str(temp).split('.')[1][:1] - tmp_d_tmp = int(tmp_d) - else: - tmp_f_tmp = temp - - if self.point >= 2: - if temp >= 37.3: - temperature_keep_label.set_text("体温偏高") - temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0x00, 0x00), lv.STATE.DEFAULT) - elif temp == 0: - temperature_keep_label.set_text(" ") - temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) - else: - temperature_keep_label.set_text("体温正常") - temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) - - if self.point > 120 or (WEAR == 0 and self.point > 10): #测2min - self.timer.stop() - if WEAR == 0: - temp = 0 - temperature_start_label.set_text("佩戴异常,点击重测") - size_x = len(str("- -"))*14 - temperature_degree_img.set_pos(100+size_x, 237) - temperature_bpm_label.set_text("- -") - temperature_keep_label.set_text(" ") - temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) - else : - temperature_start_label.set_text("测量结束,点击重测") - if temp > 0: - EventMesh.publish("set_history_temp_value",temp) - EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp]) - num = str(tmp_f_tmp)+"."+ str(tmp_d_tmp) - EventMesh.publish(constants.PROTOCOL.BTEMP2_SEND,[1,num]) - if temp >= 37.3: - temperature_done_img.set_src("E:/static/temp_high.png") - else: - temperature_done_img.set_src("E:/static/temp_gif03.png") - temp_reset_btn_img.clear_flag(lv.obj.FLAG.HIDDEN) - self.point = 0 - EventMesh.publish("set_temp_state",0) - - EventMesh.publish(constants.EVENT.STOP_TEMP) - - - print("stop debug9") - - def Close(self): - self.timer.stop() - EventMesh.publish("set_temp_state",0) - EventMesh.publish(constants.EVENT.STOP_TEMP) - - - - def done_return(self): - EventMesh.publish("load_screen", {"screen": "health"}) - - def btn1_release(self): - EventMesh.publish("load_screen", {"screen": "health"}) - - def done_left_to_right(self): - self.timer.stop() - EventMesh.publish("set_temp_state",0) - EventMesh.publish(constants.EVENT.STOP_TEMP) - EventMesh.publish("return_prev_screen") - - def btn8_press(self): - EventMesh.publish("watch_top_show") - EventMesh.publish("load_screen", {"screen": "main_menu"}) - - - -line_points = [{"x":0,"y":0},{"x":LCD_SIZE_W,"y":0}] -spo2_screen = None -spo2_label_0 = None -spo2_done_img = None -spo2_label = None -spo2_label_1 = None -spo2_line = None -spo2_last_time = None -spo2_last_value = None -spo2_line1 = None -spo2_line2 = None -spo2_line3 = None -spo2_line4 = None -spo2_line5 = None -spo2_line6 = None -spo2_line7 = None -spo2_reset_btn_img = None -spo2_label = None -spo2_line_bg_img = None -spo2_done_img = None -spo2_done_label = None -spo2_value_label = None -spo2_start_label = 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)) - -spo2_line_points = [{"x":0,"y":0},{"x":0,"y":0}] - -class Spo2Screen(Screen): - NAME = "spo2" - - - def __init__(self): - super().__init__() - self.meta = None - self.timer = osTimer() - self.point = 0 - self.spo2_value = 0 - self.is_sliding = 0 - EventMesh.subscribe("show_history_spo2_data",self.show_history_spo2_data) - - #self.Hsensor = None - def initialization(self): - self.is_sliding = 0 - global spo2_screen,spo2_label,spo2_value_label,spo2_reset_btn_img,spo2_done_img,spo2_line_bg_img,spo2_line1,spo2_line2,\ - spo2_line3,spo2_line4,spo2_line5,spo2_line6,spo2_line7,spo2_line_bg_img ,spo2_start_label ,spo2_done_label - if spo2_screen == None: - spo2_screen = lv.obj() - print("spo2_screen") - spo2_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT) - - spo2_label = lv.label(spo2_screen) - spo2_label.set_pos(0, 10) - spo2_label.set_size(LCD_SIZE_W, 40) - spo2_label.set_text("血氧") - spo2_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0) - spo2_label.set_long_mode(lv.label.LONG.WRAP) - spo2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) - - spo2_line_bg_img = lv.img(spo2_screen) - spo2_line_bg_img.set_pos(5, 45) - spo2_line_bg_img.set_size(230, 120) - spo2_line_bg_img.set_src("E:/static/spo2_line_bg.png") - - - spo2_done_img = lv.img(spo2_screen) - spo2_done_img.set_pos(30, 220) - spo2_done_img.set_src("E:/static/spo2_gif04.png") - - spo2_reset_btn_img = lv.img(spo2_screen) - spo2_reset_btn_img.set_pos(0, 177) - spo2_reset_btn_img.set_src("E:/static/reset_hr_btn.png") - spo2_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) - spo2_reset_btn_img.add_flag(lv.obj.FLAG.CLICKABLE) - - spo2_start_label = lv.label(spo2_screen) - spo2_start_label.set_size(LCD_SIZE_W,40) - spo2_start_label.set_pos(0,185) - spo2_start_label.set_text("正在测量中.") - spo2_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0) - spo2_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) - spo2_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) - - - spo2_line1 = lv.line(spo2_screen) - spo2_line1.set_points(spo2_line_points,2) - spo2_line1.set_pos(25,45) - spo2_line1.set_size(10,0) - spo2_line1.add_style(style_line_red,0) - - spo2_line2 = lv.line(spo2_screen) - spo2_line2.set_points(spo2_line_points,2) - spo2_line2.set_pos(53,45) - spo2_line2.set_size(10,0) - spo2_line2.add_style(style_line_red,0) - - spo2_line3 = lv.line(spo2_screen) - spo2_line3.set_points(spo2_line_points,2) - spo2_line3.set_pos(80,45) - spo2_line3.set_size(10,0) - spo2_line3.add_style(style_line_red,0) - - spo2_line4 = lv.line(spo2_screen) - spo2_line4.set_points(spo2_line_points,2) - spo2_line4.set_pos(109,45) - spo2_line4.set_size(10,0) - spo2_line4.add_style(style_line_red,0) - - spo2_line5 = lv.line(spo2_screen) - spo2_line5.set_points(spo2_line_points,2) - spo2_line5.set_pos(136,45) - spo2_line5.set_size(10,0) - spo2_line5.add_style(style_line_red,0) - - spo2_line6 = lv.line(spo2_screen) - spo2_line6.set_points(spo2_line_points,2) - spo2_line6.set_pos(164,45) - spo2_line6.set_size(10,0) - spo2_line6.add_style(style_line_red,0) - - spo2_line7 = lv.line(spo2_screen) - spo2_line7.set_points(spo2_line_points,2) - spo2_line7.set_pos(192,45) - spo2_line7.set_size(10,0) - spo2_line7.add_style(style_line_red,0) - - spo2_value_label = lv.label(spo2_screen) - spo2_value_label.set_size(110, 34) - spo2_value_label.set_pos(110, 240) - spo2_value_label.set_text("- -%") - spo2_value_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) - spo2_value_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) - - - self.meta = spo2_screen - spo2_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), - lv.EVENT.SHORT_CLICKED, None) - spo2_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), - lv.EVENT.PRESSING, None) - - def post_processor_after_initialization(self): - self.point = 0 - self.is_sliding= 0 - self.spo2_value = 0 - EventMesh.publish("show_history_spo2_data") - self.start_init() - - def restart_up(self,e): - - global spo2_value_label,heartrate_bpm_label,spo2_start_label,spo2_reset_btn_img - code = e.get_code() - - #print("code!!!!!!!!",code,msg) - if code == lv.EVENT.PRESSING: - #print("PRESSING") - self.is_sliding += 1 - - elif code == lv.EVENT.SHORT_CLICKED: - #utime.sleep_ms(10) - print("1self.is_sliding",self.is_sliding) - if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件 - self.is_sliding = 0 - self.point = 0 - self.timer.start(1*500, 1, self.start_measure) - if spo2_reset_btn_img != None: - spo2_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) - - - spo2_value_label.set_text("- -%") - spo2_start_label.set_text("正在测量中.") - EventMesh.publish("set_spo2_state",1)#2代表后台进入血氧测试 - EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN) - self.is_sliding =0 - - def start_init(self): - self.point = 0 - self.timer.start(1*500, 1, self.start_measure) - if spo2_reset_btn_img != None: - spo2_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) - - - spo2_value_label.set_text("- -%") - spo2_start_label.set_text("正在测量中.") - EventMesh.publish("set_spo2_state",1)#2代表后台进入血氧测试 - EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN) - - def show_history_spo2_data(self,event,msg): - global spo2_line1,spo2_line2,spo2_line3,spo2_line4,spo2_line5,spo2_line6,spo2_line7 - read_data = {} - read_data = EventMesh.publish("get_history_spo2_value") - # print("hr get_history_spo2_value",read_data) - if read_data != None: - if len(read_data) != 0: - sort_new = {} - sort_new = sorted(read_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五 - count = len(sort_new) - if count != 0: - for i in range(count): - print(int(sort_new[i]["spo2"])) - # print("hr history read_data",read_data) - value = int(sort_new[i]["spo2"]) - if value < 80: - value = 80 - if value >= 100: - value = 100 - if value <= 85: - value = value - 80 - line_value = int(value*6) - elif value <= 90: - value = value-85 - line_value = int((17/5)*value)+30 - elif value <= 95: - value = value-90 - line_value = int((21/5)*value)+47 - elif value <= 100: - value = value-95 - line_value = int((16/5)*value)+68 - - - 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: - spo2_line1.set_points(hr_line_points,2) - spo2_line1.set_pos(25,145-line_value) - spo2_line1.set_size(10,line_value) - if i == 1: - spo2_line2.set_points(hr_line_points,2) - spo2_line2.set_pos(53,145-line_value) - spo2_line2.set_size(10,line_value) - - if i == 2: - spo2_line3.set_points(hr_line_points,2) - spo2_line3.set_pos(80,145-line_value) - spo2_line3.set_size(10,line_value) - - if i == 3: - spo2_line4.set_points(hr_line_points,2) - spo2_line4.set_pos(109,145-line_value) - spo2_line4.set_size(10,line_value) - - if i == 4: - spo2_line5.set_points(hr_line_points,2) - spo2_line5.set_pos(136,145-line_value) - spo2_line5.set_size(10,line_value) - - if i == 5: - spo2_line6.set_points(hr_line_points,2) - spo2_line6.set_pos(164,145-line_value) - spo2_line6.set_size(10,line_value) - - if i == 6: - spo2_line7.set_points(hr_line_points,2) - spo2_line7.set_pos(192,145-line_value) - spo2_line7.set_size(10,line_value) - - def start_measure(self,*args): - EventMesh.publish("publish_message_event_ui",{"func":self.start_measure_do,"data":0}) - def start_measure_do(self,data): - global spo2_screen,spo2_label,spo2_start_label,spo2_value_label,spo2_done_img ,spo2_reset_btn_img - self.point = self.point + 1 - EventMesh.publish("system_sleep_rest")#防止黑屏 - WEAR = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据 - # if self.Hsensor == None: - # self.Hsensor = EventMesh.publish("get_Hsensor") - # c_data = self.Hsensor.get_test_data()#校准数据和工厂数据 - # print(" 佩戴状态\n红外:{}活体:{}佩戴:{}\n{},{} \n{},{} \n{},{}\n校准数据:{},{},{},{}\n漏光数据:{},{},{}" - # .format(c_data[3],c_data[4],WEAR,c_data[5],c_data[6],c_data[7],c_data[8],c_data[9],c_data[10], - # c_data[11],c_data[12],c_data[13],c_data[14],c_data[0],c_data[1],c_data[2],)) - # print("sop2:start_measure:point{}".format(self.point)) - self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN) - if self.point >= 2: - if self.spo2_value != 0: - spo2_value_label.set_text("{}%".format(self.spo2_value)) - else: - spo2_value_label.set_text("- -%") - - if self.point%4 == 0 : - spo2_start_label.set_text("正在测量中..") - spo2_done_img.set_src("E:/static/spo2_gif03.png") - - if self.point%4 == 1 : - spo2_start_label.set_text("正在测量中...") - spo2_done_img.set_src("E:/static/spo2_gif02.png") - - if self.point%4 == 2 : - spo2_start_label.set_text("正在测量中.") - spo2_done_img.set_src("E:/static/spo2_gif01.png") - - if self.point%4 == 3 : - spo2_start_label.set_text("正在测量中.") - spo2_done_img.set_src("E:/static/spo2_gif04.png") - - - - if self.point > 120 or (WEAR == 0 and self.point > 10): #测60s - self.timer.stop() - spo2_done_img.set_src("E:/static/spo2_gif04.png") - self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN) - if WEAR == 0: - self.spo2_value = 0 - spo2_start_label.set_text("佩戴异常,点击重测") - else : - spo2_start_label.set_text("测量结束,点击重测") - - if self.spo2_value >= 85: - EventMesh.publish("set_old_spo2_data",self.spo2_value) - EventMesh.publish("set_history_spo2_value",self.spo2_value) - EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,self.spo2_value) - spo2_reset_btn_img.clear_flag(lv.obj.FLAG.HIDDEN) - - - - if self.spo2_value != 0: - spo2_value_label.set_text("{}%".format(self.spo2_value)) - # heartrate_done_label.set_text("测量完成") - else: - spo2_value_label.set_text("- -%") - - - # self.show_history_data() - - self.point = 0 - EventMesh.publish("set_spo2_state",0)#0代表关闭测试 - print("stop debug9") - EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN) - - def Close(self): - self.timer.stop() - get_hr_state = EventMesh.publish("get_hr_state") - get_spo2_state = EventMesh.publish("get_spo2_state") - if get_hr_state == 1 or get_spo2_state == 1: - EventMesh.publish("set_spo2_state",0)#0代表关闭测试 - EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN) - - def done_return(self): - EventMesh.publish("load_screen", {"screen": "health"}) - - - - def btn1_release(self): - EventMesh.publish("load_screen", {"screen": "health"}) - - def done_left_to_right(self): - self.timer.stop() - get_hr_state = EventMesh.publish("get_hr_state") - get_spo2_state = EventMesh.publish("get_spo2_state") - if get_hr_state == 1 or get_spo2_state == 1: - EventMesh.publish("set_spo2_state",0)#0代表关闭测试 - EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN) - EventMesh.publish("return_prev_screen") - - def btn8_press(self): - EventMesh.publish("watch_top_show") - EventMesh.publish("load_screen", {"screen": "main_menu"}) - - - - - - # -------------------------------------------countdown screen---------------------------------------------------------- diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_health.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_health.py index 7865de37..7eb70e64 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_health.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_health.py @@ -7,7 +7,8 @@ from ui import style_screen,style_font_youyuan_20,style_btn,style_img,Screen,sty import constants import osTimer import audio -from machine import Pin +import urandom +from machine import RTC import ujson from lcd import style_font_youyuan_40,LCD_SIZE_H,LCD_SIZE_W HEALTH_ICON_W_SIZE = 220 @@ -132,6 +133,20 @@ health_cont_y+=HEALTH_ICON_OFFSET_SIZE +health_blood_bg_img = lv.img(healt_cont) +health_blood_bg_img.set_pos(5, health_cont_y) +health_blood_bg_img.set_size(HEALTH_BG_ICON_W_SIZE, HEALTH_BG_ICON_H_SIZE) +health_blood_bg_img.add_flag(lv.obj.FLAG.CLICKABLE) +health_blood_bg_img.set_src("E:/static/list_bg.png") +health_blood_bg_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT) + +health_blood_img = lv.img(healt_cont) +health_blood_img.set_pos(13, health_cont_y+6) +health_blood_img.set_size(HEALTH_ICON_W_SIZE, HEALTH_ICON_H_SIZE) +# health_blood_img.add_flag(lv.obj.FLAG.CLICKABLE) +health_blood_img.set_src("E:/static/health/health_blood.png") +health_blood_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT) +health_cont_y+=HEALTH_ICON_OFFSET_SIZE class HealthScreen(Screen):#健康测量 NAME = "health" @@ -146,6 +161,7 @@ class HealthScreen(Screen):#健康测量 # setting_themeswitch.add_event_cb(lambda e: self.load_screen(e, {"screen": "themeswitch"}), lv.EVENT.CLICKED, None) hhealth_spo2_bg_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.healt_cb(e, "spo2")), lv.EVENT.SHORT_CLICKED, None) health_temp_bg_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.healt_cb(e, "temperature")), lv.EVENT.SHORT_CLICKED, None) + health_blood_bg_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.healt_cb(e, "blood_pressure")), lv.EVENT.SHORT_CLICKED, None) # health_hr_bg_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.healt_cb(e, "heartrate")), lv.EVENT.PRESSING, None) # # setting_themeswitch.add_event_cb(lambda e: self.load_screen(e, {"screen": "themeswitch"}), lv.EVENT.CLICKED, None) @@ -166,25 +182,2115 @@ class HealthScreen(Screen):#健康测量 elif code == lv.EVENT.SHORT_CLICKED: EventMesh.publish("load_screen", {"screen": "{}".format(msg)}) - # code = e.get_code() - # if code == lv.EVENT.PRESSING: - # self.is_sliding += 1 - - # elif code == lv.EVENT.SHORT_CLICKED: - # print("1self.is_sliding",self.is_sliding) - # if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件 - # self.is_sliding = 0 - # EventMesh.publish("load_screen", {"screen": "{}".format(msg)}) + + def btn1_release(self): + EventMesh.publish("load_screen", {"screen": "main_menu"}) + + def btn8_press(self): + EventMesh.publish("watch_top_show") + EventMesh.publish("load_screen", {"screen": "main_menu"}) +################################################################## + + +temperature_screen = None +temperature_bg_img = None +temperature_body_label = None +temperature_degree_img = None +temperature_value_label = None +temperature_wrist_label = None +temperature_wrist_degree_img = None +temperature_wrist_value_label = None +temperature_measure_end_label = None +temperature_measure_countdown_label = None +temp_reset_btn_img = None +temp_line1 = None +temp_line2 = None +temp_line3 = None +temp_line4 = None +temp_line5 = None +temp_line6 = None +temp_line7 = None +temperature_label = None +temperature_line_bg_img = None +temperature_done_img = None +temperature_start_label=None +temperature_bpm_label = None +temperature_done_label = None +temperature_keep_label = None + +style_line_blue = lv.style_t() +style_line_blue.init() +style_line_blue.set_line_width(10) +style_line_blue.set_line_color(lv.color_make(35, 141, 255)) + +class TemperatureScreen(Screen): + NAME = "temperature" + + + def __init__(self): + super().__init__() + self.meta = None + self.timer = osTimer() + self.point = 0 + self.temp_value = 0 + self.is_sliding =0 + EventMesh.subscribe("show_history_temp_data",self.show_history_temp_data) + def initialization(self): + self.is_sliding =0 + global temperature_screen,temperature_keep_label,temperature_label,temp_reset_btn_img,temp_line1,temp_line2,temp_line3,temp_line4,temp_line5,\ + temp_line6,temp_line7,temperature_degree_img,temperature_line_bg_img,temperature_done_img ,temperature_start_label,temperature_bpm_label ,temperature_done_label + if temperature_screen == None: + temperature_screen = lv.obj() + print("temp_screen") + temperature_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT) + + temperature_label = lv.label(temperature_screen) + temperature_label.set_pos(0, 10) + temperature_label.set_size(LCD_SIZE_W, 40) + temperature_label.set_text("体温") + temperature_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0) + temperature_label.set_long_mode(lv.label.LONG.WRAP) + temperature_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) + + temperature_line_bg_img = lv.img(temperature_screen) + temperature_line_bg_img.set_pos(5, 45) + temperature_line_bg_img.set_size(230, 120) + temperature_line_bg_img.set_src("E:/static/temp_line_bg.png") + + + temperature_done_img = lv.img(temperature_screen) + temperature_done_img.set_pos(30, 218) + temperature_done_img.set_src("E:/static/temp_gif03.png") + + temp_reset_btn_img = lv.img(temperature_screen) + temp_reset_btn_img.set_pos(0, 177) + temp_reset_btn_img.set_src("E:/static/reset_hr_btn.png") + temp_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) + temp_reset_btn_img.add_flag(lv.obj.FLAG.CLICKABLE) + + temperature_start_label = lv.label(temperature_screen) + temperature_start_label.set_size(LCD_SIZE_W,40) + temperature_start_label.set_pos(0,185) + temperature_start_label.set_text("正在测量中.") + temperature_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0) + temperature_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) + temperature_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) + + # hr_line_points1 = [{"x":0,"y":0},{"x":0,"y":30}] + # hr_line_points2 = [{"x":0,"y":0},{"x":0,"y":47}] + # hr_line_points3 = [{"x":0,"y":0},{"x":0,"y":67}] + # hr_line_points4 = [{"x":0,"y":0},{"x":0,"y":85}] + # hr_line_points5 = [{"x":0,"y":0},{"x":0,"y":100}] + # hr_line_points6 = [{"x":0,"y":0},{"x":0,"y":100}] + # hr_line_points7 = [{"x":0,"y":0},{"x":0,"y":100}] + + temp_line1 = lv.line(temperature_screen) + temp_line1.set_points(hr_line_points,2) + temp_line1.set_pos(29,120) + temp_line1.set_size(10,0) + temp_line1.add_style(style_line_blue,0) + + temp_line2 = lv.line(temperature_screen) + temp_line2.set_points(hr_line_points,2) + temp_line2.set_pos(57,103) + temp_line2.set_size(10,0) + temp_line2.add_style(style_line_blue,0) + + temp_line3 = lv.line(temperature_screen) + temp_line3.set_points(hr_line_points,2) + temp_line3.set_pos(84,82) + temp_line3.set_size(10,0) + temp_line3.add_style(style_line_blue,0) + + temp_line4 = lv.line(temperature_screen) + temp_line4.set_points(hr_line_points,2) + temp_line4.set_pos(110,66) + temp_line4.set_size(10,0) + temp_line4.add_style(style_line_blue,0) + + temp_line5 = lv.line(temperature_screen) + temp_line5.set_points(hr_line_points,2) + temp_line5.set_pos(140,50) + temp_line5.set_size(10,0) + temp_line5.add_style(style_line_blue,0) + + temp_line6 = lv.line(temperature_screen) + temp_line6.set_points(hr_line_points,2) + temp_line6.set_pos(167,50) + temp_line6.set_size(10,0) + temp_line6.add_style(style_line_blue,0) + + temp_line7 = lv.line(temperature_screen) + temp_line7.set_points(hr_line_points,2) + temp_line7.set_pos(195,50) + temp_line7.set_size(10,0) + temp_line7.add_style(style_line_blue,0) + + temperature_bpm_label = lv.label(temperature_screen) + temperature_bpm_label.set_size(120, 40) + temperature_bpm_label.set_pos(100, 238) + temperature_bpm_label.set_text("- -") + temperature_bpm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) + temperature_bpm_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) + + temperature_keep_label = lv.label(temperature_screen) + temperature_keep_label.set_size(140, 30) + temperature_keep_label.set_pos(100, 254) + temperature_keep_label.set_text("未出值") + temperature_keep_label.add_flag(lv.obj.FLAG.HIDDEN) + temperature_keep_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) + temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) + + + temperature_degree_img = lv.img(temperature_screen) + temperature_degree_img.set_pos(156, 237) + temperature_degree_img.set_size(22, 22) + temperature_degree_img.set_src("U:/static/degree.png") + temperature_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT) + + + self.meta = temperature_screen + temp_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), + lv.EVENT.SHORT_CLICKED, None) + temp_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), + lv.EVENT.PRESSING, None) + size_x = len(str("- -"))*14 + temperature_degree_img.set_pos(100+size_x, 237) + temperature_bpm_label.set_text("- -") + temperature_start_label.set_text("正在测量中.") + + + def post_processor_after_initialization(self): + self.is_sliding =0 + self.start_init() + + def restart_up(self,e): + + global temperature_done_label,temperature_keep_label,temperature_bpm_label,temperature_start_label,temp_reset_btn_img,temperature_degree_img + code = e.get_code() + + if code == lv.EVENT.PRESSING: + #print("PRESSING") + self.is_sliding += 1 + + elif code == lv.EVENT.SHORT_CLICKED: + #utime.sleep_ms(10) + print("1self.is_sliding",self.is_sliding) + if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件 + self.is_sliding =0 + temperature_bpm_label.set_text("- -") + size_x = len(str("- -"))*14 + temperature_degree_img.set_pos(100+size_x, 237) + temperature_keep_label.set_text("未出值") + temp_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) + self.point = 0 + size_x = len(str("- -"))*14 + temperature_degree_img.set_pos(100+size_x, 237) + temperature_bpm_label.set_text("- -") + temperature_start_label.set_text("正在测量中.") + EventMesh.publish("set_temp_state",1) + EventMesh.publish(constants.EVENT.START_TEMP) + EventMesh.publish("show_history_temp_data") + self.timer.start(1*500, 1, self.start_measure) - # self.is_sliding = 0 + self.is_sliding =0 + + def start_init(self): + temperature_bpm_label.set_text("- -") + size_x = len(str("- -"))*14 + temperature_degree_img.set_pos(100+size_x, 237) + temperature_keep_label.set_text("未出值") + temp_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) + self.point = 0 + size_x = len(str("- -"))*14 + temperature_degree_img.set_pos(100+size_x, 237) + temperature_bpm_label.set_text("- -") + temperature_start_label.set_text("正在测量中.") + EventMesh.publish("set_temp_state",1) + EventMesh.publish(constants.EVENT.START_TEMP) + EventMesh.publish("show_history_temp_data") + self.timer.start(1*500, 1, self.start_measure) + + def show_history_temp_data(self,event,msg): + global temp_line1,temp_line2,temp_line3,temp_line4,temp_line5,temp_line6,temp_line7 + read_data = {} + read_data = EventMesh.publish("get_history_temp_value") + # print("hr get_history_temp_value",read_data) + if read_data != None: + if len(read_data) != 0: + sort_new = {} + sort_new = sorted(read_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五 + count = len(sort_new) + if count != 0: + for i in range(count): + # print(int(sort_new[i]["temp"])) + # print("hr history read_data",read_data) + value = int(sort_new[i]["temp"]) + value_temp = int(value) + if value <= 30: + line_value = int(value_temp) + elif value <= 34: + line_value = int((value_temp-30)*4.25)+30 + elif value <= 38: + line_value = int((value_temp-34)*5)+47 + elif value <= 42: + line_value = int((value_temp-38)*4)+67 + elif value < 46: + line_value = int((value_temp-42)*3.75)+85 + else: + value = 46 + line_value = 100 + + if line_value >= 100: + line_value = 100 + #print("hr hist",line_value) + temp_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}] + if i == 0: + temp_line1.set_points(temp_line_points,2) + temp_line1.set_pos(29,145-line_value) + temp_line1.set_size(10,line_value) + if value >= 37.3: + temp_line1.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) + else: + temp_line1.set_style_line_color(lv.color_make(35,141,255),0) + if i == 1: + temp_line2.set_points(temp_line_points,2) + temp_line2.set_pos(57,145-line_value) + temp_line2.set_size(10,line_value) + if value >= 37.3: + temp_line2.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) + else: + temp_line2.set_style_line_color(lv.color_make(35,141,255),0) + + if i == 2: + temp_line3.set_points(temp_line_points,2) + temp_line3.set_pos(84,145-line_value) + temp_line3.set_size(10,line_value) + if value >= 37.3: + temp_line3.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) + else: + temp_line3.set_style_line_color(lv.color_make(35,141,255),0) + if i == 3: + temp_line4.set_points(temp_line_points,2) + temp_line4.set_pos(112,145-line_value) + temp_line4.set_size(10,line_value) + if value >= 37.3: + temp_line4.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) + else: + temp_line4.set_style_line_color(lv.color_make(35,141,255),0) + if i == 4: + temp_line5.set_points(temp_line_points,2) + temp_line5.set_pos(140,145-line_value) + temp_line5.set_size(10,line_value) + if value >= 37.3: + temp_line5.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) + else: + temp_line5.set_style_line_color(lv.color_make(35,141,255),0) + + if i == 5: + temp_line6.set_points(temp_line_points,2) + temp_line6.set_pos(167,145-line_value) + temp_line6.set_size(10,line_value) + if value >= 37.3: + temp_line6.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) + else: + temp_line6.set_style_line_color(lv.color_make(35,141,255),0) + + if i == 6: + temp_line7.set_points(temp_line_points,2) + temp_line7.set_pos(195,145-line_value) + temp_line7.set_size(10,line_value) + if value >= 37.3: + temp_line7.set_style_line_color(lv.color_make(0xff,0x00,0x00),0) + else: + temp_line7.set_style_line_color(lv.color_make(35,141,255),0) + + def start_measure(self,*args): + EventMesh.publish("publish_message_event_ui",{"func":self.start_measure_do,"data":0}) + def start_measure_do(self,data): + global temperature_label,temperature_keep_label,temperature_done_img ,temp_reset_btn_img,temperature_start_label,temperature_bpm_label ,temperature_done_label + self.point = self.point + 1 + EventMesh.publish("system_sleep_rest")#防止黑屏 + WEAR = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据 + temp = EventMesh.publish(constants.EVENT.GET_TEMP) + temp += 0.5 + if temp < 25 or temp > 42: + temp = 0 + if str(temp).find(".") != -1: + tmp = str(temp).split('.')[0] + '.' + str(temp).split('.')[1][:1]#获取小数点后一位 舍去小数点最后一位 + else: + tmp = temp#获取小数点后一位 舍去小数点最后一位 + + # print("self.temp:{}".format(temp)) + if self.point >= 2: + if temp != 0: + size_x = len(str(tmp))*14 + temperature_degree_img.set_pos(100+size_x, 237) + temperature_bpm_label.set_text("{}".format(tmp)) + else: + size_x = len(str("- -"))*14 + temperature_degree_img.set_pos(100+size_x, 237) + temperature_bpm_label.set_text("- -") + + if self.point%4 == 0 : + temperature_start_label.set_text("正在测量中..") + temperature_done_img.set_src("E:/static/temp_gif02.png") + if self.point%4 == 1 : + temperature_start_label.set_text("正在测量中...") + temperature_done_img.set_src("E:/static/temp_gif01.png") + if self.point%4 == 2 : + temperature_start_label.set_text("正在测量中.") + temperature_done_img.set_src("E:/static/temp_gif02.png") + + if self.point%4 == 3 : + temperature_start_label.set_text("正在测量中.") + temperature_done_img.set_src("E:/static/temp_gif03.png") + + tmp_f_tmp = 0 + tmp_d_tmp = 0 + if str(temp).find(".") != -1: + tmp_f = str(temp).split('.')[0] + tmp_f_tmp = int(tmp_f) + + tmp_d = str(temp).split('.')[1][:1] + tmp_d_tmp = int(tmp_d) + else: + tmp_f_tmp = temp + + if self.point >= 2: + if temp >= 37.3: + temperature_keep_label.set_text("体温偏高") + temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0x00, 0x00), lv.STATE.DEFAULT) + elif temp == 0: + temperature_keep_label.set_text(" ") + temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) + else: + temperature_keep_label.set_text("体温正常") + temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) + + if self.point > 120 or (WEAR == 0 and self.point > 10): #测2min + self.timer.stop() + if WEAR == 0: + temp = 0 + temperature_start_label.set_text("佩戴异常,点击重测") + size_x = len(str("- -"))*14 + temperature_degree_img.set_pos(100+size_x, 237) + temperature_bpm_label.set_text("- -") + temperature_keep_label.set_text(" ") + temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) + else : + temperature_start_label.set_text("测量结束,点击重测") + if temp > 0: + EventMesh.publish("set_history_temp_value",temp) + EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp]) + num = str(tmp_f_tmp)+"."+ str(tmp_d_tmp) + EventMesh.publish(constants.PROTOCOL.BTEMP2_SEND,[1,num]) + if temp >= 37.3: + temperature_done_img.set_src("E:/static/temp_high.png") + else: + temperature_done_img.set_src("E:/static/temp_gif03.png") + temp_reset_btn_img.clear_flag(lv.obj.FLAG.HIDDEN) + self.point = 0 + EventMesh.publish("set_temp_state",0) + + EventMesh.publish(constants.EVENT.STOP_TEMP) + + + print("stop debug9") + + def Close(self): + self.timer.stop() + EventMesh.publish("set_temp_state",0) + EventMesh.publish(constants.EVENT.STOP_TEMP) + def done_return(self): + EventMesh.publish("load_screen", {"screen": "health"}) + def btn1_release(self): + EventMesh.publish("load_screen", {"screen": "health"}) + + def done_left_to_right(self): + self.timer.stop() + EventMesh.publish("set_temp_state",0) + EventMesh.publish(constants.EVENT.STOP_TEMP) + EventMesh.publish("return_prev_screen") + + def btn8_press(self): + EventMesh.publish("watch_top_show") EventMesh.publish("load_screen", {"screen": "main_menu"}) + + +line_points = [{"x":0,"y":0},{"x":LCD_SIZE_W,"y":0}] +spo2_screen = None +spo2_label_0 = None +spo2_done_img = None +spo2_label = None +spo2_label_1 = None +spo2_line = None +spo2_last_time = None +spo2_last_value = None +spo2_line1 = None +spo2_line2 = None +spo2_line3 = None +spo2_line4 = None +spo2_line5 = None +spo2_line6 = None +spo2_line7 = None +spo2_reset_btn_img = None +spo2_label = None +spo2_line_bg_img = None +spo2_done_img = None +spo2_done_label = None +spo2_value_label = None +spo2_start_label = 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)) + +spo2_line_points = [{"x":0,"y":0},{"x":0,"y":0}] + +class Spo2Screen(Screen): + NAME = "spo2" + + + def __init__(self): + super().__init__() + self.meta = None + self.timer = osTimer() + self.point = 0 + self.spo2_value = 0 + self.is_sliding = 0 + EventMesh.subscribe("show_history_spo2_data",self.show_history_spo2_data) + + #self.Hsensor = None + def initialization(self): + self.is_sliding = 0 + global spo2_screen,spo2_label,spo2_value_label,spo2_reset_btn_img,spo2_done_img,spo2_line_bg_img,spo2_line1,spo2_line2,\ + spo2_line3,spo2_line4,spo2_line5,spo2_line6,spo2_line7,spo2_line_bg_img ,spo2_start_label ,spo2_done_label + if spo2_screen == None: + spo2_screen = lv.obj() + print("spo2_screen") + spo2_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT) + + spo2_label = lv.label(spo2_screen) + spo2_label.set_pos(0, 10) + spo2_label.set_size(LCD_SIZE_W, 40) + spo2_label.set_text("血氧") + spo2_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0) + spo2_label.set_long_mode(lv.label.LONG.WRAP) + spo2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) + + spo2_line_bg_img = lv.img(spo2_screen) + spo2_line_bg_img.set_pos(5, 45) + spo2_line_bg_img.set_size(230, 120) + spo2_line_bg_img.set_src("E:/static/spo2_line_bg.png") + + + spo2_done_img = lv.img(spo2_screen) + spo2_done_img.set_pos(30, 220) + spo2_done_img.set_src("E:/static/spo2_gif04.png") + + spo2_reset_btn_img = lv.img(spo2_screen) + spo2_reset_btn_img.set_pos(0, 177) + spo2_reset_btn_img.set_src("E:/static/reset_hr_btn.png") + spo2_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) + spo2_reset_btn_img.add_flag(lv.obj.FLAG.CLICKABLE) + + spo2_start_label = lv.label(spo2_screen) + spo2_start_label.set_size(LCD_SIZE_W,40) + spo2_start_label.set_pos(0,185) + spo2_start_label.set_text("正在测量中.") + spo2_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0) + spo2_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) + spo2_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) + + + spo2_line1 = lv.line(spo2_screen) + spo2_line1.set_points(spo2_line_points,2) + spo2_line1.set_pos(25,45) + spo2_line1.set_size(10,0) + spo2_line1.add_style(style_line_red,0) + + spo2_line2 = lv.line(spo2_screen) + spo2_line2.set_points(spo2_line_points,2) + spo2_line2.set_pos(53,45) + spo2_line2.set_size(10,0) + spo2_line2.add_style(style_line_red,0) + + spo2_line3 = lv.line(spo2_screen) + spo2_line3.set_points(spo2_line_points,2) + spo2_line3.set_pos(80,45) + spo2_line3.set_size(10,0) + spo2_line3.add_style(style_line_red,0) + + spo2_line4 = lv.line(spo2_screen) + spo2_line4.set_points(spo2_line_points,2) + spo2_line4.set_pos(109,45) + spo2_line4.set_size(10,0) + spo2_line4.add_style(style_line_red,0) + + spo2_line5 = lv.line(spo2_screen) + spo2_line5.set_points(spo2_line_points,2) + spo2_line5.set_pos(136,45) + spo2_line5.set_size(10,0) + spo2_line5.add_style(style_line_red,0) + + spo2_line6 = lv.line(spo2_screen) + spo2_line6.set_points(spo2_line_points,2) + spo2_line6.set_pos(164,45) + spo2_line6.set_size(10,0) + spo2_line6.add_style(style_line_red,0) + + spo2_line7 = lv.line(spo2_screen) + spo2_line7.set_points(spo2_line_points,2) + spo2_line7.set_pos(192,45) + spo2_line7.set_size(10,0) + spo2_line7.add_style(style_line_red,0) + + spo2_value_label = lv.label(spo2_screen) + spo2_value_label.set_size(110, 34) + spo2_value_label.set_pos(110, 240) + spo2_value_label.set_text("- -%") + spo2_value_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) + spo2_value_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) + + + self.meta = spo2_screen + spo2_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), + lv.EVENT.SHORT_CLICKED, None) + spo2_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), + lv.EVENT.PRESSING, None) + + def post_processor_after_initialization(self): + self.point = 0 + self.is_sliding= 0 + self.spo2_value = 0 + EventMesh.publish("show_history_spo2_data") + self.start_init() + + def restart_up(self,e): + + global spo2_value_label,heartrate_bpm_label,spo2_start_label,spo2_reset_btn_img + code = e.get_code() + + #print("code!!!!!!!!",code,msg) + if code == lv.EVENT.PRESSING: + #print("PRESSING") + self.is_sliding += 1 + + elif code == lv.EVENT.SHORT_CLICKED: + #utime.sleep_ms(10) + print("1self.is_sliding",self.is_sliding) + if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件 + self.is_sliding = 0 + self.point = 0 + self.timer.start(1*500, 1, self.start_measure) + if spo2_reset_btn_img != None: + spo2_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) + + + spo2_value_label.set_text("- -%") + spo2_start_label.set_text("正在测量中.") + EventMesh.publish("set_spo2_state",1)#2代表后台进入血氧测试 + EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN) + self.is_sliding =0 + + def start_init(self): + self.point = 0 + self.timer.start(1*500, 1, self.start_measure) + if spo2_reset_btn_img != None: + spo2_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) + + + spo2_value_label.set_text("- -%") + spo2_start_label.set_text("正在测量中.") + EventMesh.publish("set_spo2_state",1)#2代表后台进入血氧测试 + EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN) + + def show_history_spo2_data(self,event,msg): + global spo2_line1,spo2_line2,spo2_line3,spo2_line4,spo2_line5,spo2_line6,spo2_line7 + read_data = {} + read_data = EventMesh.publish("get_history_spo2_value") + # print("hr get_history_spo2_value",read_data) + if read_data != None: + if len(read_data) != 0: + sort_new = {} + sort_new = sorted(read_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五 + count = len(sort_new) + if count != 0: + for i in range(count): + print(int(sort_new[i]["spo2"])) + # print("hr history read_data",read_data) + value = int(sort_new[i]["spo2"]) + if value < 80: + value = 80 + if value >= 100: + value = 100 + if value <= 85: + value = value - 80 + line_value = int(value*6) + elif value <= 90: + value = value-85 + line_value = int((17/5)*value)+30 + elif value <= 95: + value = value-90 + line_value = int((21/5)*value)+47 + elif value <= 100: + value = value-95 + line_value = int((16/5)*value)+68 + + + 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: + spo2_line1.set_points(hr_line_points,2) + spo2_line1.set_pos(25,145-line_value) + spo2_line1.set_size(10,line_value) + if i == 1: + spo2_line2.set_points(hr_line_points,2) + spo2_line2.set_pos(53,145-line_value) + spo2_line2.set_size(10,line_value) + + if i == 2: + spo2_line3.set_points(hr_line_points,2) + spo2_line3.set_pos(80,145-line_value) + spo2_line3.set_size(10,line_value) + + if i == 3: + spo2_line4.set_points(hr_line_points,2) + spo2_line4.set_pos(109,145-line_value) + spo2_line4.set_size(10,line_value) + + if i == 4: + spo2_line5.set_points(hr_line_points,2) + spo2_line5.set_pos(136,145-line_value) + spo2_line5.set_size(10,line_value) + + if i == 5: + spo2_line6.set_points(hr_line_points,2) + spo2_line6.set_pos(164,145-line_value) + spo2_line6.set_size(10,line_value) + + if i == 6: + spo2_line7.set_points(hr_line_points,2) + spo2_line7.set_pos(192,145-line_value) + spo2_line7.set_size(10,line_value) + + def start_measure(self,*args): + EventMesh.publish("publish_message_event_ui",{"func":self.start_measure_do,"data":0}) + def start_measure_do(self,data): + global spo2_screen,spo2_label,spo2_start_label,spo2_value_label,spo2_done_img ,spo2_reset_btn_img + self.point = self.point + 1 + EventMesh.publish("system_sleep_rest")#防止黑屏 + WEAR = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据 + # if self.Hsensor == None: + # self.Hsensor = EventMesh.publish("get_Hsensor") + # c_data = self.Hsensor.get_test_data()#校准数据和工厂数据 + # print(" 佩戴状态\n红外:{}活体:{}佩戴:{}\n{},{} \n{},{} \n{},{}\n校准数据:{},{},{},{}\n漏光数据:{},{},{}" + # .format(c_data[3],c_data[4],WEAR,c_data[5],c_data[6],c_data[7],c_data[8],c_data[9],c_data[10], + # c_data[11],c_data[12],c_data[13],c_data[14],c_data[0],c_data[1],c_data[2],)) + # print("sop2:start_measure:point{}".format(self.point)) + self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN) + if self.point >= 2: + if self.spo2_value != 0: + spo2_value_label.set_text("{}%".format(self.spo2_value)) + else: + spo2_value_label.set_text("- -%") + + if self.point%4 == 0 : + spo2_start_label.set_text("正在测量中..") + spo2_done_img.set_src("E:/static/spo2_gif03.png") + + if self.point%4 == 1 : + spo2_start_label.set_text("正在测量中...") + spo2_done_img.set_src("E:/static/spo2_gif02.png") + + if self.point%4 == 2 : + spo2_start_label.set_text("正在测量中.") + spo2_done_img.set_src("E:/static/spo2_gif01.png") + + if self.point%4 == 3 : + spo2_start_label.set_text("正在测量中.") + spo2_done_img.set_src("E:/static/spo2_gif04.png") + + + + if self.point > 120 or (WEAR == 0 and self.point > 10): #测60s + self.timer.stop() + spo2_done_img.set_src("E:/static/spo2_gif04.png") + self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN) + if WEAR == 0: + self.spo2_value = 0 + spo2_start_label.set_text("佩戴异常,点击重测") + else : + spo2_start_label.set_text("测量结束,点击重测") + + if self.spo2_value >= 85: + EventMesh.publish("set_old_spo2_data",self.spo2_value) + EventMesh.publish("set_history_spo2_value",self.spo2_value) + EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,self.spo2_value) + spo2_reset_btn_img.clear_flag(lv.obj.FLAG.HIDDEN) + + + + if self.spo2_value != 0: + spo2_value_label.set_text("{}%".format(self.spo2_value)) + # heartrate_done_label.set_text("测量完成") + else: + spo2_value_label.set_text("- -%") + + + # self.show_history_data() + + self.point = 0 + EventMesh.publish("set_spo2_state",0)#0代表关闭测试 + print("stop debug9") + EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN) + + def Close(self): + self.timer.stop() + get_hr_state = EventMesh.publish("get_hr_state") + get_spo2_state = EventMesh.publish("get_spo2_state") + if get_hr_state == 1 or get_spo2_state == 1: + EventMesh.publish("set_spo2_state",0)#0代表关闭测试 + EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN) + + def done_return(self): + EventMesh.publish("load_screen", {"screen": "health"}) + + + + def btn1_release(self): + EventMesh.publish("load_screen", {"screen": "health"}) + + def done_left_to_right(self): + self.timer.stop() + get_hr_state = EventMesh.publish("get_hr_state") + get_spo2_state = EventMesh.publish("get_spo2_state") + if get_hr_state == 1 or get_spo2_state == 1: + EventMesh.publish("set_spo2_state",0)#0代表关闭测试 + EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN) + EventMesh.publish("return_prev_screen") + def btn8_press(self): EventMesh.publish("watch_top_show") EventMesh.publish("load_screen", {"screen": "main_menu"}) -################################################################## -# -------------------------------------------language screen---------------------------------------------------------- + + +# -------------------------------------------heartrate screen---------------------------------------------------------- +heartrate_screen = None +heartrate_label = None +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)) + +style_line_blood_h = lv.style_t() +style_line_blood_h.init() +style_line_blood_h.set_line_width(5) +style_line_blood_h.set_line_color(lv.color_make(247, 190, 30)) + +style_line_blood_l = lv.style_t() +style_line_blood_l.init() +style_line_blood_l.set_line_width(5) +style_line_blood_l.set_line_color(lv.color_make(240, 87, 13)) + +hr_line_points = [{"x":0,"y":0},{"x":0,"y":0}] + +class HeartrateScreen(Screen): + NAME = "heartrate" + + + def __init__(self): + super().__init__() + self.meta = None + self.timer = osTimer() + self.point = 0 + self.heart_value = 0 + self.is_sliding = 0 + EventMesh.subscribe("show_history_hr_data",self.show_history_hr_data) + + def initialization(self): + self.is_sliding =0 + 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_size(LCD_SIZE_W, 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.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, 45) + 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(20, 229) + 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, 172) + 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(LCD_SIZE_W,40) + heartrate_start_label.set_pos(0,182) + heartrate_start_label.set_text("正在测量中.") + 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,45) + 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,45) + 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,45) + 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,45) + 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,45) + 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,45) + 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,45) + 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(120, 34) + heartrate_bpm_label.set_pos(120, 250) + heartrate_bpm_label.set_text("-- bpm") + 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) + + heartrate_done_label = lv.label(heartrate_screen) + heartrate_done_label.set_size(LCD_SIZE_W, 34) + heartrate_done_label.set_pos(0, 250) + heartrate_done_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) + 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) + + self.meta = heartrate_screen + heartrate_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), + lv.EVENT.SHORT_CLICKED, None) + heartrate_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), + lv.EVENT.PRESSING, None) + + 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 post_processor_after_initialization(self): + self.point = 0 + self.is_sliding = 0 + self.heart_value = 0 + EventMesh.publish("show_history_hr_data") + # self.show_history_data() + self.start_init() + + def restart_up(self,e): + global heartrate_done_label,heartrate_bpm_label,heartrate_start_label,heartrate_reset_btn_img + + code = e.get_code() + if code == lv.EVENT.PRESSING: + #print("PRESSING") + self.is_sliding += 1 + + elif code == lv.EVENT.SHORT_CLICKED: + #utime.sleep_ms(10) + print("1self.is_sliding",self.is_sliding) + if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件 + self.is_sliding =0 + self.point = 0 + 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.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) + + self.is_sliding =0 + def start_init(self): + self.point = 0 + 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.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_hr_data(self,event,msg): + 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") + if read_data != None: + if len(read_data) != 0: + sort_new = {} + sort_new = sorted(read_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条 + # print("hr history sort_new",sort_new) + if sort_new != []: + for i in range(len(sort_new)): + print(int(sort_new[i]["hr"])) + # print("hr history read_data",read_data) + value = int(sort_new[i]["hr"]) + line_value = value - 30 #180-80 = 100 160-100 = 60 + + if value <= 60:#18 36.6 -18 = 18 + line_value = int((value-30)*0.6)# + elif value <= 90: + line_value = int((value-60)*0.6)+18#127+15+1 + elif value < 120: + line_value = int((value-90)*0.55)+18+18 + elif value == 120: + line_value = int((value-90)*0.6)+18+18 + elif value < 150: + line_value = int((value-120)*0.55)+18+18+18 + elif value == 150: + line_value = int((value-120)*0.6)+18+18+18 + elif value < 180: + line_value = int((value-150)*0.56)+18+18+18+18 + elif value == 180: + line_value = int((value-150)*0.6)+18+18+18+18 + #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,145-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,145-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,145-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,145-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,145-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,145-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,145-line_value) + hr_line7.set_size(10,line_value) + def start_measure(self,*args): + EventMesh.publish("publish_message_event_ui",{"func":self.start_measure_do,"data":0}) + def start_measure_do(self,data): + 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) + WEAR = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据 + #print("heart WEAR:{}".format(WEAR)) + # 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 > 120 or (WEAR == 0 and self.point > 10): #测60s或没佩戴 + self.timer.stop() + heartrate_done_img.set_src("E:/static/hr_gif_03.png") + + self.heart_value = EventMesh.publish(constants.EVENT.GET_HEART) + if WEAR == 0: + self.heart_value = 0 + heartrate_start_label.set_text("佩戴异常,点击重测") + else : + heartrate_start_label.set_text("测量结束,点击重测") + + 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) + + + if self.heart_value != 0: + heartrate_bpm_label.set_text("{} bpm".format(self.heart_value)) + # heartrate_done_label.set_text("测量完成") + else: + heartrate_bpm_label.set_text("-- bpm") + + self.point = 0 + EventMesh.publish("set_hr_state",0)#0代表关闭测试 + print("stop debug9") + EventMesh.publish(constants.EVENT.STOP_HEART) + + def Close(self): + self.timer.stop() + get_hr_state = EventMesh.publish("get_hr_state") + get_spo2_state = EventMesh.publish("get_spo2_state") + if get_hr_state == 1 or get_spo2_state == 1: + EventMesh.publish("set_hr_state",0)#0代表关闭测试 + print("stop debug10") + EventMesh.publish(constants.EVENT.STOP_HEART) + + def done_return(self): + EventMesh.publish("load_screen", {"screen": "health"}) + + + + def btn1_release(self): + EventMesh.publish("load_screen", {"screen": "health"}) + + def done_left_to_right(self): + self.timer.stop() + get_hr_state = EventMesh.publish("get_hr_state") + get_spo2_state = EventMesh.publish("get_spo2_state") + if get_hr_state == 1 or get_spo2_state == 1: + EventMesh.publish("set_hr_state",0)#0代表关闭测试 + print("stop debug10") + EventMesh.publish(constants.EVENT.STOP_HEART) + EventMesh.publish("return_prev_screen") + + def btn8_press(self): + EventMesh.publish("watch_top_show") + EventMesh.publish("load_screen", {"screen": "main_menu"}) + + + + +# -------------------------------------------blood pressure screen---------------------------------------------------------- +# 6-10高 昼高夜低 10 -14 平衡 14-18 高 18 -2低谷 2-6有回升 10%-20 +# 120-150 75-100 110-130 60-80 115-140 75-90 100-135 60-90 105-135 65-85 import urandom +# >>> random_num = urandom.randint(0,30) 0-10 0-30 0-30 +# >>> print(random_num) 0-10 0-20 0-25 0-10 -25 +# 59 +# >>> +blood_pressure_screen = None +blood_pressure_label = None +blood_pressure_done_img = None +blood_pressure_start_label = None +blood_pressure_bpm_label = None +blood_pressure_done_label = None +blood_pressure_line_bg_img = None +blood_pressure_line1_h = None +blood_pressure_line1_l = None +blood_pressure_line2_h = None +blood_pressure_line2_l = None +blood_pressure_line3_h = None +blood_pressure_line3_l = None +blood_pressure_line4_h = None +blood_pressure_line4_l = None +blood_pressure_line5_h = None +blood_pressure_line5_l = None +blood_pressure_line6_h = None +blood_pressure_line6_l = None +blood_pressure_line7_h = None +blood_pressure_line7_l = None +blood_pressure_reset_btn_img = None + +blood_pressure_line_points = [{"x":0,"y":0},{"x":0,"y":0}] + + +blood_hline_points = [{"x":0,"y":0},{"x":0,"y":0}] +blood_lline_points = [{"x":0,"y":0},{"x":0,"y":0}] +class bloodpressureScreen(Screen): + NAME = "blood_pressure" + + + def __init__(self): + super().__init__() + self.meta = None + self.timer = osTimer() + self.point = 0 + self.heart_value = 0 + self.count_blood = 0 + self.max_value = 0 + self.min_value = 0 + self.is_sliding = 0 + self.blood_Maxvalue = 0 + self.blood_Minvalue = 0 + EventMesh.subscribe("show_history_blood_data",self.show_history_blood_data) + EventMesh.subscribe("get_blood_value",self.get_blood_value) + + def initialization(self): + self.is_sliding =0 + global blood_pressure_screen,blood_pressure_label,blood_pressure_reset_btn_img,blood_pressure_line1_h,blood_pressure_line1_l,\ + blood_pressure_line2_h,blood_pressure_line2_l,blood_pressure_line3_h,blood_pressure_line3_l,blood_pressure_line4_h,blood_pressure_line4_l,\ + blood_pressure_line5_h,blood_pressure_line5_l,blood_pressure_line6_h,blood_pressure_line6_l,blood_pressure_line7_h,blood_pressure_line7_l,\ + blood_pressure_line_bg_img,blood_pressure_done_img ,blood_pressure_start_label,blood_pressure_bpm_label ,blood_pressure_done_label + if blood_pressure_screen == None: + blood_pressure_screen = lv.obj() + print("blood_pressure_screen") + blood_pressure_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT) + + blood_pressure_label = lv.label(blood_pressure_screen) + blood_pressure_label.set_pos(0, 10) + blood_pressure_label.set_size(LCD_SIZE_W, 40) + blood_pressure_label.set_text("心率") + blood_pressure_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0) + blood_pressure_label.set_long_mode(lv.label.LONG.WRAP) + blood_pressure_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) + + blood_pressure_line_bg_img = lv.img(blood_pressure_screen) + blood_pressure_line_bg_img.set_pos(5, 45) + blood_pressure_line_bg_img.set_size(230, 120) + blood_pressure_line_bg_img.set_src("E:/static/hr_line_bg.png") + + + blood_pressure_done_img = lv.img(blood_pressure_screen) + blood_pressure_done_img.set_pos(20, 224) + blood_pressure_done_img.set_src("E:/static/blood_gif03.png") + + blood_pressure_reset_btn_img = lv.img(blood_pressure_screen) + blood_pressure_reset_btn_img.set_pos(0, 172) + blood_pressure_reset_btn_img.set_src("E:/static/reset_hr_btn.png") + blood_pressure_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) + blood_pressure_reset_btn_img.add_flag(lv.obj.FLAG.CLICKABLE) + + blood_pressure_start_label = lv.label(blood_pressure_screen) + blood_pressure_start_label.set_size(LCD_SIZE_W,40) + blood_pressure_start_label.set_pos(0,182) + blood_pressure_start_label.set_text("正在测量中.") + blood_pressure_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER,0) + blood_pressure_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) + blood_pressure_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) + + + + # lineh_value = max - 30 #180-80 = 100 160-100 = 60 + # lineh_value = int(lineh_value*0.58)+1 + # if lineh_value >= 100: + # lineh_value = 100 + + # linel_value = min - 30 #180-80 = 100 160-100 = 60 + # linel_value = int(linel_value*0.58)+1 + # if linel_value >= 100: + # linel_value = 100 + #print("hr hist",line_value) + blood_hline_points = [{"x":0,"y":0},{"x":0,"y":0}] + blood_lline_points = [{"x":0,"y":0},{"x":0,"y":0}] + + blood_pressure_line1_h = lv.line(blood_pressure_screen) + blood_pressure_line1_h.set_points(blood_hline_points,2) + blood_pressure_line1_h.set_pos(20,45) + blood_pressure_line1_h.set_size(0,0) + blood_pressure_line1_h.add_style(style_line_blood_h,0) + + blood_pressure_line1_l = lv.line(blood_pressure_screen) + blood_pressure_line1_l.set_points(blood_lline_points,2) + blood_pressure_line1_l.set_pos(28,45) + blood_pressure_line1_l.set_size(0,0) + blood_pressure_line1_l.add_style(style_line_blood_l,0) + + blood_pressure_line2_h = lv.line(blood_pressure_screen) + blood_pressure_line2_h.set_points(blood_hline_points,2) + blood_pressure_line2_h.set_pos(48,45) + blood_pressure_line2_h.set_size(0,0) + blood_pressure_line2_h.add_style(style_line_blood_h,0) + + blood_pressure_line2_l = lv.line(blood_pressure_screen) + blood_pressure_line2_l.set_points(blood_lline_points,2) + blood_pressure_line2_l.set_pos(56,45) + blood_pressure_line2_l.set_size(0,0) + blood_pressure_line2_l.add_style(style_line_blood_l,0) + + blood_pressure_line3_h = lv.line(blood_pressure_screen) + blood_pressure_line3_h.set_points(blood_hline_points,2) + blood_pressure_line3_h.set_pos(75,45) + blood_pressure_line3_h.set_size(0,0) + blood_pressure_line3_h.add_style(style_line_blood_h,0) + + blood_pressure_line3_l = lv.line(blood_pressure_screen) + blood_pressure_line3_l.set_points(blood_lline_points,2) + blood_pressure_line3_l.set_pos(83,45) + blood_pressure_line3_l.set_size(0,0) + blood_pressure_line3_l.add_style(style_line_blood_l,0) + + + blood_pressure_line4_h = lv.line(blood_pressure_screen) + blood_pressure_line4_h.set_points(blood_hline_points,2) + blood_pressure_line4_h.set_pos(104,45) + blood_pressure_line4_h.set_size(0,0) + blood_pressure_line4_h.add_style(style_line_blood_h,0) + + blood_pressure_line4_l = lv.line(blood_pressure_screen) + blood_pressure_line4_l.set_points(blood_lline_points,2) + blood_pressure_line4_l.set_pos(112,45) + blood_pressure_line4_l.set_size(0,0) + blood_pressure_line4_l.add_style(style_line_blood_l,0) + + blood_pressure_line5_h = lv.line(blood_pressure_screen) + blood_pressure_line5_h.set_points(blood_hline_points,2) + blood_pressure_line5_h.set_pos(131,45) + blood_pressure_line5_h.set_size(0,0) + blood_pressure_line5_h.add_style(style_line_blood_h,0) + + blood_pressure_line5_l = lv.line(blood_pressure_screen) + blood_pressure_line5_l.set_points(blood_lline_points,2) + blood_pressure_line5_l.set_pos(139,45) + blood_pressure_line5_l.set_size(0,0) + blood_pressure_line5_l.add_style(style_line_blood_l,0) + + blood_pressure_line6_h = lv.line(blood_pressure_screen) + blood_pressure_line6_h.set_points(blood_hline_points,2) + blood_pressure_line6_h.set_pos(159,45) + blood_pressure_line6_h.set_size(0,0) + blood_pressure_line6_h.add_style(style_line_blood_h,0) + + blood_pressure_line6_l = lv.line(blood_pressure_screen) + blood_pressure_line6_l.set_points(blood_lline_points,2) + blood_pressure_line6_l.set_pos(167,45) + blood_pressure_line6_l.set_size(0,0) + blood_pressure_line6_l.add_style(style_line_blood_l,0) + + blood_pressure_line7_h = lv.line(blood_pressure_screen) + blood_pressure_line7_h.set_points(blood_hline_points,2) + blood_pressure_line7_h.set_pos(187,45) + blood_pressure_line7_h.set_size(0,0) + blood_pressure_line7_h.add_style(style_line_blood_h,0) + + blood_pressure_line7_l = lv.line(blood_pressure_screen) + blood_pressure_line7_l.set_points(blood_lline_points,2) + blood_pressure_line7_l.set_pos(195,45) + blood_pressure_line7_l.set_size(0,0) + blood_pressure_line7_l.add_style(style_line_blood_l,0) + + + blood_pressure_bpm_label = lv.label(blood_pressure_screen) + blood_pressure_bpm_label.set_size(120, 34) + blood_pressure_bpm_label.set_pos(120, 250) + blood_pressure_bpm_label.set_text("--/--") + blood_pressure_bpm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) + blood_pressure_bpm_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) + + blood_pressure_done_label = lv.label(blood_pressure_screen) + blood_pressure_done_label.set_size(LCD_SIZE_W, 34) + blood_pressure_done_label.set_pos(0, 250) + blood_pressure_done_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) + blood_pressure_done_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT) + blood_pressure_done_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT) + + self.meta = blood_pressure_screen + blood_pressure_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), + lv.EVENT.SHORT_CLICKED, None) + blood_pressure_reset_btn_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.restart_up(e)), + lv.EVENT.PRESSING, None) + + blood_pressure_done_label.set_text(" ") + blood_pressure_bpm_label.set_text("--/--") + blood_pressure_start_label.set_text("正在测量中.") + self.count_blood = 0 + self.max_value = 0 + self.min_value = 0 + self.blood_Maxvalue = 0 + self.blood_Minvalue = 0 + + def post_processor_after_initialization(self): + self.point = 0 + self.is_sliding = 0 + self.heart_value = 0 + self.count_blood = 0 + EventMesh.publish("show_history_blood_data") + # self.show_history_data() + self.blood_Maxvalue = 0 + self.blood_Minvalue = 0 + self.start_init() + # 6-10高 昼高夜低 10 -14 平衡 14-18 高 18 -2低谷 2-6有回升 10%-20 + # 120-150 75-95 110-130 60-85 115-140 70-90 100-130 60-80 105-135 65-85 import urandom + # >>> random_num = urandom.randint(0,30) 0-10 0-30 0-30 + # >>> print(random_num) 0-10 0-20 0-25 0-10 -25 + def get_blood_value(self,event,msg): + self.count_blood+=1 + data = RTC().datetime() + hour = int(data[4]) + # print("today timehour",type(hour),self.count_blood) + + if self.count_blood >= 10: + if hour >= 6 and hour <= 10: + if self.count_blood <= 15: + random_numMax = urandom.randint(0, 10) + random_numMin = urandom.randint(0, 6) + blood_Maxold = 120+random_numMax + blood_Minold = 75+random_numMin + print("get_blood_value 6 -10",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 120: + self.blood_Maxvalue = 120 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 75: + self.blood_Minvalue = 75 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + + + elif self.count_blood <= 25: + + random_numMax = urandom.randint(0, 20) + random_numMin = urandom.randint(0, 12) + blood_Maxold = 120+random_numMax + blood_Minold = 75+random_numMin + print("get_blood_value 6 -10",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 120: + self.blood_Maxvalue = 120 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 75: + self.blood_Minvalue = 75 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + else: + random_numMax = urandom.randint(0, 30) + random_numMin = urandom.randint(0, 20) + blood_Maxold = 120+random_numMax + blood_Minold = 75+random_numMin + print("get_blood_value 6 -10",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 120: + self.blood_Maxvalue = 120 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 75: + self.blood_Minvalue = 75 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + print("get_blood_value 6 -10",self.blood_Maxvalue,self.blood_Minvalue) + # return [self.blood_Maxvalue,self.blood_Minvalue] + elif hour > 10 and hour <= 14:#10-14(10,14] + if self.count_blood <= 15: + random_numMax = urandom.randint(0, 6) + random_numMin = urandom.randint(0, 8) + blood_Maxold = 115+random_numMax + blood_Minold = 60+random_numMin + print("get_blood_value 10 -14",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 110: + self.blood_Maxvalue = 110 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 60: + self.blood_Minvalue = 60 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + elif self.count_blood <= 25: + random_numMax = urandom.randint(0, 12) + random_numMin = urandom.randint(0, 18) + blood_Maxold = 115+random_numMax + blood_Minold = 60+random_numMin + print("get_blood_value 10 -14",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 110: + self.blood_Maxvalue = 110 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 60: + self.blood_Minvalue = 60 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + else: + random_numMax = urandom.randint(0, 20) + random_numMin = urandom.randint(0, 25) + blood_Maxold = 115+random_numMax + blood_Minold = 60+random_numMin + print("get_blood_value 10 -14",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 110: + self.blood_Maxvalue = 110 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 60: + self.blood_Minvalue = 60 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + print("get_blood_value 10 -14",self.blood_Maxvalue,self.blood_Minvalue) + # return [self.blood_Maxvalue,self.blood_Minvalue] + elif hour > 14 and hour <= 18:#14-18 + if self.count_blood <= 15: + random_numMax = urandom.randint(0, 8) + random_numMin = urandom.randint(0, 5) + blood_Maxold = 115+random_numMax + blood_Minold = 70+random_numMin + print("get_blood_value 14 -18",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 115: + self.blood_Maxvalue = 115 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 70: + self.blood_Minvalue = 70 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + elif self.count_blood <= 25: + random_numMax = urandom.randint(0, 16) + random_numMin = urandom.randint(0, 10) + blood_Maxold = 115+random_numMax + blood_Minold = 70+random_numMin + print("get_blood_value 14 -18",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 115: + self.blood_Maxvalue = 115 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 70: + self.blood_Minvalue = 70 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + + else: + random_numMax = urandom.randint(0, 25) + random_numMin = urandom.randint(0, 15) + blood_Maxold = 115+random_numMax + blood_Minold = 70+random_numMin + print("get_blood_value 14 -18",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 115: + self.blood_Maxvalue = 115 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 70: + self.blood_Minvalue = 70 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + + print("get_blood_value 14 -18",self.blood_Maxvalue,self.blood_Minvalue) + # return [self.blood_Maxvalue,self.blood_Minvalue] + elif hour > 2 and hour < 6:#2-6 + if self.count_blood <= 15: + + random_numMax = urandom.randint(0, 10) + random_numMin = urandom.randint(0, 6) + blood_Maxold = 105+random_numMax + blood_Minold = 65+random_numMin + print("get_blood_value 2 -6",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 105: + self.blood_Maxvalue = 105 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 65: + self.blood_Minvalue = 65 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + elif self.count_blood <= 25: + random_numMax = urandom.randint(0, 20) + random_numMin = urandom.randint(0, 12) + blood_Maxold = 105+random_numMax + blood_Minold = 65+random_numMin + print("get_blood_value 2 -6",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 105: + self.blood_Maxvalue = 105 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 65: + self.blood_Minvalue = 65 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + else: + random_numMax = urandom.randint(0, 30) + random_numMin = urandom.randint(0, 20) + blood_Maxold = 105+random_numMax + blood_Minold = 65+random_numMin + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 105: + self.blood_Maxvalue = 105 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 65: + self.blood_Minvalue = 65 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + + print("get_blood_value 2 -6",self.blood_Maxvalue,self.blood_Minvalue) + # return [self.blood_Maxvalue,self.blood_Minvalue] + else:#18-2 19 20 21 22 23 1 2 + if self.count_blood <= 15: + + random_numMax = urandom.randint(0, 10) + random_numMin = urandom.randint(0, 6) + blood_Maxold = 100+random_numMax + blood_Minold = 60+random_numMin + print("get_blood_value 18 -2",self.blood_Maxvalue,blood_Maxold)#90 11 135-100=135+ 100-20=80+30 = 115+5=120 120-102=18 102-5+15 = 112 + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 100: + self.blood_Maxvalue = 100 + else: + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 60: + self.blood_Minvalue = 60 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + elif self.count_blood <= 25: + + random_numMax = urandom.randint(0, 20) + random_numMin = urandom.randint(0, 12) + blood_Maxold = 100+random_numMax + blood_Minold = 60+random_numMin + print("get_blood_value 18 -2",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 100: + self.blood_Maxvalue = 100 + else:# 113 120 + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 60: + self.blood_Minvalue = 60 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + + else: + random_numMax = urandom.randint(0, 30) + random_numMin = urandom.randint(0, 20) + blood_Maxold = 100+random_numMax + blood_Minold = 60+random_numMin + print("get_blood_value 18 -2",self.blood_Maxvalue,blood_Maxold) + if self.blood_Maxvalue != 0: + if self.blood_Maxvalue > blood_Maxold:#130 100 110-5 =105 110- + self.blood_Maxvalue = self.blood_Maxvalue-random_numMax + if self.blood_Maxvalue <= 100: + self.blood_Maxvalue = 100 + else:#125 100 + self.blood_Maxvalue=blood_Maxold + else: + self.blood_Maxvalue=blood_Maxold + + if self.blood_Minvalue != 0: + if self.blood_Minvalue > blood_Minold:#130 100 110-5 =105 110- + self.blood_Minvalue = self.blood_Minvalue-random_numMin + if self.blood_Minvalue <= 60: + self.blood_Minvalue = 60 + else: + self.blood_Minvalue=blood_Minold + else: + self.blood_Minvalue=blood_Minold + print("get_blood_value 18 -2",self.blood_Maxvalue,self.blood_Minvalue) + return [self.blood_Maxvalue,self.blood_Minvalue] + + def restart_up(self,e): + global blood_pressure_done_label,blood_pressure_bpm_label,blood_pressure_start_label,blood_pressure_reset_btn_img + + code = e.get_code() + if code == lv.EVENT.PRESSING: + #print("PRESSING") + self.is_sliding += 1 + + elif code == lv.EVENT.SHORT_CLICKED: + #utime.sleep_ms(10) + print("1self.is_sliding",self.is_sliding) + if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件 + self.is_sliding =0 + self.point = 0 + self.blood_Maxvalue = 0 + self.blood_Minvalue = 0 + self.count_blood = 0 + self.timer.start(1*500, 1, self.start_measure) + blood_pressure_bpm_label.set_text("--/--") + if blood_pressure_reset_btn_img != None: + blood_pressure_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) + + self.heart_value = 0 + + blood_pressure_done_label.set_text(" ") + blood_pressure_bpm_label.set_text("--/--") + blood_pressure_start_label.set_text("正在测量中.") + EventMesh.publish("set_hr_state",1)#1代表手动进入测试界面 + + EventMesh.publish(constants.EVENT.START_HEART) + + self.is_sliding =0 + def start_init(self): + self.point = 0 + self.blood_Maxvalue = 0 + self.blood_Minvalue = 0 + self.count_blood = 0 + self.count_blood = 0 + self.timer.start(1*500, 1, self.start_measure) + blood_pressure_bpm_label.set_text("--/--") + if blood_pressure_reset_btn_img != None: + blood_pressure_reset_btn_img.add_flag(lv.obj.FLAG.HIDDEN) + self.heart_value = 0 + blood_pressure_done_label.set_text(" ") + blood_pressure_bpm_label.set_text("--/--") + blood_pressure_start_label.set_text("正在测量中.") + EventMesh.publish("set_hr_state",1)#1代表手动进入测试界面 + + EventMesh.publish(constants.EVENT.START_HEART) + + + def show_history_blood_data(self,event,msg): + global blood_pressure_screen,blood_pressure_label,blood_pressure_reset_btn_img,blood_pressure_line1_h,blood_pressure_line1_l,\ + blood_pressure_line2_h,blood_pressure_line2_l,blood_pressure_line3_h,blood_pressure_line3_l,blood_pressure_line4_h,blood_pressure_line4_l,\ + blood_pressure_line5_h,blood_pressure_line5_l,blood_pressure_line6_h,blood_pressure_line6_l,blood_pressure_line7_h,blood_pressure_line7_l,\ + blood_pressure_line_bg_img,blood_pressure_done_img ,blood_pressure_start_label,blood_pressure_bpm_label ,blood_pressure_done_label + read_data = {} + read_data = EventMesh.publish("get_old_blood_data") + print("get_old_blood_data",read_data) + # read_data = [{'timeSec': 4294938562, 'blMin': 67, 'blMax': 126}] + if read_data != None: + if len(read_data) != 0: + sort_new = {} + sort_new = sorted(read_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条 + # print("hr history sort_new",sort_new) + if sort_new != []: + for i in range(len(sort_new)): + print(int(sort_new[i]["blMax"])) + print(int(sort_new[i]["blMin"])) + print("hr history read_data",read_data) + valueMax = int(sort_new[i]["blMax"]) + valueMin = int(sort_new[i]["blMin"]) + + if valueMax < 30: + valueMax = 30 + if valueMax >= 210: + valueMax = 210 + + line_Maxvalue = valueMax - 30 # 90*0.6=54 120*0.56 = 67 90 *0.56=50 60*0.56 = 33 + if valueMax <= 60:#18 36.6 -18 = 18 + line_Maxvalue = int((valueMax-30)*0.6)# + elif valueMax <= 90: + line_Maxvalue = int((valueMax-60)*0.6)+18#127+15+1 + elif valueMax < 120: + line_Maxvalue = int((valueMax-90)*0.55)+18+18 + elif valueMax == 120: + line_Maxvalue = int((valueMax-90)*0.6)+18+18 + elif valueMax < 150: + line_Maxvalue = int((valueMax-120)*0.55)+18+18+18 + elif valueMax == 150: + line_Maxvalue = int((valueMax-120)*0.6)+18+18+18 + elif valueMax < 180: + line_Maxvalue = int((valueMax-150)*0.56)+18+18+18+18 + elif valueMax == 180: + line_Maxvalue = int((valueMax-150)*0.6)+18+18+18+18 + + if line_Maxvalue >= 100: + line_Maxvalue = 100 + + print("line_Maxvalue",line_Maxvalue) + + if valueMin < 30: + valueMin = 30 + if valueMin >= 210: + valueMin = 210 + + line_Minvalue = valueMin - 30 #180-80 = 100 160-100 = 60 + + if valueMin <= 60:#18 36.6 -18 = 18 + line_Minvalue = int((valueMin-30)*0.6)# + elif valueMin <= 90: + line_Minvalue = int((valueMin-60)*0.6)+18#127+15+1 + elif valueMin < 120: + line_Minvalue = int((valueMin-90)*0.55)+18+18 + elif valueMin == 120: + line_Minvalue = int((valueMin-90)*0.6)+18+18 + elif valueMin < 150: + line_Minvalue = int((valueMin-120)*0.55)+18+18+18 + elif valueMin == 150: + line_Minvalue = int((valueMin-120)*0.6)+18+18+18 + elif valueMin < 180: + line_Minvalue = int((valueMin-150)*0.56)+18+18+18+18 + elif valueMin == 180: + line_Minvalue = int((valueMin-150)*0.6)+18+18+18+18 + #print("hr hist",line_value) + blood_pressure_lineh_points = [{"x":0,"y":0},{"x":0,"y":line_Maxvalue}] + blood_pressure_linel_points = [{"x":0,"y":0},{"x":0,"y":line_Minvalue}] + if i == 0: + blood_pressure_line1_h.set_points(blood_pressure_lineh_points,2) + blood_pressure_line1_h.set_pos(20,145-line_Maxvalue) + blood_pressure_line1_h.set_size(5,line_Maxvalue) + + blood_pressure_line1_l.set_points(blood_pressure_linel_points,2) + blood_pressure_line1_l.set_pos(28,145-line_Minvalue) + blood_pressure_line1_l.set_size(5,line_Minvalue) + + if i == 1: + blood_pressure_line2_h.set_points(blood_pressure_lineh_points,2) + blood_pressure_line2_h.set_pos(48,145-line_Maxvalue) + blood_pressure_line2_h.set_size(5,line_Maxvalue) + + blood_pressure_line2_l.set_points(blood_pressure_linel_points,2) + blood_pressure_line2_l.set_pos(56,145-line_Minvalue) + blood_pressure_line2_l.set_size(5,line_Minvalue) + + if i == 2: + blood_pressure_line3_h.set_points(blood_pressure_lineh_points,2) + blood_pressure_line3_h.set_pos(75,145-line_Maxvalue) + blood_pressure_line3_h.set_size(5,line_Maxvalue) + + blood_pressure_line3_l.set_points(blood_pressure_linel_points,2) + blood_pressure_line3_l.set_pos(83,145-line_Minvalue) + blood_pressure_line3_l.set_size(5,line_Minvalue) + + if i == 3: + blood_pressure_line4_h.set_points(blood_pressure_lineh_points,2) + blood_pressure_line4_h.set_pos(104,145-line_Maxvalue) + blood_pressure_line4_h.set_size(5,line_Maxvalue) + + blood_pressure_line4_l.set_points(blood_pressure_linel_points,2) + blood_pressure_line4_l.set_pos(112,145-line_Minvalue) + blood_pressure_line4_l.set_size(5,line_Minvalue) + + if i == 4: + blood_pressure_line5_h.set_points(blood_pressure_lineh_points,2) + blood_pressure_line5_h.set_pos(131,145-line_Maxvalue) + blood_pressure_line5_h.set_size(5,line_Maxvalue) + + blood_pressure_line5_l.set_points(blood_pressure_linel_points,2) + blood_pressure_line5_l.set_pos(139,145-line_Minvalue) + blood_pressure_line5_l.set_size(5,line_Minvalue) + + if i == 5: + blood_pressure_line6_h.set_points(blood_pressure_lineh_points,2) + blood_pressure_line6_h.set_pos(159,145-line_Maxvalue) + blood_pressure_line6_h.set_size(5,line_Maxvalue) + + blood_pressure_line6_l.set_points(blood_pressure_linel_points,2) + blood_pressure_line6_l.set_pos(167,145-line_Minvalue) + blood_pressure_line6_l.set_size(5,line_Minvalue) + + if i == 6: + blood_pressure_line7_h.set_points(blood_pressure_lineh_points,2) + blood_pressure_line7_h.set_pos(187,145-line_Maxvalue) + blood_pressure_line7_h.set_size(5,line_Maxvalue) + + blood_pressure_line7_l.set_points(blood_pressure_linel_points,2) + blood_pressure_line7_l.set_pos(195,145-line_Minvalue) + blood_pressure_line7_l.set_size(5,line_Minvalue) + + def start_measure(self,*args): + EventMesh.publish("publish_message_event_ui",{"func":self.start_measure_do,"data":0}) + def start_measure_do(self,data): + global blood_pressure_screen,blood_pressure_label,blood_pressure_done_img ,blood_pressure_reset_btn_img,blood_pressure_start_label,blood_pressure_bpm_label ,\ + blood_pressure_done_label + self.point = self.point + 1 + EventMesh.publish("system_sleep_rest")#防止黑屏 + blood_data = EventMesh.publish("get_blood_value") + if blood_data == None: + blood_data[0] = 0 + blood_data[1] = 0 + self.max_value = blood_data[0] + self.min_value = blood_data[1] + WEAR = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据 + #print("heart WEAR:{}".format(WEAR)) + # print("self.heart_value:{}".format(self.heart_value)) + + if self.point%3 == 0 : + blood_pressure_start_label.set_text("正在测量中..") + blood_pressure_done_img.set_src("E:/static/blood_gif01.png") + if self.point%3 == 1 : + blood_pressure_start_label.set_text("正在测量中...") + blood_pressure_done_img.set_src("E:/static/blood_gif02.png") + if self.point%3 == 2 : + blood_pressure_start_label.set_text("正在测量中.") + blood_pressure_done_img.set_src("E:/static/blood_gif03.png") + + + if self.point > 80 or (WEAR == 0 and self.point > 10): #测40s或没佩戴 + self.timer.stop() + blood_pressure_done_img.set_src("E:/static/blood_gif03.png") + if WEAR == 0: + blood_pressure_start_label.set_text("佩戴异常,点击重测") + else : + blood_pressure_start_label.set_text("测量结束,点击重测") + + blood_pressure_reset_btn_img.clear_flag(lv.obj.FLAG.HIDDEN) + + if (self.max_value != 0 or self.min_value != 0) and WEAR == 1: + EventMesh.publish("set_old_blood_data",[self.max_value,self.min_value]) + blood_pressure_bpm_label.set_text("{}/{}".format(self.max_value,self.min_value)) + # heartrate_done_label.set_text("测量完成") + else: + blood_pressure_bpm_label.set_text("--/--") + + self.point = 0 + EventMesh.publish("set_hr_state",0)#0代表关闭测试 + print("stop debug9") + EventMesh.publish(constants.EVENT.STOP_HEART) + + def Close(self): + self.timer.stop() + get_hr_state = EventMesh.publish("get_hr_state") + get_spo2_state = EventMesh.publish("get_spo2_state") + if get_hr_state == 1 or get_spo2_state == 1: + EventMesh.publish("set_hr_state",0)#0代表关闭测试 + print("stop debug10") + EventMesh.publish(constants.EVENT.STOP_HEART) + + def done_return(self): + EventMesh.publish("load_screen", {"screen": "health"}) + + + + def btn1_release(self): + EventMesh.publish("load_screen", {"screen": "health"}) + + def done_left_to_right(self): + self.timer.stop() + get_hr_state = EventMesh.publish("get_hr_state") + get_spo2_state = EventMesh.publish("get_spo2_state") + if get_hr_state == 1 or get_spo2_state == 1: + EventMesh.publish("set_hr_state",0)#0代表关闭测试 + print("stop debug10") + EventMesh.publish(constants.EVENT.STOP_HEART) + EventMesh.publish("return_prev_screen") + + def btn8_press(self): + EventMesh.publish("watch_top_show") + EventMesh.publish("load_screen", {"screen": "main_menu"}) + + + + + + + diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_main_menu.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_main_menu.py index 0f8a8c41..b0f79692 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_main_menu.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_main_menu.py @@ -430,36 +430,38 @@ MainMenu1_img_spo2_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) MainMenu1_img_spo2_text.set_text("血氧") MainMenu1_img_spo2_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) + + +MainMenu1_img_blood = lv.img(MainMenu1_two) +MainMenu1_img_blood.set_size(THEME1_ICON_X,THEME1_ICON_Y) +MainMenu1_img_blood.set_pos(MAIN1_ICON_X,140+5) +MainMenu1_img_blood.set_src("U:/static/theme1/THEME1_BLOOD_PRESSURE.png") +MainMenu1_img_blood.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_blood.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) + +MainMenu1_img_blood_text = lv.label(MainMenu1_two) +MainMenu1_img_blood_text.set_pos(int(5),int(232+5)) +MainMenu1_img_blood_text.set_size(LCD_SIZE_W//2-5,30) +# MainMenu1_img_blood_text.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_blood_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) +MainMenu1_img_blood_text.set_text("血压") +MainMenu1_img_blood_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) + MainMenu1_img_temp = lv.img(MainMenu1_two) MainMenu1_img_temp.set_size(THEME1_ICON_X,THEME1_ICON_Y) -MainMenu1_img_temp.set_pos(MAIN1_ICON_X,140+5) +MainMenu1_img_temp.set_pos(MAIN1_ICON_X*2+85,140+5) MainMenu1_img_temp.set_src("U:/static/theme1/THEME1_TEMP.png") MainMenu1_img_temp.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_temp.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) MainMenu1_img_temp_text = lv.label(MainMenu1_two) -MainMenu1_img_temp_text.set_pos(int(5),int(232+5)) -MainMenu1_img_temp_text.set_size(LCD_SIZE_W//2-5,30) +MainMenu1_img_temp_text.set_pos(int(115),int(232+5)) +MainMenu1_img_temp_text.set_size(LCD_SIZE_W//2,30) # MainMenu1_img_temp_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_temp_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) MainMenu1_img_temp_text.set_text("体温") MainMenu1_img_temp_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) -MainMenu1_img_wechat = lv.img(MainMenu1_two) -MainMenu1_img_wechat.set_size(THEME1_ICON_X,THEME1_ICON_Y) -MainMenu1_img_wechat.set_pos(MAIN1_ICON_X*2+85,140+5) -MainMenu1_img_wechat.set_src("U:/static/theme1/THEME1_WECHAT.png") -MainMenu1_img_wechat.add_flag(lv.obj.FLAG.CLICKABLE) -MainMenu1_img_wechat.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) - -MainMenu1_img_wechat_text = lv.label(MainMenu1_two) -MainMenu1_img_wechat_text.set_pos(int(115),int(232+5)) -MainMenu1_img_wechat_text.set_size(LCD_SIZE_W//2,30) -# MainMenu1_img_wechat_text.add_flag(lv.obj.FLAG.CLICKABLE) -MainMenu1_img_wechat_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) -MainMenu1_img_wechat_text.set_text("微聊") -MainMenu1_img_wechat_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) - MainMenu1_num+=1 MainMenu1x+=1 @@ -471,66 +473,66 @@ label_text.set_pos(0, LCD_SIZE_H) label_text.set_size(0, 0) label_text.set_text("{}".format(MainMenu1_num)) -MainMenu1_img_alarm = lv.img(MainMenu1_three) -MainMenu1_img_alarm.set_size(THEME1_ICON_X,THEME1_ICON_X) -MainMenu1_img_alarm.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5) +MainMenu1_img_wechat = lv.img(MainMenu1_three) +MainMenu1_img_wechat.set_size(THEME1_ICON_X,THEME1_ICON_X) +MainMenu1_img_wechat.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5) +MainMenu1_img_wechat.set_src("U:/static/theme1/THEME1_WECHAT.png") +MainMenu1_img_wechat.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_wechat.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) + +MainMenu1_img_wechat_text = lv.label(MainMenu1_three) +MainMenu1_img_wechat_text.set_pos(int(5),int(104+5)) +MainMenu1_img_wechat_text.set_size(LCD_SIZE_W//2-5,30) +# MainMenu1_img_wechat_text.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_wechat_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) +MainMenu1_img_wechat_text.set_text("微聊") +MainMenu1_img_wechat_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) + +MainMenu1_img_alarm= lv.img(MainMenu1_three) +MainMenu1_img_alarm.set_size(THEME1_ICON_X,THEME1_ICON_Y) +MainMenu1_img_alarm.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5) MainMenu1_img_alarm.set_src("U:/static/theme1/THEME1_ALARM.png") MainMenu1_img_alarm.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_alarm.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) MainMenu1_img_alarm_text = lv.label(MainMenu1_three) -MainMenu1_img_alarm_text.set_pos(int(5),int(104+5)) -MainMenu1_img_alarm_text.set_size(LCD_SIZE_W//2-5,30) +MainMenu1_img_alarm_text.set_pos(int(120),int(104+5)) +MainMenu1_img_alarm_text.set_size(LCD_SIZE_W//2,30) # MainMenu1_img_alarm_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_alarm_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) MainMenu1_img_alarm_text.set_text("闹钟") MainMenu1_img_alarm_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) -MainMenu1_img_stopwatch= lv.img(MainMenu1_three) +MainMenu1_img_stopwatch = lv.img(MainMenu1_three) MainMenu1_img_stopwatch.set_size(THEME1_ICON_X,THEME1_ICON_Y) -MainMenu1_img_stopwatch.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5) +MainMenu1_img_stopwatch.set_pos(MAIN1_ICON_X,140+5) MainMenu1_img_stopwatch.set_src("U:/static/theme1/THEME1_STOPWATCH.png") MainMenu1_img_stopwatch.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_stopwatch.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) MainMenu1_img_stopwatch_text = lv.label(MainMenu1_three) -MainMenu1_img_stopwatch_text.set_pos(int(120),int(104+5)) -MainMenu1_img_stopwatch_text.set_size(LCD_SIZE_W//2,30) -# MainMenu1_img_sms_text.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_stopwatch_text.set_pos(int(5),int(232+5)) +MainMenu1_img_stopwatch_text.set_size(LCD_SIZE_W//2-5,30) +# MainMenu1_img_stopwatch_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_stopwatch_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) MainMenu1_img_stopwatch_text.set_text("秒表") MainMenu1_img_stopwatch_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) MainMenu1_img_countdown = lv.img(MainMenu1_three) MainMenu1_img_countdown.set_size(THEME1_ICON_X,THEME1_ICON_Y) -MainMenu1_img_countdown.set_pos(MAIN1_ICON_X,140+5) +MainMenu1_img_countdown.set_pos(MAIN1_ICON_X*2+85,140+5) MainMenu1_img_countdown.set_src("U:/static/theme1/THEME1_COUNTDOWN.png") MainMenu1_img_countdown.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_countdown.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) MainMenu1_img_countdown_text = lv.label(MainMenu1_three) -MainMenu1_img_countdown_text.set_pos(int(5),int(232+5)) -MainMenu1_img_countdown_text.set_size(LCD_SIZE_W//2-5,30) +MainMenu1_img_countdown_text.set_pos(int(120),int(232+5)) +MainMenu1_img_countdown_text.set_size(LCD_SIZE_W//2,30) # MainMenu1_img_countdown_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_countdown_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) MainMenu1_img_countdown_text.set_text("倒计时") MainMenu1_img_countdown_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) -MainMenu1_img_toolbox = lv.img(MainMenu1_three) -MainMenu1_img_toolbox.set_size(THEME1_ICON_X,THEME1_ICON_Y) -MainMenu1_img_toolbox.set_pos(MAIN1_ICON_X*2+85,140+5) -MainMenu1_img_toolbox.set_src("U:/static/theme1/THEME1_TOOLBOX.png") -MainMenu1_img_toolbox.add_flag(lv.obj.FLAG.CLICKABLE) -MainMenu1_img_toolbox.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) - -MainMenu1_img_toolbox_text = lv.label(MainMenu1_three) -MainMenu1_img_toolbox_text.set_pos(int(120),int(232+5)) -MainMenu1_img_toolbox_text.set_size(LCD_SIZE_W//2,30) -# MainMenu1_img_calllog_text.add_flag(lv.obj.FLAG.CLICKABLE) -MainMenu1_img_toolbox_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) -MainMenu1_img_toolbox_text.set_text("工具箱") -MainMenu1_img_toolbox_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) - MainMenu1_num+=1 MainMenu1x+=1 @@ -540,15 +542,30 @@ label_text.set_pos(0, LCD_SIZE_H) label_text.set_size(0, 0) label_text.set_text("{}".format(MainMenu1_num)) +MainMenu1_img_toolbox = lv.img(MainMenu1_four) +MainMenu1_img_toolbox.set_size(THEME1_ICON_X,THEME1_ICON_X) +MainMenu1_img_toolbox.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5) +MainMenu1_img_toolbox.set_src("U:/static/theme1/THEME1_TOOLBOX.png") +MainMenu1_img_toolbox.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_toolbox.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) + +MainMenu1_img_toolbox_text = lv.label(MainMenu1_four) +MainMenu1_img_toolbox_text.set_pos(int(5),int(109)) +MainMenu1_img_toolbox_text.set_size(LCD_SIZE_W//2-5,30) +# MainMenu1_img_toolbox_text.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_toolbox_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) +MainMenu1_img_toolbox_text.set_text("工具箱") +MainMenu1_img_toolbox_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT) + MainMenu1_img_setting = lv.img(MainMenu1_four) MainMenu1_img_setting.set_size(THEME1_ICON_X,THEME1_ICON_X) -MainMenu1_img_setting.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5) +MainMenu1_img_setting.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5) MainMenu1_img_setting.set_src("U:/static/theme1/THEME1_SETTING.png") MainMenu1_img_setting.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_setting.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) MainMenu1_img_setting_text = lv.label(MainMenu1_four) -MainMenu1_img_setting_text.set_pos(int(5),int(109)) +MainMenu1_img_setting_text.set_pos(int(120),int(104+5)) MainMenu1_img_setting_text.set_size(LCD_SIZE_W//2-5,30) # MainMenu1_img_setting_text.add_flag(lv.obj.FLAG.CLICKABLE) MainMenu1_img_setting_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) @@ -557,6 +574,8 @@ MainMenu1_img_setting_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STAT MainMenu1_num+=1 MainMenu1x+=1 + + #主菜单风格2,单页 class MainMenuScreen(Screen): NAME = "main_menu" @@ -605,6 +624,9 @@ class MainMenuScreen(Screen): MainMenu1_img_temp.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "temperature")), lv.EVENT.SHORT_CLICKED, None) MainMenu1_img_temp.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "temperature")), lv.EVENT.PRESSING, None) + MainMenu1_img_blood.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "blood_pressure")), lv.EVENT.SHORT_CLICKED, None) + MainMenu1_img_blood.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "blood_pressure")), lv.EVENT.PRESSING, None) + MainMenu1_img_wechat.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.SHORT_CLICKED, None) MainMenu1_img_wechat.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.PRESSING, None) diff --git a/2.sdk/project/C06S/usr/static/theme1/THEME1_BLOOD_PRESSURE.png b/2.sdk/project/C06S/usr/static/theme1/THEME1_BLOOD_PRESSURE.png new file mode 100644 index 00000000..efec587c Binary files /dev/null and b/2.sdk/project/C06S/usr/static/theme1/THEME1_BLOOD_PRESSURE.png differ