2011年3月27日 星期日

Processing 溫度顯示器

image 晚上在 Hacker Highligts: Steven’s Temperature Display 這篇文章看到一個好玩的東西,Steven Dayton 根據 Jeremy Blum 做的 Arduino+I2C+Processing 溫度顯示器用 Processing 寫了一個很好看的溫度顯示器(如左圖)。

這讓我想起之前我曾用 Arduino 與 SHT15 溫溼度計製作了一個溫溼度記錄器(見「Arduino 筆記 - 製作一個溫溼度記錄器)」,於是動了一個念頭,想改良 Steven Dayton 的 Processing 溫度顯示器把它套用到我的溫溼度計。Processing 程式超簡單,我把 Steven Dayton 的程式下載回來後,只花不到 5 分鐘就定了,超快的!^o^

改良後的 Processing 溫度顯示器執行畫面如下:

 image
▲ Processing 溫度顯示器

Steven Dayton 原版程式會顯示攝氏跟華氏溫度,我把它改成只顯示攝氏溫度,至於溼度就略過不管了。

程式碼如下(完整的程式請點這裏下載,至於 Arduino 端的程式請點這裏下載):

 

延伸閱讀

8 意見:

芭蕉葉上聽雨聲 提到...

請問processing要如何顯示中文?

芭蕉葉上聽雨聲 提到...

在給Processing的Arduino Library已安裝妥當的情況下,我依照這網址 http://www.arduino.cc/playground/Interfacing/Processing
的程式:
import processing.serial.*;
import cc.arduino.*;

Arduino arduino;
int ledPin = 13;

void setup()
{
//println(Arduino.list());
arduino = new Arduino(this, Arduino.list()[0], 57600);
arduino.pinMode(ledPin, Arduino.OUTPUT);
}

void draw()
{
arduino.digitalWrite(ledPin, Arduino.HIGH);
delay(1000);
arduino.digitalWrite(ledPin, Arduino.LOW);
delay(1000);
}
執行processing, 但無法讓Arduino pin13上的LED燈閃爍, 請問該如何解決?
Processing訊息窗內出現的訊息如下:
Exception in thread "Animation Thread" java.lang.IllegalAccessError: tried to access class processing.core.PApplet$RegisteredMethods from class cc.arduino.Arduino$SerialProxy
at cc.arduino.Arduino$SerialProxy.(Arduino.java:119)
at cc.arduino.Arduino.(Arduino.java:168)
at sketch_121006a.setup(sketch_121006a.java:34)
at processing.core.PApplet.handleDraw(PApplet.java:2103)
at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:190)
at processing.core.PApplet.run(PApplet.java:2006)
at java.lang.Thread.run(Thread.java:662)

芭蕉葉上聽雨聲 提到...

是Processing版本的問題,
我改用1.5.1版就可以了.

芭蕉葉上聽雨聲 提到...

我想讓Processing裏的圖形也跟著LED閃爍而改變顏色,但我下列的程式無法達到這樣的效果, 請問該如何解決?
import processing.serial.*;
import cc.arduino.*;
Arduino arduino;
int ledPin = 13;

void setup()
{
size(200,200);
//println(Arduino.list());
arduino = new Arduino(this, Arduino.list()[0], 57600);
arduino.pinMode(ledPin, Arduino.OUTPUT);
}

void draw()
{
fill(204, 153, 0);
ellipse(100,100,30,30);
arduino.digitalWrite(ledPin, Arduino.HIGH);
delay(1000);
fill(125);
ellipse(100,100,30,30);
arduino.digitalWrite(ledPin, Arduino.LOW);
delay(1000);
}

coopermaa 提到...

在 draw() 裏呼叫 delay() 不是個好主意
我想在 Processing 裏要盡可能少用 delay(),不然畫面可能會女神卡卡

我還沒學 Processing 說... :)
不過,倒是可以提供幾個建議:

1. 就像 Blink without delay 的方法,利用 millis() 算經過的時間:
http://coopermaa2nd.blogspot.tw/2011/04/blink-without-delay.html

2. 試試這個網站包的 timer (功能還要加強,它沒有 repeat 功能,只有跑一次的功能)
http://www.learningprocessing.com/examples/chapter-10/example-10-5/

3. 利用 frameRate() 和 frameCount 變數
例如設定 frameRate(10) 讓 Processing 每秒 10 次 draw() function
接著在 draw() 裏判斷 frameCount 是否為 10 的倍數,是的話就代表時間已經過 1 秒鐘
然後就可以決定一秒閃一下並改變顏色


芭蕉葉上聽雨聲 提到...

我使用 processing 在將程式上傳到Android Device 時發生下列問題:

Error from inside the Android tools. check the console.

請問Cooper大大該如何解決.

coopermaa 提到...

processing 程式可以直接轉成 android app, 但是我還是沒試出來 :(
我一個朋友說在 ubuntu 上沒問題,我用的作業系統是 win xp, 不曉得不能跑是不是 os 的問題

coopermaa 提到...

processing 程式可以直接轉成 android app, 但是我還是沒試出來 :(
我一個朋友說在 ubuntu 上沒問題,我用的作業系統是 win xp, 不曉得不能跑是不是 os 的問題