LoginSignup
4
3

More than 3 years have passed since last update.

Arduinoで文字列を数値に変換

Last updated at Posted at 2016-06-19

1桁の数字の場合

Serial.read()で取得した数字を数値(整数)に変換するにはどうすれば良いでしょうか。
とりあえず1桁の数字であれば、下記のようなプログラムで数値に変換できます。
ただし、1桁の数字だけではなく、2桁以上の数字も1行のコードで数値に変換する方法があります。
次に紹介します。

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

void loop() {
  if(Serial.available()){
    // Serial.read()の戻り値はint型
    int var = Serial.read();
    int val = var - 0x30;
    if (val >= 0 && val < 9) {
      Serial.println(val);
    }
  }
}

toInt()を使う

toInt()を使うと、1行のコードで2桁以上の数字を数値に変換できます。
下記は、シリアルモニタから送信した数字をArduinoで受信し、その数字を2倍にしてシリアルモニタに送信するプログラムです。

/**
 * @file        qiita_02ba1b3214c9dcfc443d.ino
 * @brief       String to Int Function
 * @author      Keitetsu
 * @date        2021/02/13
 * @copyright   Copyright (c) 2021 Keitetsu
 * @par         License
 *              This software is released under the MIT License.
 */

/**
 * @brief       セットアップ関数
 */
void setup()
{
    Serial.begin(9600);
}

/**
 * @brief       ループ関数
 */
void loop()
{
    String line;   // 受信文字列
    int line_len;  // 受信文字列の長さ
    long num;      // 受信整数

    // シリアル通信で1行(改行コードまで)読み込む
    line = Serial.readStringUntil('\n');
    // 文字列の長さを取得する
    line_len = line.length();
    // 文字列の長さが1文字以上の場合
    if (line_len > 0) {
        // 文字列を整数に変換する
        num = line.toInt();
        // 整数を2倍にする
        num *= 2;
        // シリアル通信で2倍にした整数を送信する
        Serial.println(num);
    }
}

謝辞

本記事について、toInt()を扱う方法を@KeitetsuWorksさんにご教示いただきました。
本項目でお礼させてください

4
3
2

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
  3. You can use dark theme
What you can do with signing up
4
3