元件清单

硬件连接

示例代码
// 项目 - 交通信号灯
int carRed = 12; // 汽车红灯引脚
int carYellow = 11; // 汽车黄灯引脚
int carGreen = 10; // 汽车绿灯引脚
int button = 9; // 按钮引脚
int pedRed = 8; // 行人红灯引脚
int pedGreen = 7; // 行人绿灯引脚
int crossTime = 5000; // 允许行人通过的时间(毫秒)
unsigned long changeTime; // 按钮按下后的时间
void setup() {
// 初始化引脚模式
pinMode(carRed, OUTPUT);
pinMode(carYellow, OUTPUT);
pinMode(carGreen, OUTPUT);
pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
pinMode(button, INPUT); // 按钮设置为输入模式
// 初始状态设置
digitalWrite(carGreen, HIGH); // 车行绿灯亮
digitalWrite(pedRed, HIGH); // 人行红灯亮
}
void loop() {
int state = digitalRead(button);
// 检测按钮状态及时间间隔
if (state == HIGH && (millis() - changeTime) > 5000) {
// 调用变灯函数
changeLights();
}
}
void changeLights() {
// 汽车绿灯变黄灯
digitalWrite(carGreen, LOW);
digitalWrite(carYellow, HIGH);
delay(2000); // 等待2秒
// 汽车黄灯变红灯
digitalWrite(carYellow, LOW);
digitalWrite(carRed, HIGH);
delay(1000); // 为安全考虑等待1秒
// 行人红灯变绿灯
digitalWrite(pedRed, LOW);
digitalWrite(pedGreen, HIGH);
// 行人绿灯亮,持续crossTime毫秒
delay(crossTime);
// 闪烁行人绿灯,提示时间快到
for (int x = 0; x < 10; x++) {
digitalWrite(pedGreen, HIGH);
delay(250);
digitalWrite(pedGreen, LOW);
delay(250);
}
// 行人红灯再次亮起
digitalWrite(pedRed, HIGH);
delay(500);
// 恢复到汽车绿灯亮状态
digitalWrite(carRed, LOW);
digitalWrite(carYellow, HIGH);
delay(1000);
digitalWrite(carYellow, LOW);
digitalWrite(carGreen, HIGH);
// 更新changeTime
changeTime = millis();
}
代码回顾
变量这个盒子无限大吗?
下表列出了程序中可能用到的变量数据类型:


这是一个函数调用的例子。该函数单独写在了loop()函数之外。我们需要使用时,直接写出函数名就可以实现调用了。该函数是void型,所以是无返回值、无传递参数的函数。当函数被调用时,程序也就自动跳到它的函数中运行。运行完之后,再跳回主函数。需要特别注意的:函数调用时,函数名后面的括号不能省,要和所写的函数保持一致。changeLights() 函数内部就不做说明了。
逻辑运算符
前面说到的&&是一个逻辑运算符,常用的逻辑运算符有:
&& —— 逻辑与(两者同时满足)
|| —— 逻辑或(两者其中一个满足)
!—— 逻辑非(取反,相反的情况)
硬件回顾
按键开关
按键一共有4个引脚,图2分别显示了正面与背面。而图3则说明了按键的工作原理。一旦按下后,左右两侧就被导通了,而上下两端始终导通。


在图4中,按键仅起到一个通断的作用。但在本项目中,按键要能被读取状态,所以除了要将按键的1、2(或者3、4;1、4;2、3)引脚连入电路中,还需要接入信号口。按下的话,数字引脚9就能检测到为高电平。否则就是保持一个低电平的状态。

下拉电阻
下拉电阻这个名词可能比较抽象,从字的含义着手,“下拉”我们就理解为把电压往下拉,降低电压。按键作为开关,当输入电路状态为高电平(high)的时候,电压要尽可能接近5V;输入电路状态为低电平(low)的时候,电压要尽可能接近0V。为了避免状态偏离所需电压造成的电压浮动现象,在按键电路中,我们将一个电阻串联在输入(input)引脚和接地(ground)之间,将按键未被按下的输入状态固定在低电平,这个电阻就是所谓下拉电阻。
可以从下面两张图看到,图5是未接下拉电阻的电路,按键未被按下时,输入引脚就处于一个悬空状态。空气会使该引脚电压产生浮动,不能确保是0V。然而图6是接了下拉电阻的电路,当按键未被按下时,输入引脚通过电阻接地,确保为0V,不会产生电压浮动现象。


课后练习
1、选择任意颜色LED 6个,做一个流水灯的效果,6盏灯从左至右依次点亮,重复循环这个过程。

2、如果上面那个你已经完成了的话,可以尝试一下,先从中间的灯开始亮起,依次向两边扩开。下图是个变换过程的示意图。

3、再比如,从左至右,依次亮起1 个,2个,3个……

注意:本文归作者所有,未经作者允许,不得转载