Arduino 程序数学运算

2025-10-15 17:03:45

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

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

来操作

Arduino 程序数学运算

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

输入代码:

//定义三个整型变量

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() {

}

Arduino 程序数学运算

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

Arduino 程序数学运算

4、一定范围内取值

int val = 150;

int val1 = 300;

int val2 = 50;

void setup() {

  Serial.begin(9600);

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

  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 程序数学运算

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

Arduino 程序数学运算

6、浮点数的操作

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:

}

Arduino 程序数学运算

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

Arduino 程序数学运算

8、关于三角函数的操作

输入代码:

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:

}

Arduino 程序数学运算

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

Arduino 程序数学运算

10、产生随机数

输入代码:

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 程序数学运算

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

Arduino 程序数学运算

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