本篇主要介紹如何由Arduino傳輸資料去Processing軟件,從而令Processing畫出來的動畫能與Arduino互動。
Arduino與Processing之間可以透過Serial串口溝通,以下為Arduino傳送資料到Processing和Processing傳至Arduino的基礎程式結構。
Arduino以文字格式傳送三個數值給Processing,Processing讀取後,再分別放入陣列之中,然後列印出來。

x1void setup(){2 Serial.begin(115200);3}4
5void loop(){6 int random_number_1 = random(0, 512);7 int random_number_2 = random(0, 512);8
9 Serial.print(random_number_1);10 Serial.print(',');11 Serial.println(random_number_2);12 delay(1000);13}xxxxxxxxxx301import processing.serial.*;2Serial myPort;3
4int x_position, y_position;5
6void setup() {7 size(512, 512);8 println(Serial.list());9 myPort = new Serial(this, Serial.list()[0], 115200);10 myPort.bufferUntil('\n');11}12
13void draw() {14 //此處為空15}16
17void serialEvent(Serial myPort){18 String myString = myPort.readStringUntil('\n');19 myString = trim(myString);20
21 int data[] = int(split(myString, ','));22
23 for (int i = 0; i < data.length; i++) {24 print(data[i] + " ");25 }26 println();27
28 x_position = data[0];29 y_position = data[1];30}上載完Arduino的程式後,開啟Arduino的serial監測器。確定Arduino每1秒鐘會出兩個數值,中間以逗號分隔(沒有空格)。
之後再運行Processing程式碼(運行前請先關閉Arduino的serial監測器,否則Processing會告訴你接口被佔用),一開始按run鍵時,通常會告訴你這句有錯:
xxxxxxxxxx11myPort = new Serial(this, Serial.list()[0], 115200);這句是告訴Processing,哪個serial串口是接Arduino的,Processing上面的println(Serial.list());會列出所有的串口,如果是window電腦的話,會列出COMxx, COMxx等,確定哪一個是Arduino(去Arduino IDE看看上傳的序列埠就知道)。例如Processing列出的是:COM3 COM8 COM9,而你確定COM9是Arduino,那就將Serial.list()[0]改為Serial.list()[2]。
xxxxxxxxxx141void serialEvent(Serial myPort){2 String myString = myPort.readStringUntil('\n');3 myString = trim(myString);4
5 int data[] = int(split(myString, ','));6
7 for (int i = 0; i < data.length; i++) {8 print(data[i] + " ");9 }10 println();11
12 x_position = data[0];13 y_position = data[1];14}整段SerialEvent函數中,每次Serial串口收到資訊就會運行,用一String字串去紀錄收到的字串,例如現在收到的是127,242。
int data[] = int(split(myString, ',')); : split是把剛才收到的字串以逗記分隔開,再分別放入data[ ]這個陣列,所以現在data[0]是127,data[1]是242。
xxxxxxxxxx41for (int i = 0; i < data.length; i++) {2 print(data[i] + " ");3 }4println();之後再把再個data[ ]列印出來。