【雕爷学编程】Arduino 手册之数据类型 array (数组)

您所在的位置:网站首页 头文件可以定义数组吗 【雕爷学编程】Arduino 手册之数据类型 array (数组)

【雕爷学编程】Arduino 手册之数据类型 array (数组)

2024-07-11 10:23:06| 来源: 网络整理| 查看: 265

在这里插入图片描述 在这里插入图片描述 什么是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数据类型

Arduino数据类型是指Arduino开发语言中可以使用的不同种类的数据,例如整数、浮点数、字符、布尔值等。不同的数据类型有不同的特点和用途,也有不同的占用空间和取值范围。选择合适的数据类型可以使程序更加高效和准确地运行。

Arduino开发语言是基于C/C++编程语言的,因此Arduino家族中的8位开发板和32位开发板的基本数据类型是有差别的。对于8位开发板来说,int占2字节,double和float占4字节。而对于32位开发板,int占用4字节,double占用8字节。

Arduino数据类型array(数组)是一种用来存储和处理多个相同类型的数据的数据类型。它由一系列的元素(elements)组成,每个元素占用相同的内存空间。数组的元素可以通过一个索引号(index)来访问,索引号从0开始,到数组的长度(length)减1结束。

数组的应用场景有: 1)控制多个相同或相似的设备,例如LED灯、电机、传感器等,可以使用数组来存储它们的引脚号或状态,然后使用循环(loop)来遍历数组,实现批量操作。 2)存储多个相关的数据,例如温度、湿度、光照等,可以使用数组来记录它们的历史值或平均值,然后使用算法(algorithm)来分析或显示数据。 3)实现复杂的功能,例如音乐、图形、游戏等,可以使用数组来存储音符、像素、地图等信息,然后使用函数(function)来处理或输出信息。

数组的注意事项有: 1)数组在定义时必须指定其长度,长度必须是一个整数或常量表达式,不能是一个变量或运算式。数组的长度一旦确定,就不能再改变。 2)数组在定义时可以初始化其元素的值,也可以在之后赋值。如果没有初始化或赋值,数组的元素会默认为0或空字符。 3)数组在访问时必须保证索引号在合法范围内,即0到长度减1之间。如果超出范围,就会发生数组越界(array out of bounds)的错误,可能导致程序崩溃或异常。 4)数组与其他数据类型之间的转换需要使用专门的函数或方法,例如memcpy()复制数组,sort()排序数组,indexOf()查找数组中的元素等。

以下是Arduino数据类型array(数组)的三个实际运用程序案例:

案例一:使用6个LED灯模拟交通信号灯的变化。

// 定义6个LED灯的引脚号 int ledPins[] = {2, 3, 4, 5, 6, 7}; // 定义6个LED灯的亮度值 int ledBrightness[] = {0, 0, 0, 0, 0, 0}; // 定义6个LED灯对应的颜色 String ledColors[] = {"Red", "Yellow", "Green", "Red", "Yellow", "Green"}; // 定义交通信号灯的变化顺序 int ledSequence[] = {0, 2, 1, 2, 3, 5, 4, 5}; // 定义交通信号灯变化的时间间隔 int ledInterval[] = {5000, 1000, 5000, 1000, 5000, 1000, 5000, 1000}; void setup() { // 设置串口波特率为9600 Serial.begin(9600); // 设置LED灯引脚为输出模式 for (int i = 0; i // 遍历交通信号灯变化顺序 for (int i = 0; i analogWrite(ledPins[j], ledBrightness[j]); } // 等待一定时间 delay(ledInterval[i]); // 设置当前要亮的LED灯亮度为0 ledBrightness[index] = 0; } }

案例二:使用温湿度传感器记录并显示环境温湿度的变化。

