Registra note di chirurgia medica con STONE Schermo LCD seriale

Il progetto Record Medical Surgery Notes si basa inizialmente su un'applet di sviluppo cloud WeChat privata per i chirurghi.

Tencent fornisce 5 GB di spazio di archiviazione cloud gratuito per le applet di sviluppo cloud di WeChat, sufficienti per le esigenze degli account personali dell'utente medio, e l'archiviazione su cloud ha di nuovo la caratteristica di un facile accesso sempre e ovunque, purché ci sia wifi e traffico, prendi il telefono, apri WeChat, puoi chiamare la tua applet per accedere, interrogare e contare i tuoi dati privati.

Attraverso la funzione di interrogazione del periodo di tempo fornita nell'applet, è possibile interrogare facilmente e rapidamente il numero di interventi chirurgici in un determinato anno o mese. Attraverso la completa funzione di interrogazione e statistica dell'applet, è possibile inserire diverse "parole chiave" per contare il numero di interventi chirurgici in un determinato ospedale, una determinata parte del stone, una certa tecnica di trattamento del stonee altre descrizioni specifiche.

In sala operatoria, saremmo più adatti ad utilizzare il STONE schermo LCD seriale touch, che fornisce un'interfaccia di controllo e visualizzazione più sicura e affidabile per i dispositivi medici. Registra note di chirurgia medica

Se vogliamo inserire questi contenuti chirurgici in sala operatoria, il modello e i parametri dell'attrezzatura chirurgica sono sicuramente più facili da ottenere, anche dal sistema attraverso la condivisione, più accurati, e salvare la voce secondaria, ovviamente una tale funzione ha bisogno da pianificare nella pre-attrezzatura, qui mostro questa funzione dell'applet di WeChat attraverso il STONE schermo LCD seriale (nessun database e archiviazione cloud coinvolti).

I lettori interessati possono anche ulteriormente attraverso l'accoppiamento Bluetooth, per ottenere la condivisione dei dati del sistema e del telefono cellulare, per completare l'archiviazione cloud dei dati locali e il download dei dati cloud nel locale, tramite il Bluetooth possono anche ottenere il telefono cellulare per STONE controllo seriale dello schermo LCD e schermo al telefono cellulare fine del feedback, ecc.

L'applet WeChat si basa su JavaScript e il STONE il progetto dello schermo LCD seriale si basa su un ambiente Arduino ESP32.

STONE il record dell'elemento della nota di chirurgia del medico dell'interfaccia verrà ampliato come segue.

DESCRIZIONE

  • Istruzioni per la creazione di HMI e controllo
  • Scarica interfaccia
  • Connessione hardware e test dei comandi
  • codice di debug
  • Appendice: Tabella dei codici ASCII

1,serial LCD schermo Istruzioni per la creazione di HMI e controllo

Come mostrato nella Figura (2), è possibile accedere all'accensione tramite diversi pulsanti per la registrazione dell'intervento chirurgico - Figura (3), query del periodo di tempo - Figura (5) e funzione di query completa - Figura (7) rispettivamente.

Come in Figura (3), l'interfaccia del record dell'intervento seleziona prima l'ora dell'intervento: anno, mese e giorno attraverso il controllo text_selector seleziona il sito dell'intervento, quindi inserisce l'ubicazione dell'intervento, l'attrezzatura chiave utilizzata per l'intervento e la descrizione dell'intervento tramite il controllo di modifica e al termine, viene visualizzata l'interfaccia di successo del record come in Figura (4).

Registrare le note sulla procedura medica con STONE schermo LCD seriale

Figura (2) Interfaccia della funzione di accensione

Registrare le note sulla procedura medica con STONE schermo LCD seriale

Figura (3) Interfaccia del record di chirurgia

Fare clic sul pulsante Indietro nella schermata in Figura (4) per tornare alla schermata delle funzioni in Figura (2). Se selezioni la query del periodo di tempo, entrerai nell'interfaccia della Figura (5), anche qui puoi selezionare l'anno, il mese e il giorno della data di inizio e di fine della query tramite il controllo text_selector, quindi fare clic su pulsante rosso per accedere alla visualizzazione dei risultati della query nella Figura (6).

Registrare le note sulla procedura medica con STONE schermo LCD seriale

Figura (4) Schermata di successo della registrazione

Registrare le note sulla procedura medica con STONE schermo LCD seriale

Figura (5) Schermata di query del periodo di tempo

La figura (6) mostrerà quante procedure sono state registrate in totale per il periodo di tempo specificato e mostrerà il contenuto della prima procedura registrata al centro dello schermo, facendo clic sul pulsante Avanti verranno mostrati i contenuti della seconda e della terza in giro. Questi contenuti vengono visualizzati attraverso la tabella di controllo ESP32 con il STONE comunicazione seriale dello schermo LCD passata al controllo dell'etichetta, controllo di scorrimento HScroll_label. L'anno, il mese, il giorno e un numero totale di procedure sono tutti controlli dell'etichetta e gli altri sono controlli HScroll_label che scorrono per mostrare più contenuto. Fare clic sul pulsante Indietro per tornare alla schermata delle funzioni in Figura (2). Se si seleziona la funzione di query completa nella figura (2), si passa all'interfaccia nella figura (7).

Registrare le note sulla procedura medica con STONE schermo LCD seriale

Figura (6) Schermata dei risultati della query del periodo di tempo

Registrare le note sulla procedura medica con STONE schermo LCD seriale

Figura (7) Interfaccia della funzione di query integrata

Nella figura (7) la parola chiave immessa viene ricevuta tramite modifica, fare clic sul pulsante di lettura per accedere alla schermata dei risultati nella figura (8) e fare clic sul pulsante Indietro per tornare alla figura (2).

Nella Figura (8), simile alla Figura (6), viene visualizzato il numero totale di interventi chirurgici corrispondenti alla parola chiave, insieme al pulsante Avanti per visualizzare il contenuto di tutti gli interventi chirurgici. Il pulsante Indietro viene utilizzato anche per tornare alla Figura (2).

I nomi e le gamme di comandi e contenuti delle varie interfacce sopra menzionate che sono coinvolte nelle esigenze di programmazione sono visualizzati insieme in modo unificato per un facile accesso durante la programmazione.

Registrare le note sulla procedura medica con STONE schermo LCD seriale

Figura (8) Schermata dei risultati della query integrata

Nome del controllo di programmazione.

Schermata di registrazione dell'intervento salva un pulsante: nome = b12

I contenuti della cartella chirurgica text_selector, nome sono: anno = ts11, mese = ts12, giorno = ts13, parte = ts14

Di cui.

ts11 (2000 – 2099), ts12 (1 – 12) mesi, ts13 (1 – 31) giorni.

ts14 (1:renale sinistro;2:renale destro;3:ureterale sinistro;4:ureterale destro;5:vescica;6:uretrale;7:altri;)

La modifica del contenuto della cartella chirurgica, il nome è.

Posizione = e11, Equipaggiamento = e12, Descrizione = e13

Pulsante di lettura della query sul periodo di tempo dell'intervento chirurgico: nome = b32

Data di inizio: anno = ts31, mese = ts32, giorno = ts33

Data di fine: anno = ts34, mese = ts35, giorno = ts36

Ambito come sopra.

Risultato della query del periodo di tempo Pulsante successivo: nome = b42

Labal mostra i nomi come.

anno = l41, mese = l42, giorno = l43, totale = l44

Hscroll rispettivamente il nome visualizzato dell'etichetta.

Ubicazione = hl41, attrezzatura = hl42, parte = hl43, descrizione = hl44, durante = hl45

Pulsante di lettura parola chiave: nome = b52, modifica nome = e51

Risultato query parola chiave Pulsante successivo: nome = b62

Labal mostra i nomi come.

anno = l61, mese = l62, giorno = l63, totale = l64

Hscroll rispettivamente il nome visualizzato dell'etichetta.

Ubicazione = hl61, attrezzatura = hl62, parte = hl63, descrizione = hl64, durante = hl65

2,Scarica interfaccia

Fare riferimento al metodo B del progetto Charging Post per scaricare correttamente l'interfaccia.

3. Connessione hardware e test dei comandi

Registrare le note sulla procedura medica con STONE schermo LCD seriale

Figura (9) Diagramma di collegamento del ponticello della scheda dell'adattatore per il test del comando dell'assistente seriale V1.2

La nuova versione di STONE il software viene continuamente aggiornato e migliorato e alcune funzioni risultano diverse dal manuale durante l'uso, quindi è necessario verificare i comandi da utilizzare prima della programmazione. Collegare secondo la Figura (9) e controllare il feedback da STONE e verificare la validità dei comandi tramite l'assistente seriale.

I controlli coinvolti in questo progetto sono il pulsante, l'etichetta, HScroll_Label, modifica e text_selector per un totale di cinque, li testiamo e verifichiamo uno per uno di seguito.

pulsante relativo:

Il valore-chiave del pulsante 0x1001 è stato inviato attivamente

Valore-chiave (ultimo byte della sezione dati):

0x01 premere il pulsante premuto

0x02 rilascio pulsante premere su (evento clic trigger pulsante completo)

