USART HMI軟件是用於設定Touch Screen內的介面,可以在官網下載最新的軟件版本。
在USART HMI介面中所有要觸發的物件請記得勾選"發送鍵值"一項,不然Arduino板會收不到按下/彈起的訊號
Arduino可以在不安裝library的情況下發送變數或更改Touch screen內的參數,以做到按下按鈕/切換頁面/更新數值等。下面是把b0按鈕上的文字更改成"Test"的例子:
void setup() {
Serial.begin(9600);
delay(2000);
}
void loop() {
Serial.print("b0.txt=");
Serial.print("\"");
Serial.print("Test");
Serial.print("\"");
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
delay(1500);
}
如果傳送指令的話可以直接用Serial.print("b0.txt=");
如果傳送文字部份的話要分3次用\"、文字內容、\"分別傳送,例如
Serial.print("\"");
Serial.print("Hot!");
Serial.print("\"");
每完成一段指令後要發3次0xff指令完成傳送:
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
如果是由Touch screen發送訊號到Arduino的話就需要用到相對的library了。可以在這裏下載:https://github.com/itead/ITEADLIB_Arduino_Nextion
*由於其library是預設給Mega板或其他有多組TXRX的板子使用,其預設輸出內容為Serial1/Serial2而不是平時的Serial、所以用的板為uno, nano等就要去下載了的zip檔內,找到"NexConfig.h"檔並把所有"#define nexSerial Serial1"或 "#define nexSerial Serial2"改成 "#define nexSerial Serial" 。"xxx.h"檔可選用notepad/wordpad開啓。
*如更改"NexConfig.h"檔前已在IDE安裝了zip檔的話,則去Documents\Arduino\libraries\ITEADLIB_Arduino_Nextion-master內找到"NexConfig.h"檔並更改,效果一樣。
以下為使用按鈕的例子:
int led_R = 11;
#include <Nextion.h>
NexButton b0 = NexButton(0, 2, "b0"); // Button added
NexButton b0_1 = NexButton(1, 2, "b0"); // Button added
NexTouch *nex_listen_list[] =
{ &b0, // Button added
&b0_1, // Button added
NULL // String terminated
}; // End of touch event list
void setup() {
Serial.begin(9600);
b0.attachPush(functionb0); // Button press
b0_1.attachPush(functionb1); // Button release
pinMode(led_R, OUTPUT);
} // End of setup
void functionb0(void *ptr) {digitalWrite(led_R, HIGH);}
void functionb1(void *ptr) {digitalWrite(led_R, LOW);}
void loop() {
nexLoop(nex_listen_list);
} // End of loop
要接收Touch screen發送的訊號我們需要設定一個變數儲存其狀態,其格式為:
<type of object> <new name> = <type of object>(<page id>, <object id>, "<object name>");
例子:
NexButton b4 = NexButton(0, 11, "b4"); // Button added
NexDSButton bt0 = NexDSButton(0, 8, "bt0"); // Dual state button added
NexText t5 = NexText(2, 12, "t5"); // Text box added, so we can read it
<type of object>對應物件的類型,如要接收按鈕(Button)的訊號就要用NexButton、要讀取文字方塊(Text box)的內容就要用NexText。
<new name>是自定義,在之後的指令做抬頭,例如定義b0_1,之後接收的指令就是b0_1.attachPush(XXX);
<object name>對應物件在USART HMI介面的名稱,例如按鈕預設是b0/b1...
<page id>, <object id>則分別對應物件在USART HMI介面內的位置
*通常<new name>照<object name>命名就可以了,但有不同page可能有同名的<object name>,故<new name>有時雖要另外改名,像
NexButton b0 = NexButton(0, 2, "b0"); //在page0的b0按鈕
NexButton b0_1 = NexButton(1, 2, "b0"); //在page1的b0按鈕
<type of object> 和<object name>的對應名稱可以參考下方表格:
下一步就是設定Arduino要隨時"監視"的列表,把上方提到的<new name>全部加個&列出就是了、並在最後加上NULL
NexTouch *nex_listen_list[] =
{ &b0, // Button added
&b0_1, // Button added
&page0, // Page added as a touch event
&page1, // Page added as a touch event
NULL // String terminated
}; // End of touch event list
*這部份在setup上面
再下一步就是在setup內設定當按鈕按下或放手時要執行的內容
按下時執行的格式:<new name>.attachPush(functionA);
放手時執行的格式: <new name>.attachPop(functionB);
例子:
b0.attachPush(functionb0); // Button press
b0_1.attachPop(functionb1); // Button release
而function的格式為:
void functionb0(void *ptr)
{
//放要執行的內容
}
在loop的部份則只要放這句不段"監視"Touch Screen的變化
nexLoop(nex_listen_list); // Check for any touch event