日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用STWI056WT-01串口屏的医疗笔记

發布時間:2023/12/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用STWI056WT-01串口屏的医疗笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個項目首先是基于一個手術醫生的私人微信云開發小程序。眾所周知,騰訊為微信云開發小程序提供了5GB的免費云存儲,足夠一般用戶個人的賬目需求,而且云存儲又有隨時隨地方便訪問的特點,只要有wifi、有流量,拿起手機、打開微信,就能調用自己的小程序訪問、查詢、統計自己的私人數據。這個醫生在湖南株洲是很有名氣,作為人才引進來到深圳平樂骨傷科醫院,認識到一位幫人做微信小程序的深圳軟件工程師,驚喜云開發小程序的妙用,嘗試了第一個自己的微信云開發小程序:記錄、查詢、統計多年來自己做過的超過千臺數量的泌尿科結石手術。通過小程序中提供的時間段查詢功能,可以方便快捷的查詢某年、某月的手術數量,通過小程序的綜合查詢統計功能,輸入不同的“關鍵字”,可以統計某個醫院、某個部位的結石、某種治療結石的技術以及其他某種特定的說明的手術數量。下圖(1)是這個微信小程序的4個界面。

圖(1)云開發小程序的4個界面?

在手術室我們使用STONE的觸控串口屏會更適合,STONE串口屏很高興能為醫療器械提供更安全可靠的顯示和控制界面。如果我們在手術室里要錄入這些手術內容,手術設備的型號、參數也當然更加容易得到,甚至可以從系統中通過共享得到,更準確且省去了二次錄入,當然這樣的功能需要在設備前期規劃,此處我通過STONE串口屏來演示這個微信小程序功能(不涉及數據庫和云存儲),作為拋磚引玉,讀者有興趣還可以進一步通過藍牙配對,實現系統與手機的數據共享,完成本地數據的云端存儲、以及云端數據下載到本地,通過藍牙也能實現手機對STONE屏的控制、以及屏對手機端的反饋等。

結合STONE串口屏的軟件平臺,圖(1)中的界面需做一些修改,操作方式和展示方法也會有所不同,當然程序代碼也差別很大。微信小程序是基于JavaScript的,本STONE串口屏項目是基于arduino的ESP32環境。新的STONE界面醫生手術筆記項目記錄將按如下展開。