Esempio:

Il pulsante di salvataggio della schermata della registrazione chirurgica (nome = b12 ) viene premuto per emettere attivamente il comando.

ST0x10 0x01 0x00 0x04 b12 0x01> ET

L'assistente seriale restituisce dati esadecimali: Verifica OK

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

Rilascio del pulsante (completare l'azione del clic del pulsante) Comando attivo

ST0x10 0x01 0x00 0x04 b12 0x02> ET

L'assistente seriale restituisce dati esadecimali: Verifica OK

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

Nota: Pulsante b12 (codice ASCII 0x62 0x31 0x32).

Correlati all'etichetta:

set_text Imposta il testo visualizzato dall'etichetta

Esempio:

Imposta testo: (numero totale di query di parole chiave nome = l64)

ST<{“cmd_code”: “set_text”, “type”: “label”, “widget”: “l64”, “text”: “520”}>ET Verifica che lo schermo superiore sia OK

hscroll_label correlato:

set_text Imposta il testo visualizzato da hscroll_label

Esempio:

Imposta il testo:

ST<{“cmd_code”: “set_text”, “type”: “hscroll_label”, “widget”: “hl61”, “text”: “ShenZhen”}>E NG

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

Nota: NG è il formato del comando fornito nel manuale, OK è il formato del comando che ho usato per provare con successo a entrare sullo schermo da solo! Questo è il grande risultato della verifica! Registra note di chirurgia medica

modifica correlata:

get_text Ottieni il contenuto visualizzato tramite modifica

0x1070 modifica la pubblicazione di testo (l'invio attivo-passivo può essere attivo dopo la modifica delle modifiche ai dati o attivo utilizzando get_text)

Testo: “nome del controllo”: contenuto del testo La lunghezza dei dati non può superare i 1024 byte (contenuto del testo dopo il segno :)

Esempio:

Ottieni testo: (modifica il nome del controllo = e11 nella posizione del record dell'intervento)

ST<{“cmd_code”: “get_text”, “type”: “edit”, “widget”: “e11”}>E

L'assistente seriale restituisce i dati esadecimali come segue.

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

Modifica i dati di testo per inviare il comando: Verifica OK

ST< 0x10 0x70 0x00 0x0C “e11”: abcdef >ET e11 dati di testo:abcdef

selettore di testo relativo:

get_text Ottiene il testo corrente del selettore di testo

get_value Ottiene il valore corrente del selettore di testo

get_selected Ottieni il numero di serie dell'articolo selezionato corrente del selettore di testo (ottiene il numero di serie dell'articolo correntemente selezionato)

0x1080 text selector text downlink (l'MCU inviato passivamente usa get_text per recuperare attivamente)

0x1081 invio del valore del selettore di testo (int type Invio attivo/passivo: MCU usa il comando get_value per ottenere)

0x1082 viene inviato il numero di serie del selettore di testo (tipo int Passivo: MCU usa il comando get_selected per ottenerlo)

Formato dei dati:

testo testo: “nome del controllo”:contenuto del testo Lunghezza non superiore a 1024 byte (contenuto del testo dopo il nome del controllo:numero)

valore valore: gli ultimi quattro byte della sezione dati

valore indice: gli ultimi quattro byte della sezione dati

Esempio 1: (Il nome del controllo del sito = ts14 per il record della procedura, attualmente "1:renale sinistro;" con un numero di serie pari a 0)

Ottieni il testo corrente del selettore di testo t14:

ST<{“cmd_code”: “get_text”, “type”: “text_selector”, “widget”: “ts14”}>E

I dati esadecimali di feedback dell'assistente seriale sono.

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

Le istruzioni inviate sullo schermo sono.

ST 0x10 0x80 0x00 0x11 “ts14”:renale sinistro >ET ts14 dati di testo: renale sinistro OK

Ottiene il valore corrente del selettore di testo t14:

ST<{“cmd_code”: “get_value”, “type”: “text_selector”, “widget”: “ts14”}>E

I dati esadecimali di feedback dell'assistente seriale sono.

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

Le istruzioni inviate sullo schermo sono.

ST0x10 0x81 0x00 0x08 ts14 0x00 0x00 0x00 0x00 0x01 >ET ts14 dati valore attuale:1

Ottiene il numero di serie corrente del selettore di testo t14:

ST<{“cmd_code”: “get_selected”, “type”: “text_selector”, “widget”: “ts14”}>E

I dati esadecimali del feedback dell'assistente seriale sono: (ts14 è "1:renale sinistro;" con il numero di serie 0)

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

Le istruzioni inviate sullo schermo sono.

ST0x10 0x82 0x00 0x08 ts14 0x00 0x00 0x00 0x00 0x00 0x00 >ET ts14 numero di serie attuale:0

Nota: le opzioni per ts14 sono.

1:renale sinistro;2:renale destro;3:ureterale sinistro;4:ureterale destro;5:vescica;6:uretrale;7:altri;

*** Questo usa get_value per ottenere il numero nel formato; e get_selected per ottenere il numero di serie dell'articolo attualmente selezionato (che inizia da 0).

Esempio 2: (controllo anno per nome del record di chirurgia = ts11, opzioni: 2000-2099, attuale: 2022)

Ottieni il testo corrente del selettore di testo t11:

ST<{“cmd_code”: “get_text”, “type”: “text_selector”, “widget”: “ts11”}>E

I dati esadecimali del feedback dell'assistente seriale sono: (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

Le istruzioni inviate sullo schermo sono.

ST 0x10 0x80 0x00 0x0B “ts11”:2022 >ET ts11 testo attuale: 2022 OK

Ottiene il valore corrente del selettore di testo t11:

ST<{“cmd_code”: “get_value”, “type”: “text_selector”, “widget”: “ts11”}>E

I dati esadecimali di feedback dell'assistente seriale sono.

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

Le istruzioni inviate sullo schermo sono.

ST0x10 0x81 0x00 0x08 ts11 0x00 0x00 0x07 0xE6 >ET Valore attuale di ts11:2022 = 7E6

Ottieni il numero di serie corrente del selettore di testo t11:

ST<{“cmd_code”: “get_selected”, “type”: “text_selector”, “widget”: “ts11”}>E

I dati esadecimali del feedback dell'assistente seriale sono: (0x16 = 22)

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

Le istruzioni inviate sullo schermo sono.

ST0x10 0x82 0x00 0x08 ts11 0x00 0x00 0x00 0x00 0x16 >ET ts11 numero di serie attuale: 0x16 = 22

Dopo aver testato il comando precedente, il passaggio successivo consiste nel programmare con sicurezza le funzioni di registrazione, query e statistiche del chirurgo. Naturalmente, la prima cosa è ancora la connessione hardware. Stiamo utilizzando la scheda di sviluppo ESP32 per implementare la comunicazione con il STONE schermo seriale.

Come in Figura (10), è richiesta la scheda di sviluppo NodeMCU-32S TX0, RX0 e GND e STONE collegamento corrispondente alla scheda dell'adattatore dello schermo, vedere la Figura (11), per completare l'interazione con le informazioni HMI. STONE l'interfaccia dello schermo è di 232 segnali, attraverso la scheda adattatore V1.2 nell'interfaccia MCU è necessario TX, segnali RX, al fine di livellare la partita. La figura (11) mostra la scheda NodeMCU-32S a sinistra, i fili blu (TX0) e rosso (RX0) sono collegati alla posizione del ponticello della scheda adattatore V1.2 (accanto al ponticello blu rimosso) e il nero è collegato a GND.

Registrare le note sulla procedura medica con STONE schermo LCD seriale

Figura (10) Diagramma di posizione TX0 e RX0 della scheda di sviluppo NodeMCU-32S

Registrare le note sulla procedura medica con STONE schermo LCD seriale

Figura (11) Schema di collegamento della scheda di sviluppo NodeMCU-32S e della scheda adattatore V1.2

4、Codice di debug

Per ragioni di spazio, questo progetto si concentra sulla decodifica dei pulsanti e sulla programmazione di query e statistiche. Per quanto riguarda l'immissione di record o la condivisione dei dati prima della pianificazione del sistema o l'importazione di Bluetooth per telefoni cellulari, i dettagli della decodifica non verranno eseguiti qui. Il codice del programma sotto la raccolta è stato verificato e fare riferimento al video per gli effetti operativi. Registra note di chirurgia medica

/*
  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;
    
  // Read the information sent by the serial port and simply decode it:  
  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);   
}
Query Description.
The combined query's include keyword determines the use of the String object's indexOf() method (the position of a string within another string!)
Syntax: string.indexOf(val)
 string.indexOf(val, from)
Parameters: string:  A variable of type String
 val:  the value to search for - char or String
 from:  the index to start the search from
Return value: the position in which, otherwise -1
Example:
  stringOne = "<HTML><HEAD><BODY>";
  int bodyTag = stringOne.indexOf("<BODY>");

Registra note di chirurgia medica:

In caso di problemi durante lo sviluppo, lasciare un messaggio nel nostro forum per la consultazione

https://forum.stoneitech.com/

Carrello
Scorrere fino a Top