【雕爷学编程】Arduino 手册之算术运算符加 +,减 -,乘 *,除 /

在这里插入图片描述
在这里插入图片描述
什么是Arduino?
Arduino 是一款开源的电子原型平台,它可以让你用简单的硬件和软件来创建各种创意的项目。无论你是初学者还是专家,Arduino 都能为你提供无限的可能性。你可以用 Arduino 来控制传感器、灯光、马达、机器人、物联网设备等等,只要你能想到的,Arduino 都能帮你实现。

如果你想了解更多关于 Arduino 的信息,你可以访问 Arduino 的官方网站,那里有丰富的资源和教程供你参考。你也可以加入 Arduino 的社区,和来自世界各地的爱好者、学生、设计师和工程师交流心得和经验。此外,你还可以使用 Arduino 的在线编程工具,在云端编写代码并上传到你的开发板上。

Arduino 是一个不断发展和创新的平台,它有着广泛的应用领域和潜力。这里希望本手册能激发你对 Arduino 的兴趣和热情,让你享受 Arduino 带来的创造力和乐趣

在这里插入图片描述

维基百科的定义
Arduino 是一个开源嵌入式硬件平台,用来供用户制作可交互式的嵌入式项目。此外 Arduino 作为一个开源硬件和开源软件的公司,同时兼有项目和用户社群。该公司负责设计和制造Arduino电路板及相关附件。这些产品按照GNU宽通用公共许可证(LGPL)或GNU通用公共许可证(GPL)许可的开源硬件和软件分发的,Arduino 允许任何人制造 Arduino 板和软件分发。 Arduino 板可以以预装的形式商业销售,也可以作为 DIY 套件购买。

Arduino 2005 年时面世,作为意大利伊夫雷亚地区伊夫雷亚互动设计研究所的学生设计,目的是为新手和专业人员提供一种低成本且简单的方法,以建立使用传感器与环境相互作用的装置。初学者和爱好者可用Arduino制造传感器、简单机器人、恒温器和运动检测器等装置。

Arduino 这个名字来自意大利伊夫雷亚的一家酒吧,该项目的一些创始人过去常常会去这家酒吧。 酒吧以伊夫雷亚的 Arduin(Arduin of Ivrea)命名,他是伊夫雷亚边疆伯爵,也是 1002 年至 1014 年期间的意大利国王。

在这里插入图片描述

Arduino 系列电路板的设计大多使用 Atmel AVR 单片机。这些电路板配有一组数字和模拟I/O引脚,可以连接各种扩展板或面包板(Shields 扩展版)和其他电路。这些电路板具有串行端口,包括某些型号上的通用串行总线(USB),也用于从个人电脑加载程序。

软件编程方面,通常使用C/C++程序语言,官方提供了一个Arduino IDE用开发。除了使用传统的编译工具链之外,Arduino 项目还提供了一个基于 Processing 语言项目的集成开发环境。另外,一些少儿编程教育软件提供了对 Arduino 的可视化编程。

在这里插入图片描述

四、算术运算符

Arduino 算术运算符是一种用于进行数学计算的符号,它可以对两个或多个数值或表达式进行加、减、乘、除等操作。Arduino语言中的算术运算符有以下几种:

  • 加法运算符,用于将两个操作数相加,例如3 + 5等于8。
  • 减法运算符,用于将第一个操作数减去第二个操作数,例如10 - 7等于3。
  • 乘法运算符,用于将两个操作数相乘,例如4 * 6等于24。
    / 除法运算符,用于将第一个操作数除以第二个操作数,例如12 / 4等于3。
    % 取余运算符,用于求第一个操作数除以第二个操作数的余数,例如7 % 3等于1。
    = 赋值运算符,用于将等号右边的值或表达式存储到等号左边的变量中,例如x = 10表示将10赋值给变量x。

算术运算符的应用场景有以下几种:
在程序中进行一些基本的数学计算,例如求和、求差、求积、求商、求余等。
在程序中进行一些复杂的数学计算,例如求平方、开方、三角函数、对数函数等。

1、加+,减-,乘,除/*

Arduino算术运算符+,-,*,/是一种用于进行基本的数学计算的符号,它们可以对两个或多个数值或表达式进行加、减、乘、除等操作。例如:

int x = 10; // 定义一个整型变量x,并赋值为10
int y = 20; // 定义一个整型变量y,并赋值为20
int z = x + y; // 使用+运算符将x和y相加,并赋值给变量z,z的值为30
z = x - y; // 使用-运算符将x减去y,并重新赋值给变量z,z的值为-10
z = x * y; // 使用*运算符将x和y相乘,并重新赋值给变量z,z的值为200
z = x / y; // 使用/运算符将x除以y,并重新赋值给变量z,z的值为0

Arduino算术运算符+,-,*,/的应用场景有以下几种:

1)在程序中进行一些基本的数学计算,例如求和、求差、求积、求商等。这些计算可以用来处理一些简单的数据,如温度、距离、时间等。例如:

// 使用温度传感器测量并打印摄氏温度和华氏温度

// 定义温度传感器连接的引脚为A0
#define TEMP_PIN A0

void setup() {
  // 初始化串口通信波特率为9600
  Serial.begin(9600);
}

void loop() {
  // 读取温度传感器的模拟值
  int sensorValue = analogRead(TEMP_PIN);
  // 将模拟值转换为摄氏温度(单位为摄氏度)
  float celsiusTemp = (sensorValue * 5.0 / 1023.0 - 0.5) * 100.0;
  // 使用+和*运算符将摄氏温度转换为华氏温度(单位为华氏度)
  float fahrenheitTemp = celsiusTemp * 1.8 + 32.0;
  // 在串口打印摄氏温度和华氏温度
  Serial.print("Celsius: ");
  Serial.print(celsiusTemp);
  Serial.println(" C");
  Serial.print("Fahrenheit: ");
  Serial.print(fahrenheitTemp);
  Serial.println(" F");
}

2)在程序中进行一些复杂的数学计算,例如求平方、开方、三角函数、对数函数等。这些计算通常需要使用标准C语言库math.h中提供的函数,并且需要在程序开头包含该库文件。这些函数可以用来处理一些高级的数据,如角度、弧度、指数等。例如:

使用超声波传感器测量并打印距离

// 引入标准C语言库math.h
#include <math.h>

// 定义超声波传感器连接的引脚
#define TRIG_PIN 9 // 触发引脚
#define ECHO_PIN 10 // 回响引脚

void setup() {
  // 初始化串口通信波特率为9600
  Serial.begin(9600);
}

void loop() {
  // 向触发引脚发送10微秒的高电平信号
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // 读取回响引脚返回的脉冲时间(单位为微秒)
  long duration = pulseIn(ECHO_PIN, HIGH);

  // 使用/运算符将脉冲时间转换为秒(单位为秒)
  float time = duration / 1000000.0;

  // 使用math.h中提供的常量M_PI表示圆周率,使用*和/运算符将声速转换为厘米每秒(单位为厘米/秒)
  float speed = 331.3 + 0.606 * M_PI * 20.0 / 180.0;

  // 使用*运算符计算声波在空气中的往返距离(单位为厘米)
  float distance = time * speed;

  // 使用/运算符将往返距离除以2,得到实际距离(单位为厘米)
  distance = distance / 2.0;

  // 在串口打印实际距离
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
}

3)在程序中进行一些逻辑判断或控制流程,例如使用if语句、for循环、while循环等。这些语句通常需要使用比较运算符或布尔运算符来判断条件是否成立,并且可能需要使用赋值运算符或复合赋值运算符来修改变量的值。这些语句可以用来实现一些条件分支或循环迭代的功能,如闪烁LED灯、控制舵机角度等。例如:

使用for循环控制舵机从0度到180度再回到0度旋转

// 引入舵机库
#include <Servo.h>

// 创建舵机对象
Servo myservo;

// 定义舵机连接的引脚为9号
#define SERVO_PIN 9

void setup() {
  // 将舵机对象与引脚连接
  myservo.attach(SERVO_PIN);
}

void loop() {
  // 使用for循环将舵机从0度旋转到180度,每次增加1度
  for (int angle = 0; angle <= 180; angle++) {
    // 使用=赋值运算符将angle赋值给舵机对象,表示设置舵机的角度
    myservo.write(angle);
    // 延时15毫秒,让舵机有时间转动
    delay(15);
  }
  
  // 使用for循环将舵机从180度旋转到0度,每次减少1度
  for (int angle = 180; angle >= 0; angle--) {
    // 使用=赋值运算符将angle赋值给舵机对象,表示设置舵机的角度
    myservo.write(angle);
    // 延时15毫秒,让舵机有时间转动
    delay(15);
  }
}

Arduino算术运算符+,-,*,/的注意事项有以下几点:

1)算术运算符有不同的优先级和结合性,优先级高的运算符会先执行,结合性决定了相同优先级的运算符的执行顺序。一般来说,乘、除、取余运算符的优先级高于加、减运算符,赋值运算符的优先级最低。同一优先级的运算符通常从左到右结合,赋值运算符从右到左结合。为了避免歧义或错误,建议在复杂的表达式中使用括号来明确运算顺序,例如:

int x = 10;
int y = 20;
int z = x + y * 2; // 这里会先计算y * 2,然后再加上x,所以z的值为50
int z = (x + y) * 2; // 这里会先计算x + y,然后再乘以2,所以z的值为60

2)算术运算符的操作数和结果的类型取决于参与运算的变量或常量的类型。如果两个操作数的类型不同,会发生隐式类型转换,通常是将较低精度的类型转换为较高精度的类型,例如整型转换为浮点型。如果结果的类型与被赋值的变量的类型不同,也会发生隐式类型转换,通常是将较高精度的类型转换为较低精度的类型,例如浮点型转换为整型。这些隐式类型转换可能会导致精度损失或溢出,所以要注意避免或处理这些情况,例如:

int x = 10;
float y = 3.14;
float z = x + y; // 这里会将x转换为float类型,然后与y相加,结果也是float类型,所以z的值为13.14
int w = x + y; // 这里会将x转换为float类型,然后与y相加,结果是float类型,但是要赋值给int类型的变量w,所以会将结果转换为int类型,导致精度损失,所以w的值为13

3)算术运算符/和%在进行除法或取余运算时要注意被除数不能为0,否则会导致程序出错或异常。例如:

int x = 10;
int y = 0;
int z = x / y; // 这里会试图将x除以0,这是不合法的操作,会导致程序出错
int w = x % y; // 这里会试图将x对0取余,这也是不合法的操作,会导致程序出错

4)算术运算符/在进行除法运算时要注意整型和浮点型之间的区别。如果两个操作数都是整型,则结果也是整型,即只保留商的整数部分而舍弃小数部分。如果其中一个或两个操作数是浮点型,则结果也是浮点型,即保留商的小数部分。例如:

int x = 10;
int y = 3;
float z = 3.0;
int w = x / y; // 这里两个操作数都是整型,则结果也是整型,即3
float v = x / z; // 这里一个操作数是浮点型,则结果也是浮点型,即3.333333

5)算术运算符+,-,/可以与赋值运算符=结合成复合赋值运算符+=,-=,=,/=来简化代码书写和提高效率。例如:

int x = 10;
x += 5; // 这等价于x = x + 5,即将x加上5并重新赋值给x
x -= 3; // 这等价于x = x - 3,即将x减去3并重新赋值给x
x *= 2; // 这等价于x = x * 2,即将x乘以2并重新赋值给x
x /= 4; // 这等价于x = x / 4,即将x除以4并重新赋值给x

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值