Arduino 硬體配置圖
可變電阻有三支腳,兩側一支接 Arduino 的 +5v,一支接地,中間的則接在類比輸入的 pin 0 上。
Arduino 程式碼
Arduino 要做的事很簡單,就是將可變電阻的讀數 (0~1023) 往串列埠送就對了。不過,為了減少傳送資料的頻率,我讓它將前一次 pin 0 的值保留下來比對,如果和現在的值變化超過 2 時,才會送往 Serial port。另外,因為 Flash 在連線成功後會送資料給 socket server,因此,可以藉由這個機會,將現在的電阻值傳送給 Flash ,讓它將動畫做初始化的處理,轉到正確的角度。底下為程式碼:
#define potPin 0 //指定讀電阻值的腳位
int val = 0; //放電阻值的變數
int oldVal = 999; //放前一次電阻值的變數
void setup() {
Serial.begin(115200); //以 115200 的速度連串列埠
}
void loop() {
val = analogRead(potPin); //讀取電阻值(0-1023)
if(Serial.available() > 0) { //Flash 首次連線會送資料
Serial.read(); //將 Flash 傳來的資料讀走
Serial.println(val); //傳回目前的電阻值
oldVal = val;
}
if( abs(val - oldVal) > 2 ) { //如果和前一次差 2 以上才回傳
Serial.println(val); //傳回目前的電阻值
oldVal = val; //保留回傳過的
}
delay(150);
}
Flash 程式碼
Flash 的部份,只使用到一個影格來完成,主要是一個名為 circle 的元件,利用 XMLSocket 接收由 serproxy socket server 所得到的電阻值,並將它換算成 circel 旋轉時的角度。
程式碼如下:
if(server == undefined) {
server = '127.0.0.1';
}
if(port == undefined || isNaN(Number(port))) {
port = 5334;
} else {
port = Number(port);
}
isConnected = false;
socket = new XMLSocket()
socket.onConnect = function(success) {
if (success) {
statusTxt.text = "conneted";
isConnected = true;
} else {
statusTxt.text = "connet failed!";
isConnected = false;
}
}
socket.onData = function(src) {
statusTxt.text = "data : " + src;
circle._rotation = Number(src.substr(0,src.length-1))*-360/1023;
//trace("data : " + src);
}
socket.onClose = function() {
statusTxt.text = "disconneted";
isConnected = false;
}
infoTxt.text = "Server:" + server + " Port:" + port;
socket.connect(server, port);
stop();
轉換電阻大小的程式寫在「socket.onData」中的這行
- circle._rotation = Number(src.substr(0,src.length-1))*-360/1023;
由於在 Arduino 中傳回的值(src)會在尾巴加上換行字元,為了讓傳回的字串可以順利的轉為數字供運算,我先利用 substr 把最後一個字元截去,才用 Number 來轉換。
另外,為了讓電阻順時針轉動時,Flash 中的元件也是順時針轉動,角度轉換中,將原來的 「360 」度換成了「-360 」度。
檔案下載
相關文章
抱歉
回覆刪除照此方法
沒有找到data值
無法轉動??