您的位置首页生活百科

Arduino 程序数学运算

Arduino 程序数学运算

的有关信息介绍如下:

Arduino 程序数学运算

程序中很多情况需要用数学运算,来改变变量的值,这里整理一下在编程时常用的数学运算的语句

Arduino IDE 新建代码的方法,程序的上传方法,大家可以参考:

http://jingyan.baidu.com/article/414eccf6a8fb9f6b431f0ab1.html

来操作

常用的变量间数学运算例子程序

输入代码:

//定义三个整型变量

int val;

int val1 = 21;

int val2 = -31;

void setup() {

Serial.begin(9600);

val = 6 + 3; //加法

Serial.println(val);

val = 6 * 3; //乘法

Serial.println(val);

val = 6 / 3; //除法

Serial.println(val);

val = 6 - 3; //减法

Serial.println(val);

val = 6 + 6 / 3 * 3; //复合运算

Serial.println(val);

val += 3; //自加 3

Serial.println(val);

val -= 3; //自减 3

Serial.println(val);

val1 = val1 % 10; //除以 10 取余数

Serial.println(val1);

val2 = abs(val2); //取绝对值

Serial.println(val2);

Serial.println(pow(3,2));//求 3 的 2 次方并打印

Serial.println(sqrt(9)); //求 9 的平方根并打印

}

void loop() {

}

串口输出结果如下图所示,在复合运算中,还可以使用括号来改变运算的优先级

一定范围内取值

int val = 150;

int val1 = 300;

int val2 = 50;

void setup() {

Serial.begin(9600);

int value = constrain(val,100,200);//100

Serial.println(value);

int value1 = constrain(val1,100,200);//val1>200,输出 200

Serial.println(value1);

int value2 = constrain(val2,100,200);//val2<100,输出 50

Serial.println(value2);

int value3 = min(50,200);//输出两个数中的最小值

Serial.println(value3);

int value4 = max(50,200);//输出两个数中的最大值

Serial.println(value4);

}

void loop() {

}

代码输出结果如下图所示,运算主要用于数值之间的比较输出,例如可以读取两个模拟接口的数值,然后比较输出

浮点数的操作

Arduino 中有两个语句可以选择最靠近某个浮点数的整数

floor(x):传回小于等于 x 的最大整数

ceil(x):传回大于等于 x 的最小整数

输入代码:

float val = 1.9;

void setup() {

Serial.begin(9600);

Serial.println(floor(1));

Serial.println(floor(1.1));

Serial.println(floor(0));

Serial.println(floor(.1));

Serial.println(floor(-1));

Serial.println(floor(-1.1));

Serial.println(ceil(1));

Serial.println(ceil(1.1));

Serial.println(ceil(0));

Serial.println(ceil(.1));

Serial.println(ceil(-1));

Serial.println(ceil(-1.1));

Serial.println(int(val));

Serial.println(ceil(val));

}

void loop() {

// put your main code here, to run repeatedly:

}

在编写程序的时候也可以使用强制类型转换(Serial.println(int(val));)来取整数,但是当要取得与 float 最接近的整数,有时强制类型转换是错误的,就可以使用 floor 或者 ceil 来找出与 float 最近的整数值。

关于三角函数的操作

输入代码:

float deg = 30; //定义角度为 30

void setup() {

Serial.begin(9600);

float rad = deg * PI / 180; //将角度转换为弧度

Serial.println(rad); //打印弧度值

Serial.println(sin(rad)); //输出 sin 值

Serial.println(cos(rad)); //输出 cos 值

Serial.println(tan(rad)); //输出 tan 值

}

void loop() {

// put your main code here, to run repeatedly:

}

输出结果如下图所示,输出结果为两位小数,是因为 Serial.print 只会显示到小数点后的第二位

产生随机数

输入代码:

int randNumber;

void setup()

{

Serial.begin(9600);

//产生没有 seed 值的随机数

Serial.println("Print 20 random numbers between 0 and 9");

for(int i=0; i < 20; i++)

{

randNumber = random(10);

Serial.print(randNumber);

Serial.print(" ");

}

Serial.println();

Serial.println("Print 20 random numbers between 2 and 9");

for(int i=0; i < 20; i++)

{

randNumber = random(2,10);

Serial.print(randNumber);

Serial.print(" ");

}

// 产生相同 seed 的随机数

randomSeed(1234);

Serial.println();

Serial.println(

"Print 20 random numbers between 0 and 9 after constant seed ");

for(int i=0; i < 20; i++)

{

randNumber = random(10);

Serial.print(randNumber);

Serial.print(" ");

}

// 产生不同 seed 的随机数

randomSeed(analogRead(0)); //读取模拟口 A0 的值,作为随机种子

Serial.println();

Serial.println(

"Print 20 random numbers between 0 and 9 after floating seed ");

for(int i=0; i < 20; i++)

{

randNumber = random(10);

Serial.print(randNumber);

Serial.print(" ");

}

Serial.println();

Serial.println();

}

void loop()

{

}

输出结果如下图,如果按下 Arduino 控制器的复位按键,前三行的随机数是不会变的,只有最后一行在每次复位再执行时会改变,因为它每次都使用了不同的seed,即每次的乱数序列不同,就可以产生不同的随机数