内容正文:
第80课:数组与指针(下)
陪孩子一起学Arduino
——机器人从零学起
1
本课任务:
1.学习二维数组,并学会操作二维数组中的元素
2.理解二维数组、指针数组、数组指针的区别
3.简单介绍Arduino类库的使用以及学习方法
创客童年
2
指针数组
定一个指针数组:char *c[] = {"abcd","efgh"};
内存分析:
指针0
指针1
指针数组c
'a'
'b'
'c'
'd'
'\0'
'e'
'f'
'g'
'h'
'\0'
256
258
281 282 283 284 285 286 287 288 289 290
创客童年
输入:由用户输入(键盘或鼠标)输入数据。
处理:由程序控制(判断、循环)运算(数学、逻辑运算)数据。
输出:向显示器输出程序运算结果
3
二维数组
二维数组:数组中的元素也是数组
定义二维数组:char c[2][5] = {"abcd","efgh"}
'a'
'b'
'c'
'd'
'\0'
'e'
'f'
'g'
'h'
'\0'
数组0
数组1
数组c
内存分析:
创客童年
4
二维数组元素的操作
1.获取元素:通过数组名结合元素的下标来获取
c[0][0]
c[1][3]
定义二维数组:char c[2][5] = {"abcd","efgh"}
'a'
'h'
2.修改元素:通过下标获取到元素,然后重新赋值完成修改
c[0][0] =
'x'
3.遍历输出:嵌套for循环完成数组遍历
for(int i=0;i<2;i++){
for(int j=0;j<5;j++){
Serial.println(c[i][j]);
}
}
创客童年
5
指针数组的遍历
char *c[4] = {"abcd","efgh"};void setup() { Serial.begin(9600); for(int i=0;i < 2;i++){ while(*c[i]){ Serial.println(*c[i]++); } }}void loop() {}
示例:
分解
char *c0 = "abcd";void setup() { Serial.begin(9600); while(*c0){ Serial.println(*c0++); }}void loop() {}
创客童年
6
数组指针
数组指针:
本质上是一个指针,指向了一个固定长度的数组,用数组指针可以
很方便地操作二维数组。
示例:
char c[2][5] = {"abcd","efgh"};char (*ptr)[5] = c;//定义数组指针,指向二维数组cvoid setup() { Serial.begin(9600); Serial.println(*ptr++); Serial.println(*ptr);}void loop() {}
定义数组指针的格式:数据类型 (*指针名)[数组长度]
创客童年
7
练习
编写一个函数,在程序能实现自动转换字母大小的功能。
void setup() { Serial.begin(9600); char *c = "ab#cd"; upper(c); Serial.println(c);}void loop() {}void upper(char *ptr_c){ while(*ptr_c){ if(*ptr_c <= 96 || *ptr_c >= 122){ ptr_c++; continue; } *ptr_c -= 32; ptr_c++; }}
创客童年
8
Arduino类库的使用
程序使用类库提供额外的功能,如与硬件协同工作或操控数据等。
Arduino常用类库示例:
EEPROM: 对EEPROM进行读和写
SPI: 与使用SPI(串行外设接口)总线的设备进行通信
Wire: 与使用TWI/I2C(串行外设接口)总线的设备进行通信
LiquidCrystal: 控制1602液晶显示屏(LCD)
SD: 对 SD 卡进行读写操作
Servo: 控制模拟舵机
创客童年
9
类库程序示例:控制舵机
#include <Servo.h>//导入舵机库 Servo servo;//创建一个舵机对象servovoid setup(){ servo.attach(2);//设置舵机的控制引脚}void loop(){ //调用舵机的write函数控制舵机转动到0度 servo.write(0); delay(1000); //调用舵机的write函数控制舵机转动到180度 servo.write(180); delay(1000); }
创客童年
10
课后练习
通过图形化程序学习代码知识,熟悉常用类库及其函数的使用方法。
创客童年
11
THANKS
陪孩子一起学Arduino
——机器人从零学起
12
$$