本帖最后由 lxf 于 2020-8-15 13:30 编辑
目标
1、掌握数组的使用方法 2、实现蜂鸣器每隔1秒依次响起一个基准音
实验材料
Arduino UNO开发板 蜂鸣器模块(频率可控) 配套USB数据线 配套杜邦线若干 Arduino IDE软件
内容
七个基准音(do、re、mi、fa、sol、la、si),这七个基准音对应的频率数组为:1046.5,1174.7,1318.5,1396.9,1568,1760,1975.5。
接线图
接线方式
Arduino UNO <------> 蜂鸣器模块 5V <------> VCC GND <------> GND D8 <------> IO
程序实现代码
- float Reference_Note[]={1046.5,1174.7,1318.5,1396.6,1568,1760,1975.5}; //创建一个浮点型的Reference_Note基准音数组
- void setup(){
- pinMode(8, OUTPUT); //定义8号数字管脚类型为输出
- }
- void loop(){
- for (int i = 1; i <= 7; i++) { //通过循环语句8号管脚蜂鸣器每隔1秒依次响起一个基准音
- tone(8,Reference_Note[(int)(i - 1)]);
- delay(1000);
- }
- noTone(8);
- }
复制代码
array 数组
数组是一种可通过索引号访问的同类型变量集合。
创建数组
下面的方法都可以用来创建(声明)数组。 int Ints[6];
int P[] = {2, 4, 8, 3, 6};
int SensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello"; 在以上示例中 Ints数组是一个在声明时没有初始化数据的数组。
P数组在声明时没有明确大小。Arduino编译器将会计算该数组所包含的元素数量,并将适当大小的内存空间分配给该数组。
当然,你也可以明确告知Arduino你所创建的数组大小,SensVals就是一个例子。
请注意,当初始化一个char类型的数组时,你需要多分配一个元素空间给该数组。这么做的原因是为了字符数组有足够的空间容纳末尾的终止符。如上面例子中的message数组中包含的元素为hello五个英文字母,但是我们在初始化时必须给该数组6个元素空间。额外的元素空间是为了存储字符结尾的终止符。
使用数组
我们知道,要想把数据放入内存,必须先要分配内存空间。放入4个整数,就得分配4个int类型的内存空间: int a[4]; 这样,就在内存中分配了4个int类型的内存空间,并为它们起了一个名字,叫a。
我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length),例如int a[4];就定义了一个长度为4的整型数组,名字是a。 数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为下标(Index)。使用数组元素时,指明下标即可,形式为: arrayName[index] arrayName 为数组名称,index 为下标。例如,a[0] 表示第0个元素,a[3] 表示第3个元素
需要注意的是:
1) 数组中每个元素的数据类型必须相同,对于int a[4];,每个元素都必须为 int。 2)数组长度 length 最好是整数或者常量表达式,例如 10、20*4 等,这样在所有编译器下都能运行通过;如果 length 中包含了变量,例如 n、4*m 等,在某些编译器下就会报错。 3) 访问数组元素时,下标的取值范围为 0 ≤ index < length,过大或过小都会越界,导致数组溢出,发生不可预测的情况,请大家务必要引起注意。
数组的初始化
我们可以在定义数组的同时赋值: int a[4] = {20, 345, 700, 22}; { }中的值即为各元素的初值,各值之间用,间隔。 对数组赋初值需要注意以下几点: 1) 可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如: int a[10]={12, 19, 22 , 993, 344}; 表示只给 a[0] ~ a[4] 这5个元素赋值,而后面5个元素自动赋0值。 当赋值的元素少于数组总体元素的时候,剩余的元素自动初始化为 0:对于short、int、long类型数据,就是整数0;对于char类型数据,就是字符 ‘\0’;对于float、double类型数据,就是小数0.0。 我们可以通过下面的形式将数组的所有元素初始化为 0: int a[10] = {0}; char c[10] = {0}; float f[10] = {0}; 由于剩余的元素会自动初始化为0,所以只需要给第0个元素赋0值即可。
示例:
- void setup() {
- Serial.begin(9600);
- int a[6] = {299, 34, 92, 100}; // 定义数组
- for(int i=0; i<6; i++){ //串口监视器输出数组元素
- Serial.print("a[");
- Serial.print(i);
- Serial.print("] =");
- Serial.println(a[i]);
- Serial.println("");
- }
- }
- void loop() {
- }
复制代码
运行结果:
|