【教學】Arduino首次接觸就上手_ep7 Processing 讀取聲音感測器與控制圖片
本篇要示範如何讀取 Arduino 首次接觸就上手套件的類比聲音感測器,並控制 Processing 畫面上的風車圖片轉動速度。本範例一樣讓 Arduino 透過 Serial.write()
語法逐個發送資料。這樣的作法雖然較為複雜,但允許使用者加入更多自定義的效果,詳細說明請回顧先前的文章喔!
請開啟 Arduino IDE (自行下載或使用 HangeekDuino 下的 Arduino 1.8.5),新增一個專案並填入以下內容或直接使用範例。請注意 Arduino首次接觸就上手套件的聲音感測器是接在 A2 腳位。聲音感測器基本教學請點我。
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorVoice=analogRead(A2); //讀取腳位A2(聲音感測器)
if(sensorVoice>500){ //數值500以下視為白噪音
Serial.write("blow");
delay(10);
}
delay(10);
}
Processing 程式範例 - 接收 Arduino 發送的聲音測器資料來控制風車圖片轉動
新增一個 Processing 專案,並輸入以下程式碼,請注意要在 .pde 相同路徑下放入 windmill.png 圖檔,否則將無法執行,請務必注意喔。在此會用到 Processing 的 PImage 來處理圖片旋轉。請參考其文件來看看還有哪些有趣的效果。
確認 Arduino 首次接觸就上手套件已正確燒錄以上 .ino 檔。輸入完成直接執行以下 pde,會看到以下執行畫面。用嘴巴對著聲音感測器吹氣或拍手發出較大的聲響,小風車轉動的速度也會隨之變化。這些效果都可以自由在 Processing 中調整。由於環境中一定有背景噪音,所以程式只要一啟動風車就會開始轉動。
import processing.serial.*;
Serial myPort;
String str;
String blow="blow";
public float angle=0.0;
public float speed=0.0;
PImage img;
void setup()
{
size(800,600);
img = loadImage("./windmill.png");
frameRate(100);
smooth();
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
}
void draw(){
background(51);
rect(390,300,20,500);
translate(400,300);
rotate(angle);
angle=0.05+speed+angle;
println(speed);
imageMode(CENTER);
image(img, 0, 0);
//arc(-100,-100,200,200, 1, PI+QUARTER_PI, CLOSE);
if(myPort.available()>0){
str=myPort.readString();
if(str!=""){
println(str);
if(str!=blow){
speed+=0.3;
}
}
}
else{
speed=0;
}
}