赞
踩
什么是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数学运算 ceil()
ceil()是Arduino中的数学运算函数,用于向上取整,即返回大于或等于给定参数的最小整数。它接受一个参数:待取整的数值,并返回计算结果。它的适用范围:
1)在涉及分页或分组的情况下,使用ceil()函数可以计算出需要的页数或组数。例如,如果有100个数据,每页显示10个,那么需要的页数就是ceil(100/10) = 10。
2)在涉及四舍五入的情况下,使用ceil()函数可以实现向上取整的效果。例如,如果要将1.5元向上取整为2元,那么可以使用ceil(1.5) = 2。
3)在涉及浮点数运算的情况下,使用ceil()函数可以避免出现小数误差或溢出。例如,如果要计算一个浮点数的阶乘,那么可以使用ceil()函数将其转换为整数再进行运算。
应用场景:
1)数据处理:ceil()函数常用于需要对数据进行上取整处理的场景。例如,在测量数据处理中,可能需要将测量结果向上取整到整数,以满足特定的要求。
2)数值调整:在某些应用中,可能需要调整数值以满足特定的要求。ceil()函数可以用于向上调整数值,以满足特定的数值约束条件。
3)界面设计:在涉及界面设计和显示的应用中,可能需要将数值进行舍入,以便正确显示和呈现给用户。ceil()函数可以用于界面设计中的数值舍入操作。
使用ceil()函数时,需要注意以下事项:
1)ceil()函数可以接受整数或浮点数作为参数,但是返回的结果类型与参数类型相同。如果要将结果赋值给不同类型的变量,需要进行类型转换。
2)ceil()函数只能接受一个参数,即被上取整的数值。如果要对多个数值进行上取整,需要分别调用ceil()函数或使用数组或循环结构。
3)ceil()函数使用浮点数运算,所以可能会消耗较多的内存和时间。如果不需要精确到小数点后的位数,可以使用其他方法。
以下是Arduino数学运算ceil()的三个实际运用程序案例:
案例一:使用电位器和LCD显示屏实现分页显示功能。当电位器旋转时,LCD显示屏显示不同的页码和内容。使用ceil()函数计算总页数和当前页码。
// 引入LiquidCrystal库 #include <LiquidCrystal.h> // 定义电位器和LCD显示屏的引脚 #define POT_PIN A0 #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); // 定义内容数组,每个元素表示一页的内容 String contents[] = {"Hello", "World", "This", "Is", "A", "Test"}; // 定义内容数组的长度和每页显示的内容个数 #define CONTENTS_LENGTH 6 #define CONTENTS_PER_PAGE 2 void setup() { // 初始化LCD显示屏,设置列数为16,行数为2,并清屏 lcd.begin(16,2); lcd.clear(); } void loop() { // 读取电位器的模拟值,并将其映射到0-1023范围内 int pot_value = analogRead(POT_PIN); pot_value = map(pot_value, 0, 1023, 0, 1023); // 使用ceil()函数计算总页数和当前页码 int total_pages = ceil((float)CONTENTS_LENGTH / CONTENTS_PER_PAGE); int current_page = ceil((float)pot_value / (1024 / total_pages)); // 在LCD显示屏上显示当前页码和对应的内容 lcd.clear(); lcd.setCursor(0,0); lcd.print("Page "); lcd.print(current_page); lcd.print("/"); lcd.print(total_pages); lcd.setCursor(0,1); for (int i = (current_page - 1) * CONTENTS_PER_PAGE; i < current_page * CONTENTS_PER_PAGE; i++) { if (i < CONTENTS_LENGTH) { lcd.print(contents[i]); lcd.print(" "); } } }
案例二:使用温度传感器和LED灯实现温度指示功能。当温度高于设定的阈值时,LED灯亮起。LED灯的亮度随着温度的升高而升高,并呈线性关系。使用ceil()函数计算LED灯的亮度值。
// 引入DHT库 #include <DHT.h> // 定义DHT传感器的类型和引脚 #define DHT_TYPE DHT11 #define DHT_PIN A0 // 创建DHT对象 DHT dht(DHT_PIN, DHT_TYPE); // 定义LED灯的引脚 #define LED_PIN 9 // 定义温度的阈值和范围,单位为摄氏度 #define TEMP_THRESHOLD 30.0 #define TEMP_MIN 30.0 #define TEMP_MAX 50.0 // 定义LED灯的亮度范围,单位为PWM值 #define BRIGHTNESS_MIN 0 #define BRIGHTNESS_MAX 255 void setup() { // 初始化DHT传感器 dht.begin(); // 设置LED灯为输出模式,并初始化为低电平 pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); } void loop() { // 获取当前的温度,单位为摄氏度 float temp = dht.readTemperature(); // 如果温度高于阈值 if (temp > TEMP_THRESHOLD) { // 根据温度计算LED灯的亮度,并将其映射到合理的范围内 float brightness = (temp - TEMP_THRESHOLD) / (TEMP_MAX - TEMP_THRESHOLD) * (BRIGHTNESS_MAX - BRIGHTNESS_MIN) + BRIGHTNESS_MIN; brightness = constrain(brightness, BRIGHTNESS_MIN, BRIGHTNESS_MAX); // 使用ceil()函数将亮度转换为整数,并赋值给LED灯 int brightness_value = ceil(brightness); analogWrite(LED_PIN, brightness_value); } }
案例三:使用光敏电阻和蜂鸣器实现声光控制功能。当光敏电阻检测到光线时,蜂鸣器发出声音。声音的音调随着光线的强弱而变化,并呈线性关系。使用ceil()函数计算音调。
// 定义光敏电阻和蜂鸣器的引脚 #define LDR_PIN A0 #define BUZZ_PIN 3 // 定义光敏电阻的读数的范围 #define LDR_MIN 0 #define LDR_MAX 1023 // 定义蜂鸣器的音调的范围,单位为赫兹 #define TONE_MIN 100 #define TONE_MAX 1000 void setup() { // 设置蜂鸣器为输出模式 pinMode(BUZZ_PIN, OUTPUT); } void loop() { // 读取光敏电阻的模拟值,并将其映射到0-1023范围内 int ldr_value = analogRead(LDR_PIN); ldr_value = map(ldr_value, LDR_MIN, LDR_MAX, 0, 1023); // 根据光敏电阻的读数计算蜂鸣器的音调,并将其映射到合理的范围内 float tone_value = (float)ldr_value / (LDR_MAX - LDR_MIN) * (TONE_MAX - TONE_MIN) + TONE_MIN; tone_value = constrain(tone_value, TONE_MIN, TONE_MAX); // 使用ceil()函数将音调转换为整数,并赋值给蜂鸣器 int tone_value = ceil(tone_value); tone(BUZZ_PIN, tone_value); }
案例四:数据处理:
float measurement = 8.7; // 测量结果
int roundedMeasurement = ceil(measurement); // 向上取整
Serial.print("Rounded Measurement: ");
Serial.println(roundedMeasurement);
在此案例中,使用ceil()函数对测量结果进行向上取整处理。将测量结果取整到最接近的整数,并将结果输出到串口监视器,用于显示或后续的处理。
案例五:数值调整:
float value = 3.2; // 数值
float adjustedValue = ceil(value); // 向上调整
// 使用调整后的数值进行后续的处理
// ...
在此案例中,使用ceil()函数对数值进行向上调整。通过向上取整,将数值调整为大于或等于原始数值的最小整数。然后,可以使用调整后的数值进行后续的处理,例如进行比较、计算或输出。
案例六:界面设计:
float inputValue = 12.6; // 输入数值
float roundedValue = ceil(inputValue); // 向上舍入
// 在界面上显示舍入后的数值
// ...
在此案例中,使用ceil()函数对输入数值进行舍入操作。通过向上取整,将数值舍入到大于或等于输入数值的最小整数。然后,可以将舍入后的数值显示在界面上,以满足界面设计的需求。
案例七:计算货币金额:
float price = 9.99; // 商品价格
int totalAmount = ceil(price); // 计算货币金额
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("货币金额:");
Serial.println(totalAmount);
delay(1000);
}
在这个例子中,我们使用ceil()函数计算货币金额。将浮点数商品价格向上取整,得到最接近的整数金额。
案例八:计算需要整数参与的循环次数:
float items = 7.5; // 商品数量
int totalLoops = ceil(items); // 计算循环次数
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < totalLoops; i++) {
// 执行循环操作
Serial.println("循环中...");
delay(1000);
}
}
在这个例子中,我们使用ceil()函数计算循环次数。将浮点数商品数量向上取整,得到最接近的整数循环次数。
案例九:将浮点数转换为整数索引:
float position = 3.7; // 实际位置
int index = ceil(position); // 将浮点数转换为整数索引
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("整数索引:");
Serial.println(index);
delay(1000);
}
在这个例子中,我们使用ceil()函数将浮点数转换为整数索引。将实际位置向上取整,得到最接近的整数索引。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。