NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Arduino IDE(数学ライブラリmath.hの使い方)

math.hライブラリ
 math.hは、多数の数学的関数を含むライブラリです。
 C言語では「#include <math.h>」としてライブラリを最初にインクルードする必要がありますが、Arduino 1.6.12では特にインクルードせずともそのまま使えます

 よく使う数学的関数を中心に、以下図1に示す19種の関数についてプログラムを書いたものを図2に示します。
 詳細は「AVR Libc Home Page」の「<math.h>: Mathematics」に書かれており、math.hでは約40種類の数学的関数をサポートしています。
イメージ 1
図1:「math.hライブラリ」主要数学的関数をArduinoUNOで実行した結果


 今回は私の独断と偏見で特に使いそうな関数19種類について、サンプルプログラムを書いてみました!
double A=1;
double X=3;
double Y=7;
double Z=12.345;
int *iptr;
void setup() {Serial.begin(9600);}           //9600bpsでシリアルポートを開く

void loop() {
 //sin:xの正弦を返します
 Serial.println(sin(X)); //計算値:sin(3) = 0.14

 //cos:xの余弦を返します
 Serial.println(cos(X)); //計算値:cos(3) = -0.99

 //tan:xの正接を返します
 Serial.println(tan(X)); //計算値:tan(3) = -0.14

 //asin:xの逆正弦を返します
 Serial.println(asin(A)); //計算値:asin(1) = 1.57

 //acos:xの逆余弦を返します
 Serial.println(acos(A)); //計算値:acos(1) = 0.00

 //atan:xの逆正接を返します
 Serial.println(atan(X)); //計算値:atan(3) = 1.25

 //atan2:XY平面における二点間のベクトル(X,Y)から、ベクトルの角度を返します
 Serial.println(atan2(X,Y)); //計算値:atan2(3,7) = 0.40

 //fabs:floatの絶対値を返します
 Serial.println(fabs(X)); //計算値:fabs(3) = 3.00

 //fmod:「x/y」の浮動小数点剰余を返します
 Serial.println(fmod(Z,5),3); //計算値:fmod(12.345,5) = 2.345

 //modf:Zを整数部(*iptrアドレスに格納)と、小数部(戻り値)に分割します
 Serial.println(modf(Z,*iptr),3); //計算値:modf(12.345) = 0.345

 //sqrt:xの平方根を返します
 Serial.println(sqrt(X)); //計算値:sqrt(3) = 1.73

 //exp:xの指数関数値を返します
 Serial.println(exp(X)); //計算値:exp(3) = 20.09

 //log:xの自然対数を返します
 Serial.println(log(X)); //計算値:log(3) = 1.10

 //log10:基数10のxの対数を返します
 Serial.println(log10(X)); //計算値:log10(3) = 0.48

 //pow:xのy乗を返します
 Serial.println(pow(X,Y)); //計算値:pow(3,7) = 2187.00

 //square:xの二乗を返します
 Serial.println(square(X)); //計算値:square(3) = 9.00

 //fmax:xとyを比較し、大きい方の値を返します
 Serial.println(fmax(X,Y)); //計算値:fmax(3,7) = 7.00

 //fmin:xとyを比較し、小さい方の値を返します
 Serial.println(fmin(X,Y)); //計算値:fmin(3,7) = 3.00

 //round:Z小数点以下を丸めます
 Serial.println(round(Z)); //計算値:round(12.345) = 12}

イメージ 1
図2:プログラムの内容

 ArduinoIDEが、これだけの数学的関数をサポートしている事は割と最近まで知りませんでした

イメージ 3イメージ 1
励みになりますのでよければクリック下さい(^o^)/