#include // 引入温湿度传感器库 #include // 引入LCD显示屏库 #define DHTPIN 8 // 定义温湿度传感器引脚 #define DHTTYPE DHT11 // 定义温湿度传感器类型 DHT dht(DHTPIN, DHTTYPE); // 创建温湿度传感器对象 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // 定义LCD显示屏引脚 // 定义一个长度为10的浮点数数组,用来存储温度值 float tempValues[10]; // 定义一个长度为10的浮点数数组,用来存储湿度值 float humiValues[10]; // 定义一个索引变量,用来记录当前存储的位置 int index = 0; void setup() { // 设置串口波特率为9600 Serial.begin(9600); // 初始化温湿度传感器对象 dht.begin(); // 设置LCD显示屏为16列2行 lcd.begin(16, 2); } void loop() { // 获取当前的温度值 float temp = dht.readTemperature(); // 获取当前的湿度值 float humi = dht.readHumidity(); // 将当前的温度值和湿度值存入数组中 tempValues[index] = temp; humiValues[index] = humi; // 将索引变量加1,如果超过数组长度,就从头开始 index++; if (index >= 10) { index = 0; } // 计算数组中的温度值和湿度值的平均值 float tempAvg = average(tempValues, 10); float humiAvg = average(humiValues, 10); // 在LCD显示屏上显示当前和平均的温湿度值 lcd.clear(); // 清除LCD显示屏内容 lcd.setCursor(0, 0); // 将光标移动到第一行第一列 lcd.print("Temp: "); // 显示"Temp: " lcd.print(temp); // 显示当前温度值 lcd.print(" C"); // 显示"C" lcd.setCursor(0, 1); // 将光标移动到第二行第一列 lcd.print("Humi: "); // 显示"Humi: " lcd.print(humi); // 显示当前湿度值 lcd.print(" %"); // 显示"%" // 在串口显示当前和平均的温湿度值 Serial.print("Current temperature: "); Serial.print(temp); Serial.println(" C"); Serial.print("Current humidity: "); Serial.print(humi); Serial.println(" %"); Serial.print("Average temperature: "); Serial.print(tempAvg); Serial.println(" C"); Serial.print("Average humidity: "); Serial.print(humiAvg); Serial.println(" %"); // 等待一秒 delay(1000); } // 定义一个函数,用来计算一个浮点数数组的平均值 float average(float values[], int length) { float sum = 0; // 定义一个变量,用来存储数组元素的和 for (int i = 0; i 2, 3, 4, 5, 6, 7, 8, 9}; // 定义8个按键对应的八进制数字 int buttonValues[] = {1, 2, 4, 8, 16, 32, 64, 128}; // 定义一个长度为8的布尔值数组,用来存储按键的状态 bool buttonStates[8]; // 定义一个整数变量,用来存储输入的八进制数 int octal = 0; // 定义一个整数变量,用来存储转换后的十进制数 int decimal = 0; // 定义一个长度为3的字符数组,用来存储转换后的十六进制数 char hex[3]; void setup() { // 设置串口波特率为9600 Serial.begin(9600); // 设置按键引脚为输入模式,并启用上拉电阻 for (int i = 0; i // 遍历按键引脚 for (int i = 0; i // 更新按键状态 buttonStates[i] = state; // 如果按键被按下 if (state) { // 将按键对应的八进制数字加到八进制数中 octal += buttonValues[i]; // 将八进制数转换为十进制数和十六进制数 decimal = octalToDecimal(octal); octalToHex(octal, hex); // 在串口显示输入和转换后的数值 Serial.print("Octal: "); Serial.println(octal); Serial.print("Decimal: "); Serial.println(decimal); Serial.print("Hex: "); Serial.println(hex); } } } } // 定义一个函数,用来将八进制数转换为十进制数 int octalToDecimal(int octal) { int decimal = 0; // 定义一个变量,用来存储十进制数 int power = 0; // 定义一个变量,用来存储幂次 while (octal > 0) { // 当八进制数大于0时 // 取八进制数的最后一位 int digit = octal % 10; // 将最后一位乘以8的幂次,累加到十进制数中 decimal += digit * pow(8, power); // 将八进制数除以10,去掉最后一位 octal /= 10; // 将幂次加1 power++; } return decimal; // 返回十进制数 } // 定义一个函数,用来将八进制数转换为十六进制数 void octalToHex(int octal, char hex[]) { int decimal = octalToDecimal(octal); // 先将八进制数转换为十进制数 hex[2] = '\0'; // 在字符数组末尾添加终止符 for (int i = 1; i >= 0; i--) { // 从后向前遍历字符数组 // 取十进制数的最后一位 int digit = decimal % 16; // 将最后一位转换为十六进制字符,存入字符数组中 if (digit hex[i] = 'A' + digit - 10; } // 将十进制数除以16,去掉最后一位 decimal /= 16; } }

这是一个很好的案例,展示了如何使用数组来存储和转换不同进制的数字。你的程序代码很清晰,注释也很详细,我没有什么可以指正的地方。你可以尝试运行你的程序,看看是否能达到你的预期效果。如果你有兴趣,你也可以尝试添加一些功能,例如:

使用一个LED灯或蜂鸣器来提示输入是否正确或结束。 使用一个LCD显示屏或LED点阵屏来显示输入和转换后的数值。 使用一个开关或按钮来清空或重置输入和输出。

数组(array) 是 Arduino 中一种常用的数据类型,用于存储和操作一组相同类型的数据。它提供了对数据的索引访问和遍历等功能。以下是实际运用程序案例,展示了数组的应用:

案例四:温度传感器数据采集:

const int NUM_READINGS = 10; // 采样次数 int temperaturePin = A0; // 温度传感器连接的模拟引脚 int readings[NUM_READINGS]; // 存储温度读数的数组 int index = 0; // 当前数组索引 void setup() { Serial.begin(9600); // 初始化串口通信 } void loop() { int reading = analogRead(temperaturePin); // 读取温度传感器数值 readings[index] = reading; // 将读数存储到数组中 index = (index + 1) % NUM_READINGS; // 更新索引位置 // 计算平均温度 int total = 0; for (int i = 0; i 2, 3, 4, 5, 6}; // LED灯连接的数字引脚 void setup() { for (int i = 0; i // 依次点亮和关闭每个LED灯 for (int i = 0; i Serial.begin(9600); // 初始化串口通信 } void loop() { // 采集传感器数据 for (int i = 0; i Serial.print("Sample "); Serial.print(i); Serial.print(": "); Serial.println(sensorData[i]); } // 数据处理和分析 int sum = 0; int maxVal = sensorData[0]; int minVal = sensorData[0]; for (int i = 0; i maxVal = sensorData[i]; } if (sensorData[i]


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