Menu
CoddyTech

シリアル通信でサーボの角度を指定する

CoddyのArduinoジャーニー「出力」セクションの一部。レッスン 23/24。

アームはシリアルモニターからの指示も受け付けます。角度を入力して Enter キーを押すと、Serial.parseInt()が数値を読み取ります:

if (Serial.available() > 0) {
  int angle = Serial.parseInt();
  Serial.read();  // 数字の後の改行文字
  // angleを使用する
}

数値の後の改行文字は残ったままです。次にloop()が実行されると、parseInt()は数字を見つけられず、1秒待ってから0を返します。点滅速度の場合はその0を無視しても問題ありませんでしたが、0は実際の角度です。そこで、数値を読み取った直後にSerial.read()を1回呼び出して、改行文字を読み取ります。

角度ではない数値を入力する人もいるかもしれません。arm.write()は544以上の数値をマイクロ秒単位のパルス幅として読み取るため、1000を指定するとアームは約45度の位置になります。まずconstrain()で角度を0から180の範囲に収めます:

angle = constrain(angle, 0, 180);  // parseInt() ではなく変数を渡す
challenge icon

チャレンジ

中級

シリアルモニターに入力した角度にサーボを動かします。

  • 数値が届いたら、Serial.parseInt()で読み取り、次に改行文字を読み取って取り除きます(0も角度です)
  • constrain()を使って、値を0から180の範囲内に保ちます
  • アームを動かし、角度をAngle: 45のように出力します

Runを押し、シリアルモニターから45を送信してから、Checkを押します。

自分で試してみよう

#include <Servo.h>

Servo arm;

void setup() {
  arm.attach(9);
  arm.write(90);
  Serial.begin(9600);
}

void loop() {
  // 数値が届いたら、それを読み取り、改行文字も読み捨てる。
  // その値を0から180の範囲に収め、アームを動かして値を出力する。
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

出力のすべてのレッスン

自分で練習してみよう: Arduinoプレイグラウンド