【雕爷学编程】Arduino 手册之数学运算 max()

在这里插入图片描述
在这里插入图片描述
什么是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数学运算 max()
max()是Arduino中的数学运算函数,用于比较两个数值的大小并返回较大的值。它接受两个参数,返回其中较大的那个数值。它的适用范围:
1)比较传感器的读数,选择最大的一个作为输出。
2)控制电机的转速,使其不超过最大限制。
3)计算数组中的最大元素,用于统计或排序。

应用场景:
1)最大值选择:max()函数常用于需要从多个数值中选择最大值的场景。例如,在传感器数据处理中,可能需要选择最大的测量值作为有效数据,或者在控制循环中选择最大的误差值进行调整。
2)范围限制:max()函数可以用于限制数值的范围。通过将一个数值与下限进行比较,可以确保该数值不低于指定的下限值。这在控制输出范围、限制传感器读数或防止溢出等方面非常有用。
3)数值排序:在一些排序算法中,可能需要比较多个数值并选择最大的数值。使用max()函数可以方便地在排序过程中选择最大值。

使用max()函数时,需要注意以下事项:
max()函数只能比较同一类型的数值,例如整数或浮点数。如果要比较不同类型的数值,需要先进行类型转换。
max()函数可以接受任意数量的参数,但是参数之间必须用逗号分隔。如果参数之间有其他符号,例如加号或减号,会导致语法错误。
max()函数返回的结果类型与参数类型相同。如果要将结果赋值给不同类型的变量,也需要进行类型转换。

扫描二维码关注公众号,回复: 16399248 查看本文章

以下是Arduino数学运算max()的三个实际运用程序案例:

案例一:使用光敏电阻和声音传感器控制LED灯的亮度。当光线或声音强度增加时,LED灯变亮;当光线或声音强度减小时,LED灯变暗。使用max()函数比较两个传感器的读数,选择最大的一个作为LED灯的亮度值。

// 定义光敏电阻和声音传感器的引脚
#define LIGHT_PIN A0
#define SOUND_PIN A1
// 定义LED灯的引脚
#define LED_PIN 9

void setup() {
    
    
  // 设置LED灯为输出模式
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
    
    
  // 读取光敏电阻和声音传感器的模拟值
  int light_value = analogRead(LIGHT_PIN);
  int sound_value = analogRead(SOUND_PIN);
  // 使用max()函数比较两个传感器的读数,选择最大的一个作为LED灯的亮度值
  int brightness = max(light_value, sound_value);
  // 将亮度值映射到0-255范围内
  brightness = map(brightness, 0, 1023, 0, 255);
  // 控制LED灯的亮度
  analogWrite(LED_PIN, brightness);
}

案例二:使用电位器和按钮控制舵机的角度。当按下按钮时,舵机转动到电位器设定的角度;当松开按钮时,舵机回到初始位置。使用max()函数限制舵机的角度在0-180度之间,防止过度转动造成损坏。

// 引入舵机库
#include <Servo.h>
// 创建舵机对象
Servo servo;
// 定义电位器和按钮的引脚
#define POT_PIN A0
#define BUTTON_PIN 2
// 定义舵机的初始角度
#define INIT_ANGLE 90

void setup() {
    
    
  // 设置按钮为输入模式,并启用内部上拉电阻
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  // 将舵机连接到第9号引脚
  servo.attach(9);
  // 将舵机转动到初始角度
  servo.write(INIT_ANGLE);
}

void loop() {
    
    
  // 读取按钮的状态,如果按下为LOW,如果松开为HIGH
  int button_state = digitalRead(BUTTON_PIN);
  // 如果按下按钮
  if (button_state == LOW) {
    
    
    // 读取电位器的模拟值,并将其映射到0-180范围内
    int pot_value = analogRead(POT_PIN);
    int angle = map(pot_value, 0, 1023, 0, 180);
    // 使用max()函数限制舵机的角度在0-180度之间
    angle = max(angle, 0);
    angle = min(angle, 180);
    // 将舵机转动到设定的角度
    servo.write(angle);
  }
  // 如果松开按钮
  else {
    
    
    // 将舵机转动到初始角度
    servo.write(INIT_ANGLE);
  }
}

