表2 使用者控制 Led 程式二
使用者控制Led程式二(Water_light_Button_int)
const byte interruptPin = 2;
int LedDirection = 1 ;
int LedPins[] = {4,5,6,7,8,9,10,11} ;
int NowLedOn = 0 ;
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin Blink_Led_Pin as an output.
// pinMode(ButtonPin,INPUT) ;
for(int i=0; i <8 ; i++)
{
pinMode(LedPins[i], OUTPUT); //定義Blink_Led_Pin為輸出腳位
digitalWrite(LedPins[i], LOW); // 將腳位Blink_Led_Pin設定為低電位 turn the LED off by making the voltage LOW
}
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), ButtonisPressed, FALLING );
}
// the loop function runs over and over again forever
void loop() {
// int btnValue = digitalRead(ButtonPin) ;
// if (!btnValue)
// LedDirection = LedDirection* (-1 );
// if
for (int i =0 ; i < 8; i++)
{
if (NowLedOn == i)
{
digitalWrite(LedPins[i], HIGH); // turn on Led
}
else
{
digitalWrite(LedPins[i], LOW); // turn off Led
}
}
if (LedDirection == 1)
{
NowLedOn ++ ; //right side move
}
else
{
NowLedOn -- ; //left side move
}
if (NowLedOn >=8) // check right side
NowLedOn= 0 ;
if (NowLedOn < 0) // check left side
NowLedOn= 7 ;
delay(1000) ;
}
void ButtonisPressed()
{
LedDirection = LedDirection* (-1 );
}
程式下載:
https://github.com/brucetsao/arduino_Programming_Trick
讀者也可以在作者 YouTube 頻道(https://www.youtube.com/user/UltimaBruce )中,在網址https://www.youtube.com/watch?v=Kbj_DLyvOa8&feature=youtu.be ,看到本次實驗-使用者控制 Led 程式二結果畫面。
當然、如下圖所示,我們可以看到使用者控制Led程式二結果畫面,。
圖1 使用者控制 Led 程式二結果畫面
使用硬體插斷的好處
我們使用了『硬體插斷』這個技巧,並把實體按鈕的訊號輸出當成硬體插斷的觸發,透過硬體插斷執行函式來產生方向變數的變更,加快了使用者快速、有效的反應,並這樣的技巧,讓程式更加簡潔、方便。
硬體插斷這個技巧,這是又是我們再攥寫 Arduino 程式時,常常使用的一個技巧。希望讀者閱讀本文之後,可以學到這個技巧,並可以熟用這個技巧,在往後將會把程式寫得更加穩定,系統更加龐大,複雜與功能強大,但臭蟲(Bugs)會更少。
後續
本篇為『MAKER 系列』系列之程式設計篇子系列第五篇:加入使用者控制的技巧(下篇),針對在許多 I/O 腳位控制程序中,使用者操作使用硬體插斷來改變原有控制結果。相信讀者會對程序中加入使用者控制程序的寫作概念,有更進一步的了解與體認。
筆者本系列是針對非資訊、電機、電子等 Makers 攥寫的系列,這三、四年來在 Maker 領域寫書、發表文章、辦展、授課,常遇到許多學子訓練不足,以交作業的心態來學習,並沒有把程式底子打好。
後續筆者還會繼續發表『MAKER 系列』系列的文章,在未來我們可以創造出更優質,更具未來性的物聯網(Internet of Thing:IOT)產品開發相關技術。
敬請期待更多的文章。
最後一頁是作者的介紹哦~
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!