專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> Arduino >> 瀏覽文章

Arduino學(xué)習(xí)-LED跑馬燈

作者:快樂(lè)的堯   來(lái)源:快樂(lè)的堯   點(diǎn)擊數(shù):  更新時(shí)間:2014年07月31日   【字體:

如果要制作LED跑馬燈的話,需要:

(1)  10個(gè)LED燈(顏色隨便)
(2)  面包板及連接線若干根(10根連接LED,一根連接5v)
(3)  1KΩ電阻1個(gè)(因?yàn)槊看沃涣烈粋(gè)燈,所以一個(gè)電阻就夠了,一段連接5V電源正極,一端連接所有LED的正極,書(shū)上的例子沒(méi)好好思考過(guò)這個(gè)問(wèn)題,給每個(gè)LED串聯(lián)了一個(gè)電阻)
 
 
開(kāi)始寫(xiě)程序啦:
 
byte ledPin[ ] = {2, 3, 4, 5, 7, 8, 9, 10, 11};     //以LED引腳創(chuàng)建數(shù)組
int ledDelay(250);    //變換燈之間的延時(shí),你愛(ài)多少寫(xiě)多少(毫秒)
int dir = 1;
int currentLED = 0;
unsigned long changeTime;
void setup() {
    for (int x=0; x<9; x++)    //設(shè)置所有引腳為輸出模式
    {
      pinMode(ledPin[x], OUTPUT);
    }
    changeTime = millis();
}
void loop()  
{       
  if((millis() - changeTime) > ledDelay)    //如果過(guò)了ledDelay毫秒,執(zhí)行以下程序
  {
    changeLED();
    changeTime = millis();
  }
}
 
void changeLED() {  
  for (int x=0; x<9; x++) {   //關(guān)閉所有燈
    digitalWrite(ledPin[x], HIGH);
  }
digitalWrite(ledPin[currentLED], LOW);    //開(kāi)一個(gè)燈
currentLED+=dir;
if (currentLED == 8) {dir = -1;}
if (currentLED == 0) {dir = 1;}     //讓燈輪流亮,到底換方向
}
 
 
結(jié)果如下
 
這里,函數(shù)millis()描述返回Arduino開(kāi)發(fā)板從運(yùn)行當(dāng)前程序開(kāi)始的毫秒數(shù),是一個(gè)無(wú)符號(hào)長(zhǎng)整數(shù)。不要以為一直數(shù)得下去,數(shù)到4294967296毫秒就歸零繼續(xù)計(jì)數(shù)?4294967296毫秒是什么概念呢?4294967296毫秒-->420萬(wàn)秒多-->7萬(wàn)多分鐘-->1千多小時(shí)-->約49天多。而millis指的是毫秒。為啥要用毫秒?用秒的話幾毫秒不要小數(shù)點(diǎn)寫(xiě)死了?
關(guān)閉窗口