兴趣实验——实现小灯泡的闪烁
一、了解元器件
1.单片机
简单地说,单片机就是一个小计算机系统。
当我们在电脑上写好程序后,通过一根数据线将程序从电脑端传到单片机端。这时单片机的芯片中就储存了我们写的程序啦。随后,通过在单片机上连接我们在程序中设定好的电路,程序就可以做我们设计好的工作啦!
本次实验需要闪烁的小灯泡已经被预先安在单片机的板子上啦,所以,我们只需要点一下开始执行的重置按钮🔘,就可以运行程序啦。
2.LED小灯泡
上图就是预先安装在单片机上的LED小灯泡啦。它背后的电路连接是这样的:
GPIO口:就是从单片机连接出来的一个端口,这个端口是受到程序控制的。此端口可以往外输出电压,也可以接受电压,基于本实验要做的事情,我们需要让这个GPIO口输出电压,这个端口一共可以输出两种状态:
- 高电压
- 低电压
(1)输出高电压时
输出高电压,可以想像成输出高电压的GPIO处于一个地势较高的地方,GND(接地点)可以想像成地势较低的地方。这时候让小灯泡亮起来的原理就相当于从这个高出倒下来一碗水(相当于电流),这些水在流淌的过程中,带动了小灯泡工作起来。
(2)输出低电压时
输出低电压,可以想像成输出低电压的GPIO和GND(接地点)一样,也处于一个同样地势高度的地方,这时候再倒下来一碗水,水就不会流淌了,小灯泡就不会亮了。
程序思路
我们的目标:实现小灯泡的闪烁
我们已经掌握的知识:明白了小灯泡什么情况会亮,什么情况会不亮
程序的逻辑:写一段程序,控制这个输出的GPIO口高电压一会,低电压一会,循环往复,就实现了小灯泡的闪烁
程序编写
1. 初识单片机程序的结构
// the setup function runs once when you press reset or power the board
//当你按下重置键(reset)或者为主板供电时,setup()这个函数只运行一次
void setup() {}
// the loop function runs over and over again forever
//循环函数(loop)永远一遍又一遍地运行
void loop() {}
2. setup()函数的编写
上面我们知道,setup函数只会在程序运行的时候执行一次,基于这种特点,我们往往把一些需要指定的配置写在这里面
对于我们的实验,既然需要我们控制GPIO口高低电压交替输出,那么我们需要告诉单片机两个事:
- GPIO口要输出电压还是要接收电压呀?
- 想让我身上哪一个GPIO做输出或者是接收的工作呀?
下面我们就来落实这两件事:
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
//初始化数字引脚LED_BUILTIN为输出模式
pinMode(LED_BUILTIN, OUTPUT);
}
3. loop()函数的编写
loop
函数就像是人的心脏,写在这里面的程序就像血液,循环往复的不断重复被执行
- 我们先让GPIO 输出高电压,这时候小灯就会亮起来
- 使用延时函数,这个函数相当于让程序在这等着,保持住之前的状态,至于等多久呢,这个可以由我们设定
- 再让GPIO输出低电压,这时候小灯就会熄灭
- 再次使用延时函数,让程序保持状态
- 因为程序写在了loop函数中,所以它会循环往复,又回到1执行到4,循环♻️往复
void loop() {
// turn the LED on (HIGH is the voltage level)
//将LED打开(HIGH是一种电压等级,代表输出高电压)
digitalWrite(LED_BUILTIN, HIGH);
// wait for a second
//等待一秒钟,输入值单位规定是毫秒:1s=1000ms
delay(1000);
// turn the LED off by making the voltage LOW
// 通过输出低电压关掉LED灯
digitalWrite(LED_BUILTIN, LOW);
// wait for a second
delay(1000);
}
完整代码
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
编程环境的搭建
1.APP下载网站:https://www.arduino.cc/en/software
2.编程前准备:
3.选择相对应的单片机型号(本例子Arduino Uno),选择单片机与电脑连接的端口(我的端口COM6)
4.写程序
5.确认单片机与电脑建立了连接,点击APP上的上传按钮
6.按一下单片机上的reset按钮,程序即可运行
兴趣扩展——超声波测量距离
原理:超声波模块会发出声波,遇到物体会被反弹回来,当超声波模块接收到反弹回来的声波时,单片机会将发射出去到反弹回来这段时间记录下来,然后我们已知声速为340m/s。就可以知道距离了
程序的编写有兴趣的同学可以上网查询资料,自己尝试着做!