Arduinoでシリアル通信の送受信

Arduinoでシリアル通信

設定

設定はsetupでbeginを呼ぶだけ。最低限必要なパラメータは通信速度。

void setup()
{
    Serial.begin(9600);
}

9600bspはちょっと遅いけど定番。
マイコンが16MHzなら38400くらいが早くて安定しています。

送信

Serial.println(内容)が基本形。print/writeなどもある。以下が詳細

int value = analogRead(0);
Serial.println("message") //「message」+改行コードが付く。最もベーシックな形
Serial.print("message") // 改行したくない場合はこう

Serial.println(value); //intのような数値も変換して送ってくれる
Serial.write(value); //バイナリで1バイトとして送る時はこれ

受信

1文字ずつ読んで何かを実行するのなら、以下の通りで簡単に処理が可能。これでも一応、アルファベットの大文字小文字で50通り以上のパターンが作れる。

void loop()
{
    while (Serial.available())
    {
        byte data = Serial.read();
        if (data == 'H') digitalWrite(13, HIGH);
        if (data == 'L') digitalWrite(13, LOW);
    }
}

もう少しパラメータを与えたいなどの場合は、文字をある程度スタックして処理する必要がある。

String recv;
void loop()
{
    while (Serial.available())
    {
        char data = Serial.read();
        if (data == '\n')//改行コード
        {
            if (recv.substring(0, 1) == "A")
            {
                analogWrite(9, recv.substring(1).toInt());
            }
            if (recv.substring(0, 1) == "B")
            {
                analogWrite(10, recv.substring(1).toInt());
            }
        }
        else
        {
            recv += data;
        }
    }
}

こうすると”A128”や"A0"で9番ピンを、”B50"や"B256"と送る事で9番ピンと10番ピンから好きな値でPWM出力を指示することができ、デバッグや微調整がやりやすくなる。(改行コードを最後に入れるべし)