2013年5月5日 星期日

Arduino範例07:LED燈依序發亮

這次要做的是利用陣列來產生依序的輸出,主要用的是 for ( ) 語法。
如下圖所示,表達的就是 0~99 的數列,共100個數字。

所以我們們將用 for 函數輸出 0~5等6個數字,再對應數位出輸的腳位。
輸出的腳位接上LED燈,就可以看到燈從第一個依序亮到最後一個,
再由最後一個亮回第一個,並且在第一個停留0.5秒。

Video

接線圖
接線的方式十分簡單,就將6個LED燈接到digital output的腳位上。
(我的是Ardunio Mega2560,所以有到30以上的腳位)

Code

7 則留言:

  1. 哈囉!!可以稱呼您為明哥嗎??

    你的文章淺顯易懂!!我受益很多!!非常感謝

    可以請教您一個問題嗎??

    我想用按鈕來控制跑馬燈!! 動作如下:

    按一次!!開始跑馬燈動作,再按一次,燈光熄滅。

    在此附上我的程式碼!!可以請您幫我看看那邊有錯誤嗎??

    感謝


    code:
    int LEDs[] = {12,13};
    int total = sizeof(LEDs);
    int button = 2;
    int state = 0;
    int index = 0;

    void setup()
    {
    for (int i =0;i<total;i++)
    pinMode(LEDs[i],OUTPUT);
    pinMode(button,INPUT);
    }

    void loop()
    {
    for(int i = 0;i<total;i++)
    {
    digitalWrite(LEDs[i],LOW);
    }
    digitalWrite(LEDs[index],HIGH);
    index ++;
    if(index == total)
    {
    index = 0;
    }
    delay(200);


    state = digitalRead(button);
    if(state == LOW)
    {
    digitalWrite(LEDs[index],HIGH);
    }
    else
    {
    digitalWrite(LEDs[index],LOW);
    }
    delay(200);
    }

    回覆刪除
  2. 哈囉!!我剛有修改了一下!!

    大概可以停止,不過跟我要的還有些距離

    修改部分!!
    if(state == LOW)
    {
    digitalWrite(13,HIGH);
    }
    else
    {
    digitalWrite(13,LOW);
    }
    delay(500);
    }

    回覆刪除
  3. 還是我需要一顆按鈕對應一顆led呢??

    回覆刪除
    回覆
    1. 不好意思,最近比較忙一點,來不及回。
      你要做的事情是用一個按鈕來開關跑馬燈嗎?那你要不要直接使用Switch的開關 (按下去不會跳回來的那種機械開關),抓裡來當作程式中最外層 if 的case,裡面再包跑馬燈的程式。不然我看你又加state 又加 index的變數,我沒有很懂這兩個參數的目的。

      刪除
    2. 就是在loop之下,再加一個if (button ==HIGH) { 原本的程式} else {全部關掉}

      刪除
  4. 請問要一次依序滅兩顆LED呢?

    回覆刪除
  5. 請問我要寫有關彈珠台 紅外線感應彈珠的程式
    要怎麼寫比較好

    回覆刪除