Arduinoのサンプルプログラム

Arduino-Math関数(数学関数)の使い方

当記事では、ArduinoのMath関数(数学関数)の使い方について詳しく解説します。

Math関数を使うことによって、数値の比較、絶対値、べき乗、平方根などの計算をすることができます。

なお、その他のArduino関数・ライブラリについては、以下の記事をご覧ください。

Math関数(数学関数)

関数 引数 戻り値 説明
min(x, y) x:1つ目の数値
y:2つ目の数値
2つの数値を比べて小さい数値を返す 2つの数値を比べて小さい数値を算出
max(x, y) x:1つ目の数値
y:2つ目の数値
2つの数値を比べて大きい数値を返す 2つの数値を比べて大きい数値を算出
abs(x) x:数値 絶対値を返す 絶対値を計算
constrain(x, a, b) x:対象の数値
a:範囲の最小値
b:範囲の最大値
範囲内の値を返す 対象の数値が範囲内であれば、そのまま算出
範囲外であれば範囲の最小値または最大値で算出
long map(long value, long fromLow, long fromHigh, long toLow, long toHigh) value:対象の数値
fromLow:元の範囲の最小値
fromHigh:元の範囲の最大値
toLow:変換後の範囲の最小値
toHigh:変換後の範囲の最大値
変換した値を返す 対象の値を元の範囲から変換後の範囲に割合で変換
double pow(float base, float exponent) base:基数
exponent:乗数
べき乗した値を返す べき乗計算
double sqrt(x) x:数値 平方根で計算した値を返す 平方根を計算
sq(x) x:数値 対象の値の2乗を計算した値を返す 対象の値の2乗を計算

min()/2つの数値を比べて小さい数値を算出

min()/2つの数値を比べて小さい数値を算出
  • 関数:min(x, y)
  • 引数:x⇒1つ目の数値
  •   :y⇒2つ目の数値
  • 戻り値:2つの数値を比べて小さい数値を返す

min()関数は、引数で指定した2つの数値を比べて小さい数値を戻り値で返します。

max()/2つの数値を比べて大きい数値を算出

max()/2つの数値を比べて大きい数値を算出
  • 関数:max(x, y)
  • 引数:x⇒1つ目の数値
  •   :y⇒2つ目の数値
  • 戻り値:2つの数値を比べて大きい数値を返す

max()関数は、引数で指定した2つの数値を比べて大きい数値を戻り値で返します。

abs()/絶対値を計算

abs()/絶対値を計算
  • 関数:abs(x)
  • 引数:x⇒数値
  • 戻り値:絶対値を返す

abs()関数は、引数で指定した数値の絶対値を戻り値で返します。

constrain()/範囲内の値を算出

constrain()/範囲内の値を算出
  • 関数:constrain(x, a, b)
  • 引数:x⇒対象の数値
  •   :a⇒範囲の最小値
  •   :b⇒範囲の最大値
  • 戻り値:範囲内の値を返す

constrain()関数は、引数に対象の数値、範囲の最小・最大値を指定して、範囲内の値を戻り値として返します。

map()/対象の値を元の範囲から変換後の範囲に割合で変換

map()/対象の値を元の範囲から変換後の範囲に割合で変換
  • 関数:long map(long value, long fromLow, long fromHigh, long toLow, long toHigh)
  • 引数:value⇒対象の数値
  •   :fromLow⇒元の範囲の最小値
  •   :fromHigh⇒元の範囲の最大値
  •   :toLow⇒変換後の範囲の最小値
  •   :toHigh⇒変換後の範囲の最大値
  • 戻り値:変換した値を返す

map()関数は、対象の値を元の範囲から変換後の範囲に割合で変換します。

pow()/べき乗計算

pow()/べき乗計算
  • 関数:double pow(float base, float exponent)
  • 引数:base⇒基数
  •   :exponent⇒乗数
  • 戻り値:べき乗した値を返す

pow()関数は、引数に基数と乗数を指定して、べき乗した値を戻り値として返します。

sqrt()/平方根を計算

sqrt()/平方根を計算
  • 関数:double sqrt(x)
  • 引数:x⇒数値
  • 戻り値:平方根で計算した値を返す

sqrt()関数は、引数に指定した数値の平方根で計算した値を戻り値として返します。

sq()/対象の値の2乗を計算

sq()/対象の値の2乗を計算
  • 関数:sq(x)
  • 引数:x⇒数値
  • 戻り値:対象の値の2乗を計算した値を返す

sq()関数は、引数に指定した数値の2乗を計算した値を戻り値として返します。

サンプルプログラム(サンプルスケッチ)

用意するもの
  1. Arduino Uno
  2. USBケーブル
  3. PC(プログラム書き込み・シリアルモニタ表示)

min()/2つの数値を比べて小さい数値を算出


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  unsigned char cal;//「cal」をunsigned charで変数宣言

  cal = min(5, 3);//5と3を比較、小さい3をcalに代入
  Serial.print("minimum:");//文字列「minimum:」を送信
  Serial.println(cal);//数字「3」(小さい値)を送信、改行

  delay(1000);//1秒待機(1000msec待機)
}

サンプルプログラムは、「5」と「3」の数値を比較して、小さい「3」をシリアルモニタに表示させることを繰り返します。

