此项目名为智能城市设计,是本人物联网短距离通信技术的课程设计。它属于入门级别的设计,却在课程答辩时得到了老师和同学的一致好评,所以想分享给大家希望能够帮助更多的同道中人。但是仅适用新手入门小白,对于资深大佬而言较为简单。
一、项目介绍
智能城市项目共分为五个部分,即交通信号灯系统、火灾报警系统、环境监测系统、路灯控制系统和智能垃圾桶。在下打算用六篇文章来发布,分别对应这五个系统和最后的总结。在文章后面附上模块代码都可以单独编译上传,便于大家使用。本文章介绍第一个模块也是最简单的一个模块——交通信号灯系统。
二、模块介绍
交通信号灯系统由红、黄、绿三种不同颜色的LED发光二极管来模拟红、黄、绿三种不同颜色的交通信号灯,他们会成流水灯形式点亮。初始状态下三个灯都是熄灭状态,然后绿灯亮,五秒后绿灯熄灭黄灯亮,两秒后黄灯熄灭红灯亮,再五秒后红灯熄灭绿灯亮,以此循环。
三、所需材料
红、黄、绿三色的LED发光二极管各一个,arduino uno r3开发板、杜邦线若干。
四、接线
引脚编号 | 红色LED发光二极管引脚名称 | Arduino Uno R3 引脚名称 | 黄色LED发光二极管引脚名称 | Arduino Uno R3 引脚名称 | 绿色LED发光二极管引脚名称 | Arduino Uno R3 引脚名称 |
1 | Vcc | D10 | Vcc | D9 | Vcc | D8 |
3 | GND | GND | GND | GND | GND | GND |
五、代码介绍
// 定义绿灯、黄灯、红灯对应的引脚编号
int GREEN = 8;
int YELLOW = 9;
int RED = 10;
// 定义最大值
#define MAX_VALUE 24
// 定义一个变量用于循环计数
int myVariable = 1;
// 初始化函数,用于设置引脚模式
void setup() {
// 设置绿灯引脚为输出模式
pinMode(GREEN, OUTPUT);
// 设置黄灯引脚为输出模式
pinMode(YELLOW, OUTPUT);
// 设置红灯引脚为输出模式
pinMode(RED, OUTPUT);
}
// 主循环函数
void loop() {
// 无限循环
while (true) {
// 如果myVariable大于或等于最大值,则重置为1
if (myVariable >= MAX_VALUE) {
myVariable = 1;
} else {
// 否则,myVariable自增
myVariable++;
}
// 根据myVariable的值控制灯的显示
if(myVariable <= 10)
{
// 当myVariable小于等于10时,显示绿灯
green_light();
}
else if(myVariable > 10 && myVariable <= 14) // 使用else if可以避免不必要的判断
{
// 当myVariable大于10且小于等于14时,显示黄灯
yellow_light();
}
else if(myVariable > 14 && myVariable <= 24)
{
// 当myVariable大于14且小于等于24时,显示红灯
red_light();
}
// 延时500毫秒
delay(500);
}
}
// 绿灯亮起函数
void green_light() {
// 绿灯引脚输出高电平,即亮起
digitalWrite(GREEN, HIGH);
// 黄灯引脚输出低电平,即熄灭
digitalWrite(YELLOW, LOW);
// 红灯引脚输出低电平,即熄灭
digitalWrite(RED, LOW);
}
// 黄灯亮起函数
void yellow_light() {
// 绿灯引脚输出低电平,即熄灭
digitalWrite(GREEN, LOW);
// 黄灯引脚输出高电平,即亮起
digitalWrite(YELLOW, HIGH);
// 红灯引脚输出低电平,即熄灭
digitalWrite(RED, LOW);
}
// 红灯亮起函数
void red_light() {
// 绿灯引脚输出低电平,即熄灭
digitalWrite(GREEN, LOW);
// 黄灯引脚输出低电平,即熄灭
digitalWrite(YELLOW, LOW);
// 红灯引脚输出高电平,即亮起
digitalWrite(RED, HIGH);
}
在loop函数中使用的while循环时为了结合剩余四个模块,如果只想实现红绿灯系统一下可先将两行代码去除:
#define MAX_VALUE 24 // 假设我们有一个最大值,以防止变量无限增长
int myVariable = 1; // 初始化整型变量
再把void loop{}中的内容替换为以下代码:
digitalWrite(greenPin, HIGH); // 绿灯亮
delay(5000); // 等待5秒
digitalWrite(greenPin, LOW); // 绿灯灭
digitalWrite(yellowPin, HIGH); // 黄灯亮
delay(2000); // 等待2秒
digitalWrite(yellowPin, LOW); // 黄灯灭
digitalWrite(redPin, HIGH); // 红灯亮
delay(5000); // 等待5秒
digitalWrite(redPin, LOW); // 红灯灭
后续模块将在主页陆续发布。