http://coopermaa2nd.blogspot.com/2011/03/processing-arduino.html
練習透過序列通訊把 Processing 與 Arduino 連接起來。使用可變電阻 (potentiometer) 來控制 Processing 畫面上的矩形的水平移動。

練習透過序列通訊把 Processing 與 Arduino 連接起來。使用可變電阻 (potentiometer) 來控制 Processing 畫面上的矩形的水平移動。
材料與接線
- 麵包板 x 1
- Arduino 板子 x 1
- 可變電阻 x 1
- 單心線 x N
接線很簡單,參考下圖,把可變電阻中間腳位接到類比輸入(Analog Input) pin 0,剩下的兩支腳位,一支接到 5V,另外一支接到 GND:
Arduino 程式
Arduino 程式(potentiometer.pde) 非常簡單,只是單純讀取接在 pin 0 上的可變電阻,並將讀值列印到 Serial Port 而已:
01 | /* Arduino 範例: |
02 | * 讀取接在 pin 0 上的可變電阻,並將讀值列印到 Serial Port |
03 | */ |
04 |
05 | int potPin = 0; // 可變電阻接在 pin 0 上 |
06 |
07 | void setup() { |
08 | // 開啟 Serial port, 通訊速率為 9600 bps |
09 | Serial.begin(9600); |
10 | } |
11 |
12 | void loop() { |
13 | // 讀取可變電阻 |
14 | int sensorValue = analogRead(potPin); |
15 | |
16 | // 將讀值列印到 Serial Port, 以位元組(Byte)的格式寫出 |
17 | // 讀值除以 4, 把 0-1023 的數值按比例縮放為 0-255 之間的數值 |
18 | Serial.write(sensorValue/4); |
19 | |
20 | delay(100); |
21 | } |
有件事要注意,因為 L9 這行把 Serial port 通訊速度設成 9600 bps,所以你 Processing 端的程式在開啟 Serial port 時,記得也要把通訊速率設成 9600 bps,這樣 Arduino 跟 Processing 兩邊才能溝通。
Processing 程式
Processing 程式如下(Rect_Serial.pde),程式的邏輯是讀取從 Serial Port 傳進來的 Sensor 讀值,然後利用 Sensor 的讀值控制矩形的水平移動:
01 | /* Processing 範例: |
02 | * 讀取從 Serial Port 傳進來的 Sensor 讀值 |
03 | * 利用 Sensor 讀值移動矩形 (Rectangle) |
04 | */ |
05 |
06 | import processing.serial.*; |
07 |
08 | Serial serial; |
09 | int sensorValue; |
10 |
11 | void setup() { |
12 | // 設定畫布大小為 305 x 200 |
13 | size(305, 200); |
14 | |
15 | // 開啟 Serial port,通訊速率為 9600 bps |
16 | // 注意! 如果你 Arduino 不是接在 COM4,請做適當調整 |
17 | serial = new Serial( this , "COM4" , 9600); |
18 | } |
19 |
20 | void draw() { |
21 | if ( serial.available() > 0) { |
22 | // 讀取從 Serial Port 傳進來的 Sensor 讀值 |
23 | sensorValue = serial.read(); |
24 | println(sensorValue); |
25 | |
26 | // 在 (x, y) 座標為 (sensorValue, 80) 的位置畫一個 50x50 的矩形 |
27 | background(255); // 白色背景 |
28 | fill(255,0,0); // 填滿顏色為紅色 |
29 | rect(sensorValue, 80, 50, 50); |
30 | } |
31 | } |
可變電阻的讀值會存放在 sensorValue 裏。rect(sensorValue, 80, 50, 50); 這一行會在 (x, y) 座標為 (sensorValue, 80) 的位置畫出一個 50 x 50 的矩形。因為是水平移動,所以我們把 sensorValue 當作是 x 軸的位置變數,而 y 軸固定在 80 的位置。
範例照片/影片
先把 Arduino 程式(potentiometer.pde) 上傳到 Arduino 板子上,接著執行 Processing 程式(Rect_Serial.pde),然後你就會看到一個「背景為白色,視窗中有一個紅色的矩形」的視窗,如下:
▲ 旋轉可變電阻可以讓矩形水平移動
因為 Processing 程式裏有 println(sensorValue); 這一行指令,所以當你旋轉可變電阻時 Processing IDE 下方的狀態視窗也會即時顯示可變電阻的讀值:
留言
張貼留言