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 則留言:

  1. 在給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)

    回覆刪除
  2. 是Processing版本的問題,
    我改用1.5.1版就可以了.

    回覆刪除
  3. 我想讓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);
    }

    回覆刪除
  4. 在 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 秒鐘
    然後就可以決定一秒閃一下並改變顏色


    回覆刪除
  5. 我使用 processing 在將程式上傳到Android Device 時發生下列問題:

    Error from inside the Android tools. check the console.

    請問Cooper大大該如何解決.

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

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

    回覆刪除

注意:只有此網誌的成員可以留言。