数学¶
该部分主要完成数学变换功能,具体包括数字映射、数字约束、数学运算、取整、随机、三角函数。
1.数字常量¶
1 | 0;
|
1.1 描述¶
数字常量包括 整数常量和浮点常量。
注意
整数常量是直接在程序中使用的数字,如123。默认情况下,这些数字被视为int类型。通常情况下,整数常量默认为十进制,但可以加上特殊前缀表示为其他进制。如:B0111,表示二进制;0173,表示八进制;0x7B,表示十六进制。
浮点常量也可以直接中程序中使用,如12.3。默认情况下,这些数字被视为float类型。也可以使用科学计数法表示浮点数。如:2.34E5代表2.34 * 10^5,其实际值为234000;67E-12代表67.0 * 10^-12,其实际值为0.000000000067。
数学运算¶
描述¶
数学运算中包括加、减、乘、除、取模、幂运算。 这些运算将会返回两个操作数的和,差,乘积,商,取模、幂。
2.2 参数¶
常量或变量
2.3 返回值¶
两个操作数的和,差,乘积,商,取模,幂。
注意
- 这些运算是根据操作数的数据类型来计算的,比如 9和4都是int类型,所以9/4结果是2。
- 如果想要两个整数相除得到小数,就需要将整数转换成小数。如9.0/2.0=4.5 。
- 这也就代表如果运算结果比数据类型所能容纳的范围要大的话,就会出现溢出。例如. 1加上一个整数 int类型 32,767 结果变成-32,768。
- 如果操作数是不同类型的,结果是“更大”的那种数据类型。如果操作数中的其中一个是 float类型或者double类型, 就变成了浮点数运算。
3.位运算¶
1 | (0&0);
|
3.1 描述¶
按位操作符对变量进行位级别的计算。
3.2按位与(&)¶
按位与操作符一个&符,用在两个整型变量之间。按位与运算符对两侧的变量的每一位都进行运算。
3.2.1 描述¶
如果两个运算元都是1,则结果为1,否则输出0。
3.2.2 范例¶
在Arduino中,int类型为16位,所以在两个int表达式之间使用&会进行16个并行按位与计算。
3.3 按位或(|)¶
按位或操作符是|。
和&操作符类似,|操作符对两个变量的为一位都进行运算,只是运算规则不同。
3.3.1 描述¶
只要两个位有一个为1则结果为1,否则为0。 如:0011|0101=0111
3.3.2 范例¶
在Arduino中,int类型为16位,所以在两个int表达式之间使用&会进行16个并行按位或计算。
1 2 3 4 5 6 7 8 9 10 11 12 13 | volatile int a;
volatile int b;
volatile int c;
void setup(){
a = 92;
b = 101;
c = (a|b);
}
void loop(){
}
|
3.4 按位异或(^)¶
按位异或是一个不常见的操作符,也叫做XOR(通常读作”eks-or“)。
按位异或操作符用 ^ 表示。
3.4.1 描述¶
按位异或是如果两个位值相同则结果为0,否则为1。 如:0011^0101=0110
3.5 左移位运算(<<)¶
左移位运算可使左运算元中的某些位移动右运算元中指定的位数。
3.5.1 范例¶
1 2 3 4 5 6 7 8 | volatile int a;
volatile int b;
void setup(){
a = 5;
b = (a<<3);
}
void loop(){
}
|
1 2 3 4 5 6 7 8 | volatile int a;
volatile int b;
void setup(){
a = 5;
b = (a<<14);
}
void loop(){
}
|
如果你确定位移不会引起数据溢出,你可以简单的把左移运算当做对左运算元进行2的右运算元次方的操作。
3.6 右移位运算(>>)¶
右移位运算与左移位运算类似。
4.三角函数及其他¶
4.2 cos函数¶
计算一个角度的余弦值(用弧度表示)。返回值在 -1 和 1 之间。
4.2.1 参数¶
弧度制的角度(float)
4.2.2 返回值¶
角度的正弦值(double)
4.2.3 范例¶
绘制SIN-COS的函数图像,程序上传后,打开串口监视器,并切换到绘图模式
1 2 3 4 5 6 7 8 9 10 11 | void setup(){
Serial.begin(9600);
}
void loop(){
for (int i = 0; i <= 360; i = i + (1)) {
Serial.print((sin(i / 180.0 * 3.14159) * 256 + 512));
Serial.print(",");
Serial.println((cos(i / 180.0 * 3.14159) * 256 + 512));
delay(200);
}
}
|
5.数学运算2¶
5.1 取整(四舍五入)(round)¶
返回给定值的四舍五入取整值。如round(4.1)=4;round(5.6)=6。
5.1.1 参数¶
数值或变量。
5.1.2 返回值¶
给定值的四舍五入取整值
5.2 取整(取上限)(ceil)¶
返回给定值的下一个整数,如果输入的本身就是整数,则返回自身。如ceil(4.1)=5;ceil(5.6)=6,ceil(7)=7。
5.2.1 参数¶
数值或变量。
5.2.2 返回值¶
给定值的下一个整数或自身。
8.随机数(random)¶
描述¶
使用随机数模块可以产生一个给定范围之间的随机数。
参数¶
min - 随机数的最小值,随机数将包含此值。 (此参数可选)
max - 随机数的最大值,随机数不包含此值。
返回¶
min和max-1之间的随机数( 数据类型为long )
范例¶
随机数不包括最大数,如 1—7 随机数只有 1、2、3、4、5、6。
1 2 3 4 5 6 7 8 | void setup(){
Serial.begin(9600);
randomSeed(997);
}
void loop(){
Serial.println((random(1, 100)));
delay(100);
}
|
9.约束(constrain)¶
描述¶
约束是将数值限制在最小值与最大值之间,所有小于最小值的数值被赋值为最小值,同理,所有大于最大值的数被赋值为最大值。
参数¶
x:要被约束的数字,所有的数据类型适用。
a:该范围的最小值,所有的数据类型适用。
b:该范围的最大值,所有的数据类型适用。
返回值¶
x:如果 x是介于 a 和 b之间
a:如果 x小于a
b:如果 x大于b
范例¶
A0连接电位器,将看到LED亮灭随电位器的旋转约束在0-255之间不同的亮度
1 2 3 4 5 | void setup(){
}
void loop(){
analogWrite(11,(constrain(((long) (analogRead(A0)) % (long) (3)) * 50, 0, 255)));
}
|
10.映射(map)¶
描述¶
约束是将数值限制在最小值与最大值之间,所有小于最小值的数值被赋值为最小值,同理,所有大于最大值的数被赋值为最大值。
参数¶
x:要被约束的数字,所有的数据类型适用。
a:该范围的最小值,所有的数据类型适用。
b:该范围的最大值,所有的数据类型适用。
返回值¶
x:如果 x是介于 a 和 b之间
a:如果 x小于a
b:如果 x大于b
范例¶
A0接电位器,串口输出20-180区间的数值
1 2 3 4 5 6 7 | void setup(){
Serial.begin(9600);
}
void loop(){
Serial.println((map(analogRead(A0), 0, 1023, 20, 180)));
delay(500);
}
|