敘述內容:

  • 人機界面和控件制作說明
  • 界面下載
  • 硬件連接與指令測試
  • 調試代碼
  • 附錄:ASCII碼表
  • 1.人機界面和控件制作說明

    如圖(2)開機可以通過不同的按鈕分別進入手術記錄---圖(3)、時間段查詢---圖(5)、綜合查詢功能---圖(7)。

    如圖(3),手術記錄界面首先通過text_selector控件選擇手術時間:年、月、日,選擇手術部位,然后通過edit控件填入手術地點、手術使用的關鍵設備、手術說明,完成后點擊save按鈕,會彈出記錄成功界面如圖(4)。

    圖(2)開機功能界面?

    圖(3)手術記錄界面?

    在圖(4)界面點擊back按鈕,返回到圖(2)功能界面。若選擇時間段查詢,就進入圖(5)界面,這里也是通過text_selector控件選擇查詢的開始日期和結束日期的年、月、日,再點擊read按鈕,進入圖(6)查詢結果展示。

    圖(4)記錄成功界面?

    圖(5)時間段查詢界面?

    圖(6)將展示指定時間段總共有記錄多少臺手術,并將第一臺手術記錄的內容展示在屏幕中間,點擊Next按鈕,會依次展示第二臺、第三臺的內容。這些內容都是通過ESP32控制表與STONE屏串口通訊傳入到label控件、HScroll_label滾動控件中顯示的。其中年、月、日、手術總數都是label控件,其他都是HScroll_label控件,可以滾動顯示更多的內容。點擊Back按鈕返回在到圖(2)功能界面。若在圖(2)選擇綜合查詢功能,就進入圖(7)界面。

    圖(6)時間段查詢結果界面?

    圖(7)綜合查詢功能界面?

    在圖(7)中通過edit接收關鍵字輸入,點擊read按鈕進入圖(8)結果界面,點擊Back按鈕返回圖(2)。在圖(8)中同圖(6)類似,展示了符合關鍵字的總共手術臺數,配合Next按鈕展示全部手術的內容。也通過Back按鈕返回圖(2)。

    上述提到的各個界面中涉及編程需要的控件name和范圍、內容等,統一陳列在一起,方便編程時查閱。

    圖(8)綜合查詢結果界面? ?

    編程控件name:

    手術記錄界面save按鈕:name = b12

    手術記錄內容text_selector,name分別為:? year = ts11,month = ts12,day = ts13,part = ts14

    其中:

    ts11(2000--2099)年,ts12(1--12)月,ts13(1--31)日,

    ts14(1:left renal;2:right renal;3:left ureteral;4:right ureteral;5:bladder;6:urethral;7:others;)

    手術記錄內容edit,name分別為:

    Location = e11,Equipment = e12,Description = e13

    手術時間段查詢read按鈕:name = b32

    Start date:year = ts31,month = ts32,day = ts33

    End date:year = ts34,month = ts35,day = ts36

    范圍同上。

    時間段查詢結果 Next 按鈕:name = b42

    ? ??? Labal顯示name分別為:

    year = l41,month = l42,day = l43,total = l44

    Hscroll label顯示name分別為:

    Location = hl41,equipment = hl42,part = hl43,description = hl44,during = hl45

    關鍵字read按鈕:name = b52,edit name = e51

    關鍵字查詢結果Next按鈕:name = b62

    ??????? Labal顯示name分別為:

    year = l61,month = l62,day = l63,total = l64

    Hscroll label顯示name分別為:

    Location = hl61,equipment = hl62,part = hl63,description = hl64,during = hl65

    2.界面下載

    參照充電樁項目的方法B下載界面成功。

    3.硬件連接與指令測試

    圖(9)串口助手指令測試V1.2轉接板跳線鏈接圖 ?

    STONE新版軟件在持續升級完善中,使用中發現有部分功能與手冊有出入,因此有必要在編程之前對需要用到的指令進行驗證。按圖(9)連接,通過串口助手查看STONE的反饋、驗證指令的有效性。

    本項目涉及的控件有button、label、HScroll_Label、edit、text_selector共5種,下面我們逐個測試驗證。

    button相關:

    0x1001??? button鍵值主動下發

    鍵值(數據部分最后一字節):

    0x01???????? press down按鈕按下

    0x02 ?????? press up 按鈕松開(按鈕完成? 觸發click點擊事件)

    例:

    手術記錄界面save按鈕(name = b12 )按下主動下發指令:

    ST<0x10 0x01 0x00 0x04 ?b12 ?0x01>ET

    串口助手返回十六進制數據:?? ????????? 驗證OK

    53 54 3C ?10 01 00 04 ?62 31 32 ?01 ?3E 45 54 ?5C 4F

    按鈕松開(完成按鈕click動作)主動下發指令

    ST<0x10 0x01 0x00 0x04 ?b12 ?0x02>ET

    串口助手返回十六進制數據:?????? 驗證OK

    53 54 3C ?10 01 00 04 ?62 31 32 ?02 ?3E 45 54 ?18 4F

    注:按鈕b12(ASCII碼 0x62 ?0x31 ?0x32)。

    label相關:

    set_text?? 設置label顯示的文本

    例:

    設置文本:? (關鍵字查詢總數 name = l64)

    ST<{"cmd_code":"set_text","type":"label","widget":"l64","text":"520"}>ET???? 驗證上屏OK

    hscroll_label相關:

    set_text?????????? 設置hscroll_label顯示的文本

    例:

    設置文本:

    ST<{"cmd_code":"set_text","type":"hscroll_label","widget":"hl61","text":"ShenZhen"}>ET?? NG

    ST<{"cmd_code":"set_text","type":"label","widget":"hl61","text":"ShenZhen"}>ET??????? ?OK

    注:NG是手冊上給出的指令格式, ?OK是我自己嘗試成功上屏的指令格式!這也是驗證的重要收獲!

    edit相關:

    get_text? 獲取edit顯示的內容

    0x1070??? edit文本下發? ???? (主動被動下發? 可以是edit數據更改之后主動下發? 也可以使用get_text主動獲取)

    文本:? "控件名稱":文本內容?? 數據長度不能超過1024字節 (:號之后的文本內容)

    例:

    獲取文本:? (手術記錄的 Location 處edit控件 name = e11)

    ST<{"cmd_code":"get_text","type":"edit","widget":"e11"}>ET

    串口助手反饋十六進制數據如下:

    53 54 3C ?10 70 ?00 0C ?22 65 31 31 22 3A ??61 62 63 64 65 66 ?3E 45 54 ?20 FF

    edit文本數據下發指令:??????????????? 驗證 ?OK

    ST< 0x10 0x70 0x00 0x0C ?"e11":??????????? abcdef? >ET???????????? e11文本數據:abcdef?

    text selector相關:

    get_text?????????? 獲取文本選擇器的當前文本

    get_value???????? 獲取文本選擇器的當前數值

    get_selected?? 獲取文本選擇器當前選擇項序號(獲取的是當前選擇項的序號)

    0x1080??? text selector文本下發? ??????? (被動下發 MCU使用get_text主動獲取)

    0x1081??? text selector數值下發?? (int類型 主動/被動下發:MCU使用get_value命令獲取)

    0x1082??? text selector序號下發?? (int類型 被動下發:MCU使用get_selected命令獲取)

    數據格式:

    text文本:"控件名稱":文本內容?? 長度不超過1024字節 (控件名稱:號之后的文本內容)

    value數值:數據部分最后四字節

    index數值:數據部分最后四字節

    1: (手術記錄的部位控件name = ts14,當前是序號為0的“1:left renal;”)

    獲取文本選擇器t14當前文本:

    ST<{"cmd_code":"get_text","type":"text_selector","widget":"ts14"}>ET

    串口助手反饋十六進制數據是:

    53 54 3C 10 80 00 11 ?22 74 73 31 34 22 3A ?6C 65 66 74 20 72 65 6E 61 6C ?3E 45 54 ?F1 FE

    屏下發的指令即為:

    ST< 0x10 0x80 0x00 0x11 ?"ts14":left renal????? >ET??????? ??? ts14文本數據: left renal??? OK

    獲取文本選擇器t14當前數值:

    ST<{"cmd_code":"get_value","type":"text_selector","widget":"ts14"}>ET

    串口助手反饋十六進制數據是:

    53 54 3C 10 81 00 08 ?74 73 31 34 00 00 00 01 ?3E 45 54 ?DE CA?????????????????????????????????????? OK

    屏下發的指令即為:

    ST<0x10 0x81 0x00 0x08 ?ts14 0x00 0x00 0x00 0x01? >ET???????? ? ts14當前數值數據:1

    獲取文本選擇器t14當前序號:

    ST<{"cmd_code":"get_selected","type":"text_selector","widget":"ts14"}>ET

    串口助手反饋十六進制數據是:(ts14是序號為0的“1:left renal;”)

    53 54 3C? 10 82 00 08? 74 73 31 34? 00 00 00 00? 3E 45 54? 21 C8? OK

    屏下發的指令即為:

    ST<0x10 0x82 0x00 0x08 ?ts14 ???0x00 0x00 0x00 0x00? >ET????????? ts14當前序號:0

    注:ts14的options為,

    1:left renal;2:right renal;3:left ureteral;4:right ureteral;5:bladder;6:urethral;7:others;

    ***本處使用get_value獲取的是格式中的編號; 而使用get_selected獲取的是當前選擇項的序號(該序號是從0開始的)。

    2: (手術記錄的年控件name = ts11,options:2000-2099,當前:2022)

    獲取文本選擇器t11當前文本:

    ST<{"cmd_code":"get_text","type":"text_selector","widget":"ts11"}>ET

    串口助手反饋十六進制數據是:(ts11是2022)

    53 54 3C 10 80 00 0B ?22 74 73 31 31 22 3A 32 30 32 32 ?3E 45 54 ?D7 37

    屏下發的指令即為:

    ST< 0x10 0x80 0x00 0x0B ?"ts11":2022??????????????? >ET??? ts11當前文本: 2022??? OK

    獲取文本選擇器t11當前數值:

    ST<{"cmd_code":"get_value","type":"text_selector","widget":"ts11"}>ET

    串口助手反饋十六進制數據是:

    53 54 3C 10 81 00 08 ?74 73 31 31 00 00 07 E6 ?3E 45 54 ?95 89 ?? ????????????OK

    屏下發的指令即為:

    ST<0x10 0x81 0x00 0x08 ?ts11 0x00 0x00 0x07 0xE6? >ET???????? ? ts11當前數值:2022 = 7E6

    獲取文本選擇器t11當前序號:

    ST<{"cmd_code":"get_selected","type":"text_selector","widget":"ts11"}>ET

    串口助手反饋十六進制數據是:(0x16 = 22)

    53 54 3C ?10 82 00 08 ?74 73 31 31 ?00 00 00 16 ?3E 45 54 ?56 0C? OK

    屏下發的指令即為:

    ST<0x10 0x82 0x00 0x08 ?ts11 ???0x00 0x00 0x00 0x16? >ET????????? ts11當前序號: 0x16 = 22

    有了上面的指令測試,接下來就可以放心編程實現手術醫生的記錄、查詢、統計功能了。當然首先還是硬件連接。我們是用ESP32開發板來實現與STONE串口屏的通訊。

    如圖(10),NodeMCU-32S開發板TX0RX0GND是需和STONE屏轉接板對應連接,見圖(11),以完成HMI信息交互。STONE屏接口是232信號,通過V1.2轉接板變成MCU接口需要的TXRX信號,才能電平匹配。圖(11)左邊是NodeMCU-32S板,藍色(TX0)、紅色(RX0)線接V1.2轉接板跳線位置(旁邊是取下的藍色跳線),黑色連GND

    圖(10NodeMCU-32S開發板的TX0RX0位置圖?

    圖(11NodeMCU-32S開發板與V1.2轉接板通訊連接圖?

    4.調試代碼

    鑒于篇幅的原因,本項目重點在按鈕解碼和查詢、統計編程。關于記錄的輸入或者系統規劃前的數據共享、或者手機藍牙的導入,因此這里就不做細節解碼。

    /*

    ? Frank for Doctor T in 2022.05.01

    ? use ESP32 of NodeMCU-32s in arduino 1.8.13

    ? use STONE HMI in shenzhen

    */

    //------Doctor T use----------2022.05.01------

    int iSave = 0;???????? // 1 = save key is true, 0 = save key is false.

    int iReadTime = 0;???? // 1 = read time find is true,? 0 = false.

    int iNextTime = 0;???? // 1 = read time next is true,? 0 = false.

    int iReadWord = 0;???? // 1 = read word find is true,? 0 = false.

    int iNextWord = 0;???? // 1 = read word next is true,? 0 = false.

    int yearStart,monthStart,dayStart,yearEnd,monthEnd,dayEnd;??????? //int (-32768,32767)?? unsigned int(0,65535)

    String iwordIn,iwordBuf;??????? // note: S is big of s.

    int years[10],months[10],days[10];

    String locations[10],equipments[10],parts[10],descriptions[10];

    int totalTime,totalWord;

    int iNumRecord = 0;???????? // record num!

    int nowNumWord = -1;??????? //

    int nowNumTime = -1;??????? //

    int i3;

    int LED_blue = 2;? // IO2,? turn the LED on (HIGH is the voltage level)

    int ii = 0;

    int iii = 0;

    //------------

    unsigned int time_1s=0;

    unsigned int time_1m=0;

    unsigned int time_1h=0;

    void setup() {

    ? Serial.begin(115200);

    ? pinMode(LED_blue, OUTPUT);

    }

    void loop() {

    ? int inChar;

    ???

    ? // 讀取串口發送的信息,并簡單解碼:?

    ? if (Serial.available() > 0)?? {inChar = Serial.read();}???????

    ? if (inChar == 0x62)

    ? {???????

    ??? if (Serial.available() > 0){inChar = Serial.read();}

    ??? if (inChar == 0x31) {

    ?????? if (Serial.available() > 0){ inChar = Serial.read();}

    ?????? if (inChar == 0x32)

    ?????? {?????????

    ???????? if (Serial.available() > 0){ inChar = Serial.read();}

    ???????? if (inChar == 0x02)

    ???????? {

    ????????????? iSave = 1;????????? //62 31 32?? 02 is save key ok!

    ????????????? iReadWord = 0;????

    ????????????? iReadTime = 0;?

    ????????????? iNextWord = 0;

    ????????????? iNextTime = 0;??

    ???????? }

    ?????? }??????

    ??? } else if (inChar == 0x33)

    ??? {????

    ?????? if (Serial.available() > 0){ inChar = Serial.read();}

    ?????? if (inChar == 0x32)

    ?????? {

    ???????? if (Serial.available() > 0){ inChar = Serial.read();}

    ???????? if (inChar == 0x02)

    ???????? {

    ???????????? iReadWord = 0;

    ???????????? iReadTime = 1;??? //62 33 32??? 02 is time read key ok!

    ???????????? iNextWord = 0;

    ???????????? iNextTime = 0;

    ???????????? i3 = 0;

    ???????????? totalTime = 0;

    ???????????? nowNumTime = 0;?????

    ???????? }

    ?????? }??????

    ??? } else if (inChar == 0x34)

    ??? {????

    ?????? if (Serial.available() > 0){ inChar = Serial.read();}

    ?????? if (inChar == 0x32)

    ?????? {

    ????????? if (Serial.available() > 0){ inChar = Serial.read();}

    ????????? if (inChar == 0x02)

    ????????? {

    ????????????? iNextWord = 0;

    ????????????? iNextTime = 1;??? //62 34 32?? 02 is time Next key ok!

    ????????? }

    ?????? }??????

    ??? } else if (inChar == 0x35)

    ??? {????

    ?????? if (Serial.available() > 0){ inChar = Serial.read();}

    ?????? if (inChar == 0x32)

    ?????? {

    ?????????? if (Serial.available() > 0){ inChar = Serial.read();}

    ?????????? if (inChar == 0x02)

    ?????????? {

    ????????????? iReadWord = 1;? ???//62 35 32?? 02 is word read key ok!

    ????????????? iReadTime = 0;?

    ????????????? iNextWord = 0;

    ????????????? iNextTime = 0;?

    ????????????? i3 = 0;

    ????????????? totalWord = 0;

    ????????????? nowNumWord = 0;

    ?????????? }

    ?????? }??????

    ??? }? else if (inChar == 0x36)

    ??? {????

    ?????? if (Serial.available() > 0){ inChar = Serial.read();}

    ?????? if (inChar == 0x32)

    ?????? {

    ???????? if (Serial.available() > 0){ inChar = Serial.read();}

    ???????? if (inChar == 0x02)

    ???????? {

    ???????????? iNextWord = 1;???? //62 36 32?? 02 is word find Next key ok!

    ???????????? iNextTime = 0;???

    ???????? }

    ?????? }??????

    ??? }???

    ? }

    //-------------test------begin----------------

    ??? years[0]=2021;

    ??? months[0]=1;

    ??? days[0]=1;

    ??? locations[0]="ShenZhen PinLe";

    ??? equipments[0]="holmic laser light";

    ??? parts[0]="left renal";

    ??? descriptions[0]="0.6cm";

    ??? years[1]=2021;

    ??? months[1]=2;

    ??? days[1]=2;

    ??? locations[1]="ShenZhen PinLe";

    ??? equipments[1]="holmic laser light";

    ??? parts[1]="right renal";

    ??? descriptions[1]="0.8cm";

    ??? iNumRecord = 2;

    ??? yearStart = 2021;

    ??? monthStart = 1;

    ??? dayStart = 1;

    ??? yearEnd = 2022;

    ??? monthEnd = 5;

    ??? dayEnd = 1;

    ??? iwordIn = "left";

    //-------------test-----end-----------------????

    ? if(iReadTime == 1)??? // the time find!?

    ? {

    ??? iReadTime = 0;

    ???

    ??? for(int i = 0; i < iNumRecord; i++)? // look totalTime

    ??? {

    ????? if(yearEnd > years[i] && years[i] > yearStart){

    ??????? totalTime += 1;

    ??????? if(nowNumTime == -1){???????? nowNumTime = i;??????? }

    ????? }

    ????? else if(yearEnd == years[i]){

    ??????? if(months[i] < monthEnd)

    ??????? {

    ????????? totalTime += 1;

    ????????? if(nowNumTime == -1){??????????? nowNumTime = i;????????? }

    ??????? }

    ??????? else if(months[i] == monthEnd && days[i] <= dayEnd)

    ??????? {

    ????????? totalTime += 1;

    ????????? if(nowNumTime == -1){??????????? nowNumTime = i;????????? }

    ??????? }??????

    ????? }

    ????? else if(years[i] == yearStart)

    ????? {

    ??????? if(months[i] > monthStart){

    ????????? totalTime += 1;

    ????????? if(nowNumTime == -1){??????????? nowNumTime = i;????????? }

    ??????? }

    ??????? else if(months[i] == monthStart && days[i] >= dayStart){

    ????????? totalTime += 1;

    ????????? if(nowNumTime == -1){??????????? nowNumTime = i;????????? }

    ??????? }???????

    ????? }?????

    ??? }

    ??? if(nowNumTime >= 0)

    ??? {

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l41\",\"text\":\"");

    ????????? Serial.print(years[nowNumTime]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l42\",\"text\":\"");

    ????????? Serial.print(months[nowNumTime]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l43\",\"text\":\"");

    ????????? Serial.print(days[nowNumTime]);

    ????????? Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l44\",\"text\":\"");

    ????????? Serial.print(totalTime);

    ????????? Serial.println("\"}>ET");??????

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl41\",\"text\":\"");??

    ????????? Serial.print(locations[nowNumTime]);

    ????????? Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl42\",\"text\":\"");??

    ????????? Serial.print(equipments[nowNumTime]);

    ????????? Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl43\",\"text\":\"");??

    ????? ????Serial.print(parts[nowNumTime]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl44\",\"text\":\"");??

    ????????? Serial.print(descriptions[nowNumTime]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl45\",\"text\":\"");??

    ????????? Serial.print(String(yearStart)+"."+String(monthStart)+"."+String(dayStart)+"--"+String(yearEnd)+"."+String(monthEnd)+"."+String(dayEnd));

    ????????? Serial.println("\"}>ET");???????????????????

    ??? }

    ? }

    ? if(iNextTime == 1 && nowNumTime >=0 )

    ? {

    ??? int i4 = nowNumTime + 1;

    ??? iNextTime = 0;?

    ?????

    ??? for(int i = i4; i < iNumRecord; i++)? // look Next

    ??? {

    ????? if(yearEnd > years[i] && years[i] > yearStart){

    ???????

    ????????? if(nowNumTime < i4){?? nowNumTime = i;?? }???

    ????? }

    ????? else if(yearEnd == years[i]){

    ??????? if(months[i] < monthEnd)

    ??????? {?????????

    ????????? if(nowNumTime < i4){??????????? nowNumTime = i;????????? }

    ??????? }

    ??????? else if(months[i] == monthEnd && days[i] <= dayEnd)

    ??????? {

    ?????????

    ????????? if(nowNumTime < i4){??????????? nowNumTime = i;????????? }

    ??????? }??????

    ????? }

    ? ????else if(years[i] == yearStart)

    ????? {

    ??????? if(months[i] > monthStart){

    ?????????

    ????????? if(nowNumTime < i4){??????????? nowNumTime = i;????????? }

    ??????? }

    ??????? else if(months[i] == monthStart && days[i] >= dayStart){

    ?????????

    ????????? if(nowNumTime < i4){??????????? nowNumTime = i;????????? }

    ??????? }???????

    ????? }?????

    ??? }

    ??? if(nowNumTime >= i4)

    ??? {

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l41\",\"text\":\"");

    ????????? Serial.print(years[nowNumTime]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l42\",\"text\":\"");

    ????????? Serial.print(months[nowNumTime]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l43\",\"text\":\"");

    ????????? Serial.print(days[nowNumTime]);

    ????????? Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l44\",\"text\":\"");

    ????????? Serial.print(totalTime);

    ????????? Serial.println("\"}>ET");??????

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl41\",\"text\":\"");??

    ????????? Serial.print(locations[nowNumTime]);

    ????????? Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl42\",\"text\":\"");??

    ????????? Serial.print(equipments[nowNumTime]);

    ?? ???????Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl43\",\"text\":\"");??

    ????????? Serial.print(parts[nowNumTime]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl44\",\"text\":\"");??

    ????????? Serial.print(descriptions[nowNumTime]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl45\",\"text\":\"");??

    ????????? Serial.print(String(yearStart)+"."+String(monthStart)+"."+String(dayStart)+"--"+String(yearEnd)+"."+String(monthEnd)+"."+String(dayEnd));

    ????????? Serial.println("\"}>ET");????

    ??? }???????

    ? }

    ? if(iReadWord == 1)??? // the word find!

    ? {

    ??? iReadWord = 0;

    ???

    ??? for(int i = 0; i < iNumRecord; i++)? // look totalWord

    ??? {

    ????? if(locations[i].indexOf(iwordIn) >= 0 || equipments[i].indexOf(iwordIn) >= 0 )

    ????? {

    ??????? totalWord += 1;

    ??????? if(nowNumWord == -1){???????? nowNumWord = i;??????? }

    ????? }? else if(parts[i].indexOf(iwordIn) >= 0 || descriptions[i].indexOf(iwordIn) >= 0)

    ????? {

    ????????? totalWord += 1;

    ????????? if(nowNumWord == -1){?????? nowNumWord = i;????????? }???

    ????? }?????

    ??? }

    ??? if(nowNumWord >= 0)

    ??? {

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l61\",\"text\":\"");

    ????????? Serial.print(years[nowNumWord]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l62\",\"text\":\"");

    ????????? Serial.print(months[nowNumWord]);

    ?????? ???Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l63\",\"text\":\"");

    ????????? Serial.print(days[nowNumWord]);

    ????????? Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l64\",\"text\":\"");

    ????????? Serial.print(totalWord);

    ????????? Serial.println("\"}>ET");??????

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl61\",\"text\":\"");??

    ????????? Serial.print(locations[nowNumWord]);

    ????????? Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl62\",\"text\":\"");??

    ????????? Serial.print(equipments[nowNumWord]);

    ????????? Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl63\",\"text\":\"");??

    ????????? Serial.print(parts[nowNumWord]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl64\",\"text\":\"");??

    ????????? Serial.print(descriptions[nowNumWord]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl65\",\"text\":\"");??

    ????????? Serial.print(iwordIn);

    ????????? Serial.println("\"}>ET");???????????????????

    ??? }

    ? }

    ? if(iNextWord == 1 && nowNumWord >=0 )

    ? {

    ??? int i5 = nowNumWord + 1;

    ??? iNextWord = 0;?

    ?????

    ??? for(int i = i5; i < iNumRecord; i++)? // look Next

    ??? {

    ????? if(locations[i].indexOf(iwordIn) >= 0 || equipments[i].indexOf(iwordIn) >= 0 ){

    ???????

    ????????? if(nowNumWord < i5){?? nowNumWord = i;?? }???

    ????? }

    ????? else if(parts[i].indexOf(iwordIn) >= 0 || descriptions[i].indexOf(iwordIn) >= 0)

    ????? {

    ??????? if(nowNumWord < i5){?? nowNumWord = i;?? }??

    ????? }?

    ??? }

    ??? if(nowNumWord >= i5)

    ??? {

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l61\",\"text\":\"");

    ????????? Serial.print(years[nowNumWord]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l62\",\"text\":\"");

    ????????? Serial.print(months[nowNumWord]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l63\",\"text\":\"");

    ????????? Serial.print(days[nowNumWord]);

    ????????? Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"l64\",\"text\":\"");

    ????????? Serial.print(totalWord);

    ????????? Serial.println("\"}>ET");??????

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl61\",\"text\":\"");??

    ????????? Serial.print(locations[nowNumWord]);

    ????????? Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl62\",\"text\":\"");??

    ????????? Serial.print(equipments[nowNumWord]);

    ????????? Serial.println("\"}>ET");??

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl63\",\"text\":\"");??

    ????????? Serial.print(parts[nowNumWord]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl64\",\"text\":\"");??

    ????????? Serial.print(descriptions[nowNumWord]);

    ????????? Serial.println("\"}>ET");

    ????????? Serial.print("ST<{\"cmd_code\":\"set_text\",\"type\":\"label\",\"widget\":\"hl65\",\"text\":\"");??

    ????????? Serial.print(iwordIn);

    ????????? Serial.println("\"}>ET");???????

    ??? }???????

    ? }

    ??? //---time ++ ------

    ? ii = ii + 1;

    ? if(ii > 29){

    ??? time_1s = time_1s + 1;???

    ??? ii = 0;

    ??? if(iii == 0){

    ????????? digitalWrite(LED_blue, HIGH);?

    ????????? iii = 1;

    ??? }else{

    ????? iii = 0;

    ??????? digitalWrite(LED_blue, LOW);????

    ??? }

    ? }?

    ? if(time_1s >= 60){

    ??? time_1s = 0;

    ??? time_1m = time_1m + 1;

    ??? if(time_1m >= 60){

    ????? time_1m = 0;

    ????? time_1h = time_1h + 1;

    ??? }

    ? }

    ? delay(10);??

    }

    查詢說明:

    綜合查詢的包含關鍵字判斷使用了String對象的indexOf() 方法(一個字符串在另一個字符串中的位置!)

    語法:string.indexOf(val)
    ????????????? string.indexOf(val, from)

    參數:? string: ???? a variable of type String
    ???????????????????? val: ??????????? the value to search for -?char?or?String
    ????????????? from: ? the index to start the search from

    返回值:在其中的位置,否則返回 -1

    例:

    ? stringOne = "<HTML><HEAD><BODY>";

    ? int bodyTag = stringOne.indexOf("<BODY>");

    5.附錄:ASCII碼表

    圖(12?

    總結

    以上是生活随笔為你收集整理的使用STWI056WT-01串口屏的医疗笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。