シリアル通信でサーボの角度を指定する
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() ではなく変数を渡すチャレンジ
中級シリアルモニターに入力した角度にサーボを動かします。
- 数値が届いたら、
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の範囲に収め、アームを動かして値を出力する。
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
出力のすべてのレッスン
自分で練習してみよう: Arduinoプレイグラウンド