基于arduino的智能城市课设模块1——交通信号灯系统

        此项目名为智能城市设计,是本人物联网短距离通信技术的课程设计。它属于入门级别的设计,却在课程答辩时得到了老师和同学的一致好评,所以想分享给大家希望能够帮助更多的同道中人。但是仅适用新手入门小白,对于资深大佬而言较为简单。

一、项目介绍

        智能城市项目共分为五个部分,即交通信号灯系统、火灾报警系统、环境监测系统、路灯控制系统和智能垃圾桶。在下打算用六篇文章来发布,分别对应这五个系统和最后的总结。在文章后面附上模块代码都可以单独编译上传,便于大家使用。本文章介绍第一个模块也是最简单的一个模块——交通信号灯系统。

二、模块介绍

     交通信号灯系统由红、黄、绿三种不同颜色的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);      // 红灯灭

         后续模块将在主页陆续发布。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值