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さんにご教示いただきました。
本項目でお礼させてください