max()/2つの数値を比べて大きい数値を算出


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  unsigned char cal;//「cal」をunsigned charで変数宣言

  cal = min(5, 3);//5と3を比較、大きい5をcalに代入
  Serial.print("max:");//文字列「max:」を送信
  Serial.println(cal);//数字「5」(大きい値)を送信、改行

  delay(1000);//1秒待機(1000msec待機)
}

サンプルプログラムは、「5」と「3」の数値を比較して、大きい「5」をシリアルモニタに表示させることを繰り返します。

abs()/絶対値を計算


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  int cal;//「cal」をintで変数宣言

  cal = abs(5);//+5の絶対値をcalに代入
  Serial.print("+5 absolute value:");//文字列「+5 absolute value:」を送信
  Serial.println(cal);//数字「5」(+5の絶対値)を送信、改行

  cal = abs(-5);//-5の絶対値をcalに代入
  Serial.print("-5 absolute value:");//文字列「-5 absolute value:」を送信
  Serial.println(cal);//数字「5」(-5の絶対値)を送信、改行

  delay(1000);//1秒待機(1000msec待機)
}

サンプルプログラムは、「+5」の絶対値「5」と「-5」の絶対値「5」を、それぞれシリアルモニタに表示させることを繰り返します。

constrain()/範囲内の値を算出


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  unsigned char cal;//「cal」をunsigned charで変数宣言

  cal = constrain(5, 3, 7);//対象値「5」が範囲3~7の間に入っているので、5がcalに代入
  Serial.print("x=5 low=3 high=7:");//文字列「x=5 low=3 high=7:」を送信
  Serial.println(cal);//数字「5」を送信、改行

  cal = constrain(1, 3, 7);//対象値「1」が範囲3~7より小さい値なので、3がcalに代入
  Serial.print("x=1 low=3 high=7:");//文字列「x=1 low=3 high=7:」を送信
  Serial.println(cal);//数字「3」を送信、改行

  cal = constrain(10, 3, 7);//対象値「10」が範囲3~7より大きい値なので、7がcalに代入
  Serial.print("x=10 low=3 high=7:");//文字列「x=10 low=3 high=7:」を送信
  Serial.println(cal);//数字「7」を送信、改行

  delay(1000);//1秒待機(1000msec待機)
}

サンプルプログラムでは、対象値が範囲内に入っていれば、そのまま値がシリアルモニタに表示して、対象値が範囲外であれば、範囲値の最小または最大の値がシリアルモニタに表示します。

map()/対象の値を元の範囲から変換後の範囲に割合で変換


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  long cal;//「cal」をlongで変数宣言

  cal = map(5, 1, 10, 10, 100);//対象値「5」は、元の範囲1~10から変換対象の範囲10~100の割合が10倍なので、50がcalに代入
  Serial.print("x=5 from low=1 from high=10 to low=10 to high=100:");//文字列「x=5 from low=1 from high=10 to low=10 to high=100:」を送信
  Serial.println(cal);//数字「50」を送信、改行

  delay(1000);//1秒待機(1000msec待機)
}

サンプルプログラムは、元の範囲1~10から変換対象の範囲10~100の割合が10倍なので、対象の値「5」を10倍にした「50」をシリアルモニタに繰り返し表示させます。

pow()/べき乗計算


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  double cal;//「cal」をdoubleで変数宣言

  cal = pow(2, 3);//2の3乗なので、8.00をcalに代入
  Serial.print("2の3乗:");//文字列「2の3乗:」を送信
  Serial.println(cal);//数字「8.00」を送信、改行

  delay(1000);//1秒待機(1000msec待機)
}

サンプルプログラムは、「2の3乗」をべき乗計算した「8.00」を、シリアルモニタに表示させることを繰り返します。

sqrt()/平方根を計算


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  double cal;//「cal」をdoubleで変数宣言

  cal = sqrt(4);//4の平方根なので、2.00をcalに代入
  Serial.print("4の平方根:");//文字列「4の平方根:」を送信
  Serial.println(cal);//数字「2.00」を送信、改行

  cal = sqrt(5);//5の平方根なので、2.24をcalに代入
  Serial.print("5の平方根:");//文字列「5の平方根:」を送信
  Serial.println(cal);//数字「2.24」を送信、改行

  delay(1000);//1秒待機(1000msec待機)
}

サンプルプログラムは、「4の平方根」を計算した「2.00」と「5の平方根」を計算した「2.24」を、それぞれシリアルモニタに表示させることを繰り返します。

sq()/対象の値の2乗を計算


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  int cal;//「cal」をintで変数宣言

  cal = sq(4);//4の2乗なので、16をcalに代入
  Serial.print("4の2乗:");//文字列「4の2乗:」を送信
  Serial.println(cal);//数字「16」を送信、改行

  cal = sq(5);//5の2乗なので、25をcalに代入
  Serial.print("5の2乗:");//文字列「5の2乗:」を送信
  Serial.println(cal);//数字「25」を送信、改行

  delay(1000);//1秒待機(1000msec待機)
}

サンプルプログラムは、「4の2乗」を計算した「16」と「5の2乗」を計算した「25」を、それぞれシリアルモニタに表示させることを繰り返します。

テキストのコピーはできません。