Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

シリアルモニタから数値を送り、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』を認識させることができます。

hikoalpha
ハード&ソフト技術者。デザインにも力入れつつ。演出とディテール命。 ブログに移行しました。 https://hikoleaf.hatenablog.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした