Arduino1.0の変更点とか。

久しぶりにArduinoを触ったら1.0がリリースされていたのを忘れてた。。
ちょうどいい機会だから変更点とかをまとめておこうかと。

1.0は Arduino Software からダウンロードしてね。

【変更点】
・拡張子
  拡張子が .pde から .ino に変更。

・標準ライブラリ
 ・Serial周り
  Serial.print()などデータの送信はバックグラウンドで実施。
  Serial.flush():受信データを破棄する処理から、送信データがすべて送信されるまで待つ処理に変更。
  Serial.print(byteVal):数値を文字として送信
  byte型を数値のまま送信したい場合:Serial.write(byteVal) を使います。あわせてBYTEキーワードも廃止。
 
 ・ネットワーク周り
  ネットワークアクセス用の抽象クラスClient、Server、UDPを追加
  EthernetClient、EthernetServer、EthernetUDPはこれからのクラスを継承

 ・Arduino APIのヘッダ名変更
  WProgram.h → Arduino.h に変更。
  0022の開発環境で新しいライブラリを入れると「Arduino.hがないよ」って怒られる。
  次のようにARDUINOマクロをチェックするコードを入れることで
  Arduino 0022以前のIDEでもコンパイルを通すことは可能。
  [java]
  #if defined(ARDUINO) && ARDUINO >= 100
  #include “Arduino.h”
  #else
  #include “WProgram.h”
  #endif
  [/java]
  
  動く保証はないので1.0で作り直す方がいいのかな。
  
他にもいろいろあるけど自分がいろいろ作って遊んでいたところで関わりそうなのはこのへんなのかなと。
詳しい変更点は Release Notes を見てください。

Arduino Ethernet Shield + SDカード

Ethernet ShieldにくっついてるSDカードスロットが飾りのようになっていて寂しいので使ってみたよ。
書き込み用に開くファイルのファイル名には文字数制限があるみたい。ちょっとはまってしまっけど。。
8文字以内にしないとファイルオープンに失敗するから注意が必要。

【環境】
ArduinoIDE 0022 + Ethernet Library
(さらに…)

Arduino Ethernet Shield

書こう書こうと思ってほったらかしになってたので、
Arduino + Ethernet Shieldを情報をまとめておきます。

【環境】
ArduinoIDE 0022

とりあえずはTwitterから自分の投稿をゲットしてくる方法
XML解析は自分でお願いします。そんなに難しくないし、ライブラリもあるので。

#define SSR_PIN  9
#define MSG_LEN 140
byte mac[] = {  0x90, 0xA2, 0xDA, 0x00, 0x12, 0xDE };      // Ethernet ShieldのMACアドレス
byte server[] = { 199, 59, 148, 10 }; // www.twitter.com   // TwitterのグローバルIP
Client client(server, 80);

void setup()
{
  // 初期化
  pinMode(SSR_PIN, OUTPUT);
  digitalWrite(SSR_PIN, LOW);

  // start the Ethernet connection:
  EthernetDHCP.begin(mac);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
  delay(1000);
}

void loop()
{
  if( !client.connected() )
  {
    Serial.println("connecting...");

    // if you get a connection, report back via serial:
    if (client.connect()) {
      Serial.println("connected");
      // Make a HTTP request:
      client.println("GET /statuses/user_timeline/Twitterのアカウント名.xml HTTP/1.0");
      client.println();
    } 
    else {
      Serial.println("connection failed");
    }
  }

  delay(1000);

  // 取得した文字列を出力
  while( client.available() ){
    char c = client.read();
    Serial.print(c);      
  }

  Serial.println("disconnecting.");
  client.stop();

  // 60秒後に再接続
  Serial.println("waiting 60s.");
  delay(60000);
}