案例三:使用温湿度传感器和LCD显示屏显示当前的温度和湿度。每隔一段时间,计算并显示最高温度和最低温度。使用max()函数和min()函数更新最高温度和最低温度的值。

// 引入DHT库和LiquidCrystal库
#include <DHT.h>
#include <LiquidCrystal.h>
// 定义DHT传感器的类型和引脚
#define DHT_TYPE DHT11
#define DHT_PIN A0
// 创建DHT对象
DHT dht(DHT_PIN, DHT_TYPE);
// 定义LCD显示屏的引脚
#define RS_PIN 7
#define EN_PIN 8
#define D4_PIN 9
#define D5_PIN 10
#define D6_PIN 11
#define D7_PIN 12
// 创建LiquidCrystal对象,指定引脚顺序
LiquidCrystal lcd(RS_PIN, EN_PIN, D4_PIN, D5_PIN, D6_PIN, D7_PIN);
// 定义更新最高温度和最低温度的时间间隔,单位为毫秒
#define INTERVAL 10000
// 定义最高温度和最低温度的初始值,单位为摄氏度
float max_temp = -100.0;
float min_temp = 100.0;

void setup() {
    
    
  // 初始化DHT传感器
  dht.begin();
  // 初始化LCD显示屏,设置列数为16,行数为2
  lcd.begin(16, 2);
}

void loop() {
    
    
  // 获取当前的温度和湿度,单位分别为摄氏度和百分比
  float temp = dht.readTemperature();
  float humi = dht.readHumidity();
  // 在LCD显示屏的第一行显示当前的温度和湿度,保留一位小数
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temp, 1);
  lcd.print(" C");
  lcd.print("   ");
  lcd.print("Humi: ");
  lcd.print(humi, 1);
  lcd.print(" %");
  // 每隔一段时间,更新最高温度和最低温度的值,并在LCD显示屏的第二行显示,保留一位小数
  static unsigned long last_time = millis();
  unsigned long current_time = millis();
  if (current_time - last_time >= INTERVAL) {
    
    
    last_time = current_time;
    // 使用max()函数和min()函数更新最高温度和最低温度的值
    max_temp = max(max_temp, temp);
    min_temp = min(min_temp, temp);
    // 在LCD显示屏的第二行显示最高温度和最低温度,保留一位小数
    lcd.setCursor(0, 1);
    lcd.print("Max: ");
    lcd.print(max_temp, 1);
    lcd.print(" C");
    lcd.print("   ");
    lcd.print("Min: ");
    lcd.print(min_temp, 1);
    lcd.print(" C");
  }
}

案例四:最大值选择:

int sensor1Value = analogRead(A0); // 读取传感器1的值
int sensor2Value = analogRead(A1); // 读取传感器2的值

int maxValue = max(sensor1Value, sensor2Value); // 选择最大的传感器值

// 在LCD显示屏上输出最大值
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
lcd.begin(16, 2);
lcd.print("Max Value: ");
lcd.print(maxValue);

在此案例中,使用max()函数比较两个传感器的读数,并选择最大的传感器值。然后,将最大值显示在连接的LCD显示屏上。

案例五:范围限制:

int inputValue = analogRead(A0); // 读取输入值
int minValue = 0;
int maxValue = 1023;

int constrainedValue = max(minValue, min(maxValue, inputValue)); // 限制输入值在最小值和最大值之间

analogWrite(9, constrainedValue); // 输出限制后的值到PWM引脚

在此案例中,使用max()函数将输入值限制在最小值和最大值之间。这可以用于限制输入的范围,以确保其在一定的有效范围内。然后,将限制后的值作为PWM信号输出到引脚。

案例六:数值排序:

int value1 = 5;
int value2 = 3;
int value3 = 7;

int maxValue = max(max(value1, value2), value3); // 从三个数值中选择最大值

Serial.print("Max Value: ");
Serial.println(maxValue);

在此案例中,使用max()函数比较三个数值,并选择最大的数值。然后,将最大值输出到串口监视器,用于调试或显示目的。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/132645494