search
LoginSignup
15

More than 5 years have passed since last update.

posted at

updated at

シリアルモニタからArduinoへ数値を送る方法

シリアルモニタから数値を送り、Arduinoに数値に応じた処理をさせたいときがあります。しかし、以下のコードを書き込んでもちっとも反応してくれません。

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

void loop() {
  byte var = Serial.read();

  switch (var) {
    case 1:
      //hoge(var);<-数値を送って何かをさせる処理
      Serial.println('1');
      break;
    case 2:
      //hoge(var);
      Serial.println('2');
      break;
    case 3:
      //hoge(var);
      Serial.println('3');
      break;
  }
}

理由はSerial通信が1Byteの文字コード(ASCIIコード)で行われているからで、ASCIIコード表を確認してみると、数字の『1』は10進数で『49』、16進数で『0x31』に対応していることがわかります。

数字自体は0x30から始まっているため、先ほどのコードに1行追加すると目的の動作をさせることができます。

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

void loop() {
  byte var = Serial.read();
  var = var - 0x30; // 追加の行

  switch (var) {
    case 1:
      //hoge(var);<-数値を送って何かをさせる処理
      Serial.println('1');
      break;
    case 2:
      //hoge(var);
      Serial.println('2');
      break;
    case 3:
      //hoge(var);
      Serial.println('3');
      break;
  }
}

単純にシリアルモニタからの数字入力で条件判断させたいのであれば、switch文のcaseを

case '1':
または
case 0x31:

とすることで文字としての『1』を認識させることができます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
15