一、交通灯
硬件
Arduino Uno
WS2812B串行5050全彩驱动LED
TM1637 4位数码管
环境
arduino IDE
实物
接线
Arduino | 数码管 |
---|---|
5V | VCC |
GND | GND |
11 | CLK |
12 | DIO |
Arduino | 5050全彩驱动LED |
---|---|
5V | VCC |
GND | GND |
2 | S |
程序
#include <TM1637.h>
// 数码管 配置引脚
#define CLK 11 //!参数 clk -数字引脚连接到模块的时钟引脚数
#define DIO 12//!参数 dio -数字引脚连接到模块的DIO引脚数
TM1637 TM(CLK, DIO);//!初始化一个TM1637对象,设置时钟和数据引脚。
//RGB 彩灯
#include <Adafruit_NeoPixel.h>
#define PIN 2
#define MAX_LED 9
Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );//长度,引脚,类型
uint32_t color_green = strip.Color(255,0,0); //绿 红 蓝
uint32_t color_red = strip.Color(0,255,0);
uint32_t color_yellow = strip.Color(255,255,0);
uint32_t color_traffic[]={color_red,color_yellow,color_green};
//红灯10秒 绿灯10秒 黄灯2秒
int red_light=5;
int green_light=5;
int yellow_light=2;
int time_count=15; //总时间 15s
int time_=0;//时间
void setup() {
TM.show(true);//设置数码管显示 为真显示,否则不显示
// TM.DNum(00,red_light,true);//显示双数字,左边两位显示num1最后两位;左边两位显示num2最后两位;piont 是否显示中间的两点
strip.begin(); //初始化Adafruit_NeoPixel;
// initalize_rgb(color_traffic[0]);//初始化彩灯颜色为红色
}
void loop(){
static unsigned long time_light=0;
if(millis()-time_light>1000){//计算时间 1秒 time_ +1
time_light=millis();
time_++;
}
if(time_<=red_light){//红灯
traffic(red_light-time_); //时间
initalize_rgb(color_traffic[0]);//颜色
}
else if(time_<=yellow_light+red_light){//黄灯
traffic(yellow_light+red_light-time_);
initalize_rgb(color_traffic[1]);
}e