2012年8月3日金曜日

ArduinoとGR-SAKURA シリアル通信編

せっかくなので、ArduinoとGR-SAKURAボードの両方で遊んでみようと思います。まずは、手頃というか、何はなくともはじめに必要になるシリアル通信を試します。

/*GR-SAKURA Sketch Template Version: V1.00*/
#include <rxduino.h>

char c;

void setup()
{
    // シリアルポートを9600bpsで開始。
    Serial.begin(9600);
    // 受信バッファにデータが入るまで待機。
    while (Serial.available() == 0);        
    Serial.println("Hello, GR-SAKURA!");
    // 一旦、受信バッファにデータがあれば、
    if (Serial.available() > 0) {
        // 読み込んで、廃棄。
        c = Serial.read();
    }
}

void loop()
{
    // 受信バッファにデータがあれば、
    if (Serial.available() > 0) {
        // 読み込んで、
        c = Serial.read();
        // エコーバック。
        Serial.write(c);
        // 特定の文字の時だけ、メッセージ。
        switch (c) {
            case 'A':
                Serial.println();
                Serial.println("Hello!");
                break;
            case 'B':
                Serial.println();
                Serial.println("SAKURA");
                break;
            case 'C':
                Serial.println();
                for (int i = 0; i < 0x10; i++) {
                    Serial.print(i, HEX);
                }
                Serial.println();
                break;
            default:
                break;
        }
    }
}

 上記のようなソース(スケッチ)をGR-SAKURA用にWebコンパイラ上で作成、ビルドして、Webコンパイラからソースをコピペして、Arduino-IDE上に貼り付けて、ほぼそのまま(includeを変えるくらい)ビルドして、それぞれ、GR-SAKURAとArduino Unoに書き込んで実行しました。


 GR-SAKURAでは上のようにTeraTerm等での確認になりますが、下のArduinoと同じように動作しています。(ターミナルの改行の動作の設定が違っていたので、改行の状態が違っていますが。)


 だから、何?といわれると、別にどうということはないんですが。
 ちなみに通常のArduino(Unoも含めて)はシリアルポートは一つで、PCと接続・給電をかねたUSB端子に割当たっていますが、Arduino MegaだとSerialの他にSerial1,Serial2,Serial3のハードウェアシリアルが使えます。また、SoftwareSerial機能を使うと通常のGPIOピンにソフトウェア的(CPUの負荷を使って)にシリアル通信の機能を持たせることも可能です。
 一方のGR-SAKURAの方では、SerialはMega同様Serial,Serial1,Serial2,Serial3の4本を利用できるようです。ソフトウェアで任意のピンをシリアル通信させるようなライブラリは現状(2012年8月現在)はないようです。