使用 Arduino Nano 控制红绿灯

  • 内容
  • 评论
  • 相关

本文将介绍如何基于一个简单PCB洞洞板制作红绿灯,并通过Arduino Nano R3对它进行控制。

元器件清单

  1. Arduino Nano R3
  2. LED发光二极管(红、绿、黄)
  3. 220欧姆电阻3个
  4. 按钮开关
  5. 洞洞板
  6. 单排母插针
  7. 烙铁

电路原理图

Arduino Nano制作红绿灯连接图

电路连接图,因为软件中没有找到Nano的原型图,所以用UNO代替了,但是两者间所示的接口都是一样的。三个按钮开关分别连接Nano的GND和10、11、12针;Nano的4、5、6针分别通过三个220欧电阻连接LED发光二极管的正极,负极接Nano的GND。

红绿灯焊接

采用洞洞板的目的,是可以将所有的原件焊接在一起,更利于后续的美化。同时使用单排母插针焊接在PCB洞洞板一侧,这样可以方便将Arduino Nano随时插入和取下来,所有分立元件焊接在另一侧,这样看上去会简洁很多。

控制代码

本项目的代码和电路一样非常简单,易于实现。完整代码如下:

const int led[3] = {4, 5, 6};
const int button[3] = {10, 12, 11};

int state[3] = {0, 0, 0};
int button_on[3] = {0, 0, 0};
long last_time[3] = {0, 0, 0};
long cur_time[3] = {0, 0, 0};
long debounce_delay = 500;


void setup() {
  for (int i = 0; i < 3; i++) {
    pinMode(led[i], OUTPUT);
  }
  for (int i = 0; i < 3; i++) {
    pinMode(button[i], INPUT_PULLUP);
  }
}

void loop() {
  for (int i = 0; i < 3; i++) {
    digitalWrite(led[i], state[i]);
    button_on[i] = (digitalRead(button[i]) == LOW);
    cur_time[i] = millis();
    if (cur_time[i] - last_time[i] > debounce_delay) {
      if (button_on[i]) {
        state[i] = 1 - state[i];
        last_time[i] = cur_time[i];    
      }
    };
  };    
}