int led_status = 0; void setup() { // put your setup code here, to run once: Serial.begin(115200); Serial1.begin(115200); Serial.println("Peek Terminal Starting..."); pinMode(LED_BUILTIN, OUTPUT); } #define HMIdataCount 10 int HMI_Handler() { if (Serial1.available() > 0) { int i; byte HMIdata[HMIdataCount]; Serial.print("0x "); while (Serial1.available() > 0) { delay(3); // must i++; // 接收一個字節加1 HMIdata[i] = Serial1.read(); //usart HMI屏發送最後三個數據將發送FF FF FF作為結束標誌 //最後三個數同時為255(0xFF)時跳出while循環,跳出循環後i會重新計數 if (HMIdata[i] == 255 && HMIdata[i - 1] == 255 && HMIdata[i - 2] == 255) { break; } // Serial.print(i); // Serial.print("= 0x"); Serial.print(HMIdata[i], HEX); Serial.print(" "); } Serial.println("FF"); // 串口HMI設備返回數據格式 switch (HMIdata[1]) { // 表格一:串口指令執行成功或失敗的通知格式 case 0x00: Serial.print("無效指令 "); break; case 0x01: Serial.print("指令成功執行 "); break; case 0x02: Serial.print("控制項ID無效 "); break; case 0x03: Serial.print("頁面ID無效 "); break; case 0x04: Serial.print("圖片ID無效 "); break; case 0x05: Serial.print("字形檔ID無效 "); break; case 0x11: Serial.print("串列傳輸速率設置無效 "); break; case 0x12: Serial.print("曲線控制項ID號或通道號無效 "); break; case 0x1A: Serial.print("變數名稱無效 "); break; case 0x1B: Serial.print("變數運算無效 "); break; case 0x1C: Serial.print("賦值操作失敗 "); break; case 0x1D: Serial.print("EEPROM操作失敗 "); break; case 0x1E: Serial.print("參數數量無效 "); break; case 0x1F: Serial.print("IO操作失敗 "); break; case 0x20: Serial.print("轉義字元使用錯誤 "); break; case 0x23: Serial.print("變數名稱太長 "); break; case 0x24: Serial.print("串口緩衝區溢位 "); break; // 表格二:其他資料返回格式 case 0x65: Serial.print("觸摸熱區事件返回 "); switch (HMIdata[2]) { case 0x01: Serial.print("頁面一 "); break; case 0x02: Serial.print("頁面二 "); break; case 0x03: Serial.print("頁面三 "); break; case 0x04: Serial.print("頁面四 "); break; case 0x05: Serial.print("頁面五 "); switch (HMIdata[3]) { case 0x01: Serial.print("button pressed "); if (Serial1.read()){ led_status = 1; } else { led_status = 0; } break; case 0x02: break; } break; case 0x66: Serial.println("當前頁面的ID號返回 "); break; case 0x67: Serial.println("觸摸座標資料返回 "); break; case 0x68: Serial.println("睡眠模式觸摸事件 "); break; case 0x70: Serial.print("字串變數資料返回 "); break; case 0x71: Serial.print("數值變數資料返回 "); break; case 0x86: Serial.println("設備自動進入睡眠模式 "); break; case 0x87: Serial.println("設備自動喚醒 "); break; case 0x88: Serial.println("系統啟動成功 "); break; case 0x89: Serial.println("開始SD卡升級 "); break; case 0xFD: Serial.println("透傳資料完成 "); break; case 0xFE: Serial.println("數據透傳就緒 "); break; case 0xFF: Serial.println("HMI進入休眠 "); break; default: Serial.println("未知的指令[1] "); break; } Serial.println(""); } } } int LED_Handler() { if (led_status == 1) { digitalWrite(LED_BUILTIN, HIGH); } else { digitalWrite(LED_BUILTIN, LOW); } } void loop() { // put your main code here, to run repeatedly: // if(Serial1.available()){ // //Serial.println("Something detected"); // // Serial.print(Serial1.read(),HEX); // Serial.print(" "); // } HMI_Handler(); LED_Handler(); }