一、交通灯

硬件

Arduino Uno
WS2812B串行5050全彩驱动LED
TM1637 4位数码管

环境

arduino IDE

实物

image.png

接线

Arduino 数码管
5V VCC
GND GND
11 CLK
12 DIO
Arduino 5050全彩驱动LED
5V VCC
GND GND
2 S

程序

  1. #include <TM1637.h>
  2. // 数码管 配置引脚
  3. #define CLK 11 //!参数 clk -数字引脚连接到模块的时钟引脚数
  4. #define DIO 12//!参数 dio -数字引脚连接到模块的DIO引脚数
  5. TM1637 TM(CLK, DIO);//!初始化一个TM1637对象,设置时钟和数据引脚。
  6. //RGB 彩灯
  7. #include <Adafruit_NeoPixel.h>
  8. #define PIN 2
  9. #define MAX_LED 9
  10. Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );//长度,引脚,类型
  11. uint32_t color_green = strip.Color(255,0,0); //绿 红 蓝
  12. uint32_t color_red = strip.Color(0,255,0);
  13. uint32_t color_yellow = strip.Color(255,255,0);
  14. uint32_t color_traffic[]={color_red,color_yellow,color_green};
  15. //红灯10秒 绿灯10秒 黄灯2秒
  16. int red_light=5;
  17. int green_light=5;
  18. int yellow_light=2;
  19. int time_count=15; //总时间 15s
  20. int time_=0;//时间
  21. void setup() {
  22. TM.show(true);//设置数码管显示 为真显示,否则不显示
  23. // TM.DNum(00,red_light,true);//显示双数字,左边两位显示num1最后两位;左边两位显示num2最后两位;piont 是否显示中间的两点
  24. strip.begin(); //初始化Adafruit_NeoPixel;
  25. // initalize_rgb(color_traffic[0]);//初始化彩灯颜色为红色
  26. }
  27. void loop(){
  28. static unsigned long time_light=0;
  29. if(millis()-time_light>1000){//计算时间 1秒 time_ +1
  30. time_light=millis();
  31. time_++;
  32. }
  33. if(time_<=red_light){//红灯
  34. traffic(red_light-time_); //时间
  35. initalize_rgb(color_traffic[0]);//颜色
  36. }
  37. else if(time_<=yellow_light+red_light){//黄灯
  38. traffic(yellow_light+red_light-time_);
  39. initalize_rgb(color_traffic[1]);
  40. }else if(time_<=yellow_light+red_light+green_light){//绿灯
  41. traffic(yellow_light+red_light+green_light-time_);
  42. initalize_rgb(color_traffic[2]);
  43. }else if(time_<=yellow_light*2+red_light+green_light){//黄灯
  44. traffic(yellow_light*2+red_light+green_light-time_);
  45. initalize_rgb(color_traffic[1]);
  46. }
  47. if(time_==time_count) time_=0;//时间归零
  48. }
  49. void traffic(int time_traffic){
  50. TM.DNum(00,time_traffic,true);
  51. time_traffic--;
  52. }
  53. void initalize_rgb(uint32_t color){
  54. strip.setPixelColor(0, color);//颜色
  55. strip.setPixelColor(1, color);
  56. strip.setBrightness(255);//亮度
  57. strip.show();//显示
  58. }
  59. ————————————————
  60. 版权声明:本文为CSDN博主「沸腾石灰」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  61. 原文链接:https://blog.csdn.net/m0_37738838/article/details/89519578