Follower

2017年7月21日 星期五

【Arduino Lesson 5】廣告燈

  這週有一位老朋友拜訪,稍微拖更了;是說本來就想維持一週一更新的頻率,不過都照這頻率更新,可能要花費35週才能全數完成〈因為有35篇實作課〉,以一個月四週下去算,大概9個月才能全部寫完,算是工程浩大了,而且這時間還不包括會寫非Arduino的主題、研究工作太忙或是進行社交活動而拖更,所以最後若花費一年時間也完全合情合理,不過到時候我就已經在寫論文或準備畢業了吧【o´゚□゚`o】 ~~~。
※拖更:拖延更新



  在進入正題之前,稍微聊一下自己的近況;小弟我已經在今年三月中就卸下在成功大學的研究工作,因為當時已經考上臺北科技大學並且表明要北上念書,而老闆是一個開明的人,尊重我的決定〈感謝老闆RRR~~QQ〉,爾後我就只單純以「課程助教」的身分,每週一到中正大學去帶物聯網的實驗課〈課程助教是唯一保留的工作〉,而非週一的時間基本上人都在成大,至於平日在做什麼就請容許我保密,我不想承擔太多眼光和壓力( ´Д`)y━・~~。
  約莫兩週我會上一次北部,有時候會一週回去一次,看心情而定〈有朋友說我的摳摳蠻多的,事實上我確實在經濟上比較寬裕,但這幾個月因為玩太兇和已預支要買一些私人用的電子器材,導致荷包緊緊地QQ〉,所以「南北通勤」這件事算是很平常且習慣了,高鐵、臺鐵和客運的通勤方式都使用過;最喜歡的是使用客運,一來便宜,二來蠻容易入睡的XD,不過缺點是搭一次要四~五個鐘頭,但習慣後就還好了。
  這禮拜是在成大的倒數第二個禮拜,有感而發才烙烙長打了一大堆心情小語,或許在成大的最後一週的更新廢話會更多吧Σ(=ω= ;) ~~。


  回歸到我們的正題:廣告燈
廣告燈實體成果

實作目標:

  • 讓LED從左到右順向發亮,再讓LED從左到右順向關閉。

硬體電路:

廣告燈的硬體電路

  • 這邊可以看到每一顆LED都加上限流電阻,不過經過實驗得知,其實不加限流電組也可以,但為求元件的完好,請加上一顆限流電阻以策安全
  • 也可以把LED負端全部串起聯後使用一顆限流電阻。

程式碼:

int BASE = 2 ; //第一顆 LED 接的 I/O Pin腳
int NUM = 6 ; //LED的總數
void setup()
{
  for(int i = BASE ; i < BASE + NUM ; i++ ) //因為預設第一顆LED是port2,所以使用for迴圈打開port要用第一顆預設port加上總數
  {
    pinMode(i, OUTPUT) ; //解釋同上
  }
}
void loop()
{
  for(int i = BASE ; i < BASE + NUM ; i++ )
  {
    digitalWrite(i, HIGH) ; //設定高電位(5V)讓LED發亮
    delay(200) ; //延遲0.2秒
  }
  for(int i = BASE ; i < BASE + NUM ; i++ )
  {
    digitalWrite(i, LOW) ; //設定低電位(0V)讓LED熄滅
    delay(200) ; //延遲0.2秒
  }
}

實作成果:


研究討論:

  1. 學生在課堂上實作有遇到把LED全部接在Arduino版子上的+5V,這樣的接法在硬體電路沒錯,LED本來就必須透過輸入工作電壓去推動,不過因為這是微控制器,輸入輸出都是靠各個Port和Code來處理,所以當把LED接在Arduino上5V的時候會形成一個不斷供電的封閉回路,我們就無法透過Port控制LED的運作,此問題在「Arduino Lesson 2」的硬體電路部分有提及,不熟悉的人可以再回去複習一下。
  2. 此實作有一個變化電路,就是轉動可變電阻讓LED達到流水燈的效果,Code上可以使用map()函式達到此效果,「Arduino Lesson 3」的可調光LED亦可使用map()函式,此函式的結構是map(variable, constant, constant, constant, constant),以一個實例為例子:map(val, 0, 1023, 0, 1, 50),就是把0~1023儲存在val這個變數裡,並讓0~1023對應到1~50的數值區間內

沒有留言:

張貼留言