シリアル通信で点滅速度を設定する
CoddyのArduinoジャーニー「入力」セクションの一部。レッスン 17/22。
250 と入力すると、ボードには '2'、'5'、'0' の3文字が届き、その後に改行が届きます。Serial.parseInt() は数字を読み取り、数値の250に変換します。数字以外の最初の文字で読み取りを停止します。
注意点があります。数字が届かない場合、parseInt() は最大1秒間数字を待ってから、0を返します。これは数字を入力するたびに起こります。数字の終わりを示す改行がまだ残っているため、Serial.available() は再び0より大きくなり、parseInt() は数字を見つけられず、1秒間待ってから0を返します。
そのため、0は「役に立つ値がない」とみなし、以前の値を保持します。
if (Serial.available() > 0) {
int n = Serial.parseInt();
if (n > 0) {
wait = n;
}
}数字を入力するたびに、LEDが1秒間停止するのがわかるでしょう。これはparseInt()が待機しているためです。
チャレンジ
中級13番ピンのLEDが点滅します。waitミリ秒間点灯し、waitミリ秒間消灯します。waitの初期値は500です。シリアルモニターで速度を変更します。
- 文字が受信待ちの場合、
Serial.parseInt()で数値を読み取ります - それが0より大きい場合、
waitに保存します
Runを押し、シリアルモニターから100を送信してから、Checkを押します。
自分で試してみよう
const int ledPin = 13;
int wait = 500;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// 文字が受信待ちの場合、数値を読み取り、0 より大きければ wait に格納する
digitalWrite(ledPin, HIGH);
delay(wait);
digitalWrite(ledPin, LOW);
delay(wait);
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
入力のすべてのレッスン
自分で練習してみよう: Arduinoプレイグラウンド