2009年3月31日 星期二

小乖演講




目前在日本九州大學攻讀博士的小乖
在百忙之中答應到本課程的上課時間前來演講
請各位同學奔相走告
踴躍出席交流
時間: 4 月 7 日 星期二 下午 2:00
地點: RB 403

2009年3月25日 星期三

Mr. Arduino & Mrs. Processing - 03

這篇來說一下兩者之間溝通必要的程式碼


Processing:

import processing.serial.*; //要import serial的library

Serial port; //宣告一個叫做port的Serial
int i = 0;
float var;
void setup() {
size(255, 255);
frameRate(25);
port = new Serial(this, Serial.list()[1], 9600); //建立port這個元件,指定連接阜和連線速度
println(Serial.list()); //將連接阜的列表列出來
noStroke();
smooth();
}

void draw() {
background(8);
i++;
var = constrain(sin(radians(i)),0,1);
int light = (int)(1+254*var*var);
if (i==360) i=0;
fill(light);
ellipse(width/2, height/2, 50, 50);
port.write(light); //把light寫入port裡
}


Arduino:

int val;
int ledPin = 9;

void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600); //開始進行serial通訊,速度為9600
}

void loop() {
if (Serial.available()) val = Serial.read(); //如果serial裡有資料的話,就讀取給var
analogWrite(ledPin, val);
delay(40);
}


執行出來的效果就是像呼吸一樣的led
畫面上的圓圈也是一樣
有標記顏色的地方就是必要放的程式碼
Processing寫,Arduino讀



2009年3月24日 星期二

Mr. Arduino & Mrs. Processing - 02

這篇想簡單說一下Arduino和Processing程式碼的編寫方式


就最簡單的區分而言,可以把整段程式碼分成三部分
1. 最一開始的宣告
2. setup: 程式最一開始先被執行的區域,僅執行一次
3. loop(Arduino)或draw(Processing): 讓程式不斷重複執行的部分,可以指定每秒要跑幾次


先來一段簡單的Processing程式:

float cnt = 0; //宣告一個浮點變數叫cnt,且cnt為0

void setup() { //程式一開始執行一次的區域
size(500,500); //設定畫面的大小為寬500高500
background(0); //設定背景顏色為全黑(0)
rectMode(CENTER); //設定方形的模式為中心
} //結束setup的區域

void draw() { //程式會不斷重複執行的區域
background(0); //每次執行先讓畫面全黑重新畫
noStroke(); //設定不要框線
fill(255); //設定填色白色(255)
translate(width/2,height/2); //移動座標軸到畫面正中央
rotate(cnt); //然後將座標軸旋轉cnt的角度
rect(0,0,500,500); //在新的座標軸(0,0)的位置畫上邊長500的正方形
cnt += 0.03; //讓cnt在每次執行都累加一點數值來改變旋轉角度
} //結束draw的區域

這樣就是一個簡單的小程式
Arduino的語法也很類似,不過能用的指令相對不多也稍微不一樣


在Processing.org的Learning裡面有很多分門別類的簡單程式,介紹各種不同指令的用法
全部看過後就能夠大致瞭解Processing的語言要怎麼寫(有些看起來太複雜的可以先跳過)

我覺得學程式語言第一步就是要瞭解語言的結構
然後慢慢熟悉每個指令代表的意義,不懂可以查Reference
一邊學一些不同的結構寫法,例如for, while, if以及物件導向等等

Processing也有很多的Libraries
就像是為Photoshop增加外掛筆刷或濾鏡
這些Libraries也提供很多方便的工具來使用


下一篇再來寫基本的Arduino和Processing溝通方式~




Mr. Arduino & Mrs. Processing - 01

每天都放一點上來比較不會覺得趕
主要是說明Arduino和Processing互相溝通的方法
由於是第一篇就先從最基本的架構說起吧


Arduino和Processing之間有兩種方式可以互相傳遞訊息:

第一種是把叫Firmata的程式碼燒進Arduino裡,讓他固定去收發Processing的訊息
然後用Processing直接計算控制Arduino的行為
詳細的reference可以參考Arduino playground

第二種是Arduino和Processing都各自編寫程式碼,再透過Serial送給對方
兩者是分開處理各自的訊息再發送
這部分可以參考Arduino.SerialCommunicationProcessing.Serial的reference


我只有用過第二種方法,但就目前找到的資料來看應該第一種會比較方便做簡單的控制...
第二種則是方便接奇奇怪怪的硬體,畢竟硬體數據的處理還是在Arduino裡做比較好
例如之前有試過把wii手把接到Arduino,再用Processing做繪圖
那時寫進Arduino落落長的程式碼實在是無法想像怎麼用Proceesing的方式寫
總之,就直接學第二種方式吧
反正會第二種就一定能瞭解如何用第一種方式~


至於Arduino和Flash~
我只會寫Processing和很淺很淺的java,AS還在空白的狀態...
印象中大致的方法就是用個軟體建xml server,然後兩者互相透過那個server傳訊息吧
也許AS3.0的方法會有所不同也不一定,總之google關鍵字Arduino和Flash一定會找到的