- 机器人等级考试
从按键到灯控,认识单分支和双分支结构
- 2025-7-12 22:44:14 @
Arduino 学习笔记
一、基础概念
Arduino 是一个很有趣的硬件开发板,我们可以用它来做很多好玩的东西,像控制小灯亮灭、读取按键信号 。写程序的时候,有 setup
和 loop
两个重要函数:
setup
:程序一开始会先执行这里面的内容,一般用来设置引脚模式(比如让某个引脚当输入或输出)、初始化串口这些准备工作,只执行一次。loop
:setup
执行完后,就会不断重复执行loop
里的代码,让我们的功能一直运行 。
二、代码案例逐句解析
案例 1:读取引脚数字信号并串口打印
// sketch_jul07c.ino 文件,这是 Arduino 程序的代码文件
void setup() {
// 设置引脚 4 为输入模式,这样引脚 4 就能接收外部的信号啦,比如按键的信号
pinMode(4, INPUT);
// 初始化串口,波特率设为 9600,这样电脑和 Arduino 就能通过串口通信,把数据传送到电脑上显示
Serial.begin(9600);
// 这里本来有定义变量 a 的代码,被注释掉了,注释就是把代码变成说明文字,程序不会执行
// int a;
}
// 定义全局变量 a,全局变量在整个程序里都能用到,不像在函数里定义的变量只能在函数里用
int a;
void loop() {
// 从引脚 4 读取数字信号,要么是 0(低电平,比如按键没按下),要么是 1(高电平,比如按键按下),把读到的值存到变量 a 里
a = digitalRead(4);
// 通过串口把变量 a 的值打印出来,还会自动换一行,这样我们在电脑串口监视器就能看到啦
Serial.println(a);
// 延时 20 毫秒,让程序稍微停一停,别跑得太快,这样读取信号更稳定
delay(20);
}
案例 2:读取信号并满足条件时串口打印特定内容
// sketch_jul07c.ino 文件
void setup() {
pinMode(4, INPUT);
Serial.begin(9600);
// int a;
}
int a;
void loop() {
a = digitalRead(4);
// 如果读到引脚 4 的信号是 1(也就是条件成立),就执行花括号里的代码
if (a == 1) {
// 在串口打印一串横线,这样我们就知道检测到按键按下(假设高电平是按下)的信号啦
Serial.println("-------------------");
}
delay(20);
}
案例 3:用标志变量翻转状态并串口打印
// sketch_jul12a.ino 文件
void setup() {
pinMode(4, INPUT);
Serial.begin(9600);
}
int a;
// 定义标志变量 flag,初始值设为 1,用它来标记某种状态,比如可以标记小灯该不该亮
int flag = 1;
void loop() {
a = digitalRead(4);
// 要是引脚 4 读到的信号是 1,就把 flag 的值翻转,1 变 -1,-1 变 1
if (a == 1) {
flag = -flag;
// 把翻转后的 flag 值通过串口打印出来,看看状态变化
Serial.println(flag);
}
delay(20);
}
案例 4:处理按键抖动(简单延时消抖)并翻转标志
// sketch_jul12b.ino 文件
void setup() {
pinMode(4, INPUT);
Serial.begin(9600);
}
int a;
int flag = 1;
void loop() {
a = digitalRead(4);
if (a == 1) {
flag = -flag;
Serial.println(flag);
// 这里延时 1000 毫秒(1 秒),因为按键按下的时候,可能会有抖动,也就是信号会乱跳几下,延时一下就可以消掉这些抖动,让程序准确识别按键按下这一次操作
delay(1000);
}
delay(20);
}
案例 5:根据标志变量控制引脚输出电平
// sketch_jul12b.ino 文件
void setup() {
pinMode(4, INPUT);
Serial.begin(9600);
// 设置引脚 2 为输出模式,这样引脚 2 就可以输出电平,控制小灯这些设备啦
pinMode(2, OUTPUT);
}
int a;
int flag = 1;
void loop() {
a = digitalRead(4);
if (a == 1) {
flag = -flag;
Serial.println(flag);
delay(1000);
}
// 如果 flag 等于 1,就把引脚 2 设为高电平(比如让小灯亮)
if (flag == 1) {
digitalWrite(2, HIGH);
} else {
// 如果 flag 不是 1(也就是 -1 啦),就把引脚 2 设为低电平(比如让小灯灭)
digitalWrite(2, LOW);
}
delay(20);
}
案例 6:清晰标注分支结构的控制逻辑
// sketch_jul12b.ino 文件
void setup() {
pinMode(4, INPUT);
Serial.begin(9600);
pinMode(2, OUTPUT);
}
int a;
int flag = 1;
void loop() {
a = digitalRead(4);
if (a == 1) {
flag = -flag;
Serial.println(flag);
delay(1000);
}
// 这里说明是双分支结构,满足 flag == 1 走一个分支,不满足走另一个分支
if (flag == 1) {
digitalWrite(2, HIGH);
} else {
// 注释说明 else 后面不用再接条件啦,直接执行对应的操作
digitalWrite(2, LOW);
}
delay(20);
}
案例 7:按键计数并串口打印计数结果
// sketch_jul12c.ino 文件
void setup() {
pinMode(4, INPUT);
Serial.begin(9600);
pinMode(2, OUTPUT);
}
// 原来的全局变量 a 被注释掉啦,现在不用它啦
// int a;
// 定义计数变量 cnt,初始值 0,用来数按键按了多少次
int cnt = 0;
// 注释教大家怎么给变量取名字,能包含大写字母、小写字母、下划线、美元符号、数字字符,但是数字不能放开头哦
// 如何给变量取名字 可以包括大写字母、小写字母、下划线、美元符号、数字字符。但是数字字符不能放在开头
void loop() {
// 原来的读取引脚 4 信号给 a 的代码被注释掉啦
// a = digitalRead(4);
// 直接读取引脚 4 的信号,判断是否为 1(按键按下)
if (digitalRead(4) == 1) {
// 每次按键按下,cnt 就加 1,记录按键次数
cnt = cnt + 1;
// 串口打印“按键的值:”,不换行,这样后面打印计数结果能连在一起
Serial.print("按键的值:");
// 接着打印 cnt 的值,还会换行,这样每次按键后,串口就会显示“按键的值:X”(X 是计数)
Serial.println(cnt);
// 延时 1000 毫秒消抖,让按键按下一次只计数一次
delay(1000);
}
delay(20);
}
三、总结
这些代码都是围绕着读取引脚 4 的数字信号(比如按键信号),然后做不同的事情,像串口打印、控制另一个引脚电平、计数 。关键的点有:
- 用
pinMode
设置引脚是输入还是输出模式。 digitalRead
读取输入引脚的数字信号(0 或 1 )。digitalWrite
控制输出引脚的电平(高电平HIGH
或低电平LOW
)。- 用
if
语句做条件判断,满足条件就执行对应的操作,还可以用else
处理不满足条件的情况 。 - 变量可以用来存数据,像标志变量
flag
标记状态,计数变量cnt
记录按键次数 。 delay
可以用来延时,消消按键抖动,让程序运行更稳定 。
这样一步步跟着代码理解,就能慢慢学会用 Arduino 做一些简单好玩的小项目啦,比如做个按键控制小灯亮灭、按键计数的小装置 !
0 条评论
目前还没有评论...