Arduinoのサンプルプログラム

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

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

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

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待機)
}

min()は2つの数値を比べて小さい数値を算出します。サンプルプログラムは「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待機)
}

max()は2つの数値を比べて大きい数値を算出します。サンプルプログラムは「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待機)
}

abs()は絶対値を計算します。サンプルプログラムは「+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待機)
}

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

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待機)
}

map()は、対象の値を元の範囲から変換後の範囲に割合で変換します。元の範囲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待機)
}

pow()はべき乗計算します。サンプルプログラムは「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待機)
}

sqrt()は平方根を計算します。サンプルプログラムは「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待機)
}

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

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