Menu
CoddyTech

シリアル通信で点滅速度を設定する

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()が待機しているためです。

challenge icon

チャレンジ

中級

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);
}
quiz icon腕試し

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

入力のすべてのレッスン

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