2016年9月17日 星期六

Arduino 霹靂燈實驗

  1. 功能簡介
    1. 使用 Arduino 控制 6 個 LED,造成霹靂燈的效果
    2. 使用電位器決定霹靂燈移動的延遲時間
    3. 將電位器輸入與延遲時間顯示在 LCD 顯示器上
  2. 電路連接
    1. LED 接於 Arduino 的 D2 至 D7,每顆 LED 均串接一個 220 歐姆 的限流電阻 
    2. 電位器中間接腳接至Arduino 的 A0 輸入,電位器兩端接腳分別接至 5V 與 GND
    3. LCD1602 透過 LCM1602 接至 Arduino 的 SDA (A4) 與 SCL (A5)

      Pili_Light_bb
  3. 程式
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    
    int ledPin[] = { 2, 3, 4, 5, 6, 7 };
    int delayMs;
    int i = 0, d = 1;
    
    // 設定 LCD 的位址、每行字數、行數
    LiquidCrystal_I2C lcd(0x27, 16, 2); 
    
    void setup()
    {
    // 設定輸出 pin 模式
    for (int i = 0; i < 6; i++)
             pinMode(ledPin[i], OUTPUT);
         // 初始化 LCD 顯示器
         lcd.init();
         lcd.backlight(); } void loop() {

         // 讀取電位器輸入
    delayMs = analogRead(A0);
         lcd.setCursor(0, 0);
         lcd.print("A0 = " + String(delayMs) + "   ");
    // 限制延遲的範圍
         delayMs = map(delayMs, 0, 1023, 5, 500);
         lcd.setCursor(0, 1);
         lcd.print("Delay = " + String(delayMs) + "   ");


         // 點滅控制
    digitalWrite(ledPin[0], 0 == i ? HIGH : LOW);
         digitalWrite(ledPin[1], 1 == i ? HIGH : LOW);
         digitalWrite(ledPin[2], 2 == i ? HIGH : LOW);
         digitalWrite(ledPin[3], 3 == i ? HIGH : LOW);
         digitalWrite(ledPin[4], 4 == i ? HIGH : LOW);
         digitalWrite(ledPin[5], 5 == i ? HIGH : LOW);
         delay(delayMs);
         i += d;
    // 換方向的控制
    if (5 == i)
             d = -1;
         else if (0 == i)
             d = 1; }
  4. 運行影片