透過序列通訊把Processing 與Arduino 連接起來

http://coopermaa2nd.blogspot.com/2011/03/processing-arduino.html


練習透過序列通訊把 Processing 與 Arduino 連接起來。使用可變電阻 (potentiometer) 來控制 Processing 畫面上的矩形的水平移動。

image

材料與接線
  • 麵包板 x 1
  • Arduino 板子 x 1
  • 可變電阻 x 1
  • 單心線 x N

接線很簡單,參考下圖,把可變電阻中間腳位接到類比輸入(Analog Input) pin 0,剩下的兩支腳位,一支接到 5V,另外一支接到 GND:

image

Arduino 程式
Arduino 程式(potentiometer.pde) 非常簡單,只是單純讀取接在 pin 0 上的可變電阻,並將讀值列印到 Serial Port 而已:
01/* Arduino 範例:
02 *   讀取接在 pin 0 上的可變電阻,並將讀值列印到 Serial Port
03 */
04 
05int potPin = 0; // 可變電阻接在 pin 0 上
06 
07void setup() {
08  // 開啟 Serial port, 通訊速率為 9600 bps
09  Serial.begin(9600);
10}
11 
12void 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 
06import processing.serial.*;
07 
08Serial serial; 
09int sensorValue;
10 
11void 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 
20void 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),然後你就會看到一個「背景為白色,視窗中有一個紅色的矩形」的視窗,如下:

image
▲ 旋轉可變電阻可以讓矩形水平移動

因為 Processing 程式裏有 println(sensorValue); 這一行指令,所以當你旋轉可變電阻時 Processing IDE 下方的狀態視窗也會即時顯示可變電阻的讀值:

image



留言