本篇為『MAKER 系列』系列之程式設計篇子系列第三篇:多腳位定義的技巧(下篇),乃是多腳位定義的技巧(上篇)之下集。筆者本系列是針對非資訊、電機、電子等 Makers 攥寫的系列,這三、四年來在 Maker 領域寫書、發表文章、辦展、授課,常遇到許多學子訓練不足,以交作業的心態來學習,並沒有把程式底子打好。<p>上篇中談到在 Arduino 開發版程式設計之中,同時使用多個GPIO非常常見,但是GPIO腳位的變動更是頻繁,一旦 GPIO 腳位變動,相對應的程式必須要相對變更,所以使用陣列變數來替代單一變數Define宣告,(曹永忠, 吳佳駿, 許智誠, &amp; 蔡英德, 2016a, 2016b, 2016c),對陣列變數控制與使用,最更進一步介紹與深入。</p>
<p>本文內容希望透過筆者的經驗,一步一步分享筆者解決這樣問題的經驗,透過這樣練習,讓讀者可以養成正確有效的寫作習慣,避免往後無所謂的臭蟲(Bugs)產生。</p>
<p>本系列希望貢獻筆者一些經驗,讓非資訊、電機、電子等 Makers 可以學到一些程式開發的技巧、原理、法則與穩固的技術,因本系列文章主要讀者為初學者,內容程度為基礎入門程度,深入之處不足,但請高手們給筆者賜教,也請讀者關注本系列。</p>
<h2>使用燈號狀態簡化程式</h2>
<p>如下圖所示,我們發現我們使用八個 Leds 燈,而燈號成為連續數字,所以我們如果使用陣列變數來代表腳位,可以更有效管理這些腳位。</p>
<p style="text-align: center;"><img src="https://cdn1-techbang.pixcdn.tw/system/images/379215/original/b00253de8758a9efd4b0dc85283746ce.jpg?1483609283" alt="" /><br />圖 1 流水燈連接電路圖</p>
<p style="text-align: left;">我們在上表:使用陣列與迴圈設定腳位程式,我們用陣列與迴圈來簡化腳位的設定與初始化,但我們在流水燈範例程式中,流水燈的動作還未寫出來,如下表所示。我們先看看流水燈範例程式中燈號動作的程式</p>
<p style="text-align: center;">表 1 流水燈動作程式</p>
<table style="margin-left: auto; margin-right: auto;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="64" valign="top">
<p>步驟</p>
</td>
<td width="508" valign="top">
<p>程式碼</p>
</td>
</tr>
<tr>
<td width="64" valign="top">
<p>第一燈</p>
</td>
<td width="508" valign="top">
<p>&nbsp; // Step 1</p>
<p>&nbsp;<strong><em><span style="text-decoration: underline;">&nbsp;digitalWrite(Led1_Pin, HIGH); </span></em></strong>&nbsp;&nbsp;&nbsp;// 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led2_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led3_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led4_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led5_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led6_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led7_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led8_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; delay(1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //休息1秒 wait for a second&nbsp;</p>
</td>
</tr>
<tr>
<td width="64" valign="top">
<p>第二燈</p>
</td>
<td width="508" valign="top">
<p>&nbsp; // Step 2</p>
<p>&nbsp; digitalWrite(Led1_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; <strong><em><span style="text-decoration: underline;">digitalWrite(Led2_Pin, HIGH); </span></em></strong>&nbsp;&nbsp;&nbsp;// 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led3_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led4_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led5_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led6_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led7_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led8_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; delay(1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //休息1秒 wait for a second&nbsp;</p>
</td>
</tr>
<tr>
<td width="64" valign="top">
<p>第三燈</p>
</td>
<td width="508" valign="top">
<p>&nbsp; // Step 3</p>
<p>&nbsp; digitalWrite(Led1_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led2_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; <strong><em><span style="text-decoration: underline;">digitalWrite(Led3_Pin, HIGH);&nbsp;&nbsp;&nbsp; </span></em></strong>// 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led4_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led5_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led6_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led7_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led8_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; delay(1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //休息1秒 wait for a second&nbsp;</p>
</td>
</tr>
<tr>
<td width="64" valign="top">
<p>第四燈</p>
</td>
<td width="508" valign="top">
<p>&nbsp;&nbsp;&nbsp; // Step 4</p>
<p>&nbsp; digitalWrite(Led1_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led2_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led3_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; <strong><em><span style="text-decoration: underline;">digitalWrite(Led4_Pin, HIGH);&nbsp;&nbsp;&nbsp; </span></em></strong>// 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led5_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led6_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led7_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led8_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; delay(1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //休息1秒 wait for a second&nbsp;</p>
</td>
</tr>
<tr>
<td width="64" valign="top">
<p>第五燈</p>
</td>
<td width="508" valign="top">
<p>&nbsp;&nbsp;&nbsp; // Step 5</p>
<p>&nbsp; digitalWrite(Led1_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led2_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led3_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led4_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; <strong><em><span style="text-decoration: underline;">digitalWrite(Led5_Pin, HIGH);&nbsp;&nbsp; </span></em></strong>&nbsp;// 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led6_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led7_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led8_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; delay(1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //休息1秒 wait for a second&nbsp;</p>
</td>
</tr>
<tr>
<td width="64" valign="top">
<p>第六燈</p>
</td>
<td width="508" valign="top">
<p>&nbsp;&nbsp;&nbsp; // Step 6</p>
<p>&nbsp; digitalWrite(Led1_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led2_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led3_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led4_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led5_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; <strong><em><span style="text-decoration: underline;">digitalWrite(Led6_Pin, HIGH);&nbsp;&nbsp; </span></em></strong>&nbsp;// 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led7_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led8_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; delay(1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //休息1秒 wait for a second&nbsp;</p>
</td>
</tr>
<tr>
<td width="64" valign="top">
<p>第七燈</p>
</td>
<td width="508" valign="top">
<p>&nbsp;&nbsp;&nbsp; // Step 7</p>
<p>&nbsp; digitalWrite(Led1_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led2_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led3_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led4_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led5_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led6_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp;<strong><em><span style="text-decoration: underline;">&nbsp;digitalWrite(Led7_Pin, HIGH);&nbsp;&nbsp;&nbsp; </span></em></strong>// 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led8_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; delay(1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //休息1秒 wait for a second&nbsp;</p>
</td>
</tr>
<tr>
<td width="64" valign="top">
<p>第八燈</p>
</td>
<td width="508" valign="top">
<p>&nbsp; // Step 8</p>
<p>&nbsp; digitalWrite(Led1_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led2_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led3_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led4_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led5_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led6_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; digitalWrite(Led7_Pin, LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; <strong><em><span style="text-decoration: underline;">digitalWrite(Led8_Pin, HIGH);&nbsp;&nbsp;&nbsp; </span></em></strong>// 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p>&nbsp; delay(1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //休息1秒 wait for a second&nbsp;</p>
<p>}</p>
</td>
</tr>
</tbody>
</table>
<p>在上表所示中,我們先看看流水燈範例程式中燈號動作的程式碼(紅色字、底線為主),只有這個燈號動作的程式碼中,將腳位都設成高電位(HIGH),其餘都是低電位(LOW),如果我設一個燈號的變數,來讓系統知道目前所亮的燈號,或許就可以知道如何控制燈號</p>
<blockquote>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="572" valign="top">
<p>int NowLedOn = 0 ;</p>
</td>
</tr>
</tbody>
</table>
</blockquote>
<p>我們再透過迴圈來處理八個燈號,如下列程式:</p>
<blockquote>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="557" valign="top">
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i =0 ; i &lt; 8; i++)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
</blockquote>
<p>然而我們並不知道在迴圈裡面,要亮哪個登,我們再將下表控制燈號亮與滅的if判斷式,加在迴圈程式裡。</p>
<p style="text-align: center;">表 2 控制燈號亮與滅</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="572" valign="top">
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (NowLedOn == i)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LedPins[i], HIGH);&nbsp;&nbsp; // turn on Led</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LedPins[i], LOW);&nbsp;&nbsp;&nbsp; // turn off Led</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
</td>
</tr>
</tbody>
</table>
<p>我們發現,六十四行的程式簡化成四行,依樣達到相同效果。</p>
<p>我們將使用陣列與迴圈控制燈號程式,上傳到開發板進行測試。</p>
<p style="text-align: center;">請接下一頁精彩教學唷 ~</p>
<p style="text-align: center;"><!-- pagebreak --></p>
<blockquote>
<p>表 3 使用陣列與迴圈控制燈號程式</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="572" valign="top">
<p class="a">使用陣列與迴圈控制燈號程式(W Water_light_Array_control_Led)</p>
</td>
</tr>
<tr>
<td width="572" valign="top">
<p class="a">int LedPins[] = {4,5,6,7,8,9,10,11} ;</p>
<p class="a">int NowLedOn = 0 ;</p>
<p class="a">// the setup function runs once when you press reset or power the board</p>
<p class="a">void setup() {</p>
<p class="a">&nbsp; // initialize digital pin Blink_Led_Pin as an output.</p>
<p class="a">&nbsp;&nbsp;&nbsp; for(int i=0; i &lt;8 ; i++)</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pinMode(LedPins[i], OUTPUT);&nbsp;&nbsp;&nbsp; //定義Blink_Led_Pin為輸出腳位</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;digitalWrite(LedPins[i], LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a">}</p>
<p class="a">// the loop function runs over and over again forever</p>
<p class="a">void loop() {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i =0 ; i &lt; 8; i++)</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (NowLedOn == i)</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LedPins[i], HIGH);&nbsp;&nbsp; // turn on Led</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LedPins[i], LOW);&nbsp;&nbsp;&nbsp; // turn off Led</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a">}</p>
</td>
</tr>
</tbody>
</table>
</blockquote>
<p>程式下載:<a href="https://github.com/brucetsao/arduino_Programming_Trick">https://github.com/brucetsao/arduino_Programming_Trick</a></p>
<p>當然、如下圖所示,我們可以看到使用陣列與迴圈控制燈號程式結果畫面,</p>
<p style="text-align: center;"><img src="https://cdn1-techbang.pixcdn.tw/system/images/379216/original/f483ef1031eea5e08efcdb2e8846bb64.jpg?1483609284" alt="" /><br />圖 2 使用陣列與迴圈控制燈號程式結果畫面</p>
<h2 style="text-align: left;">整合燈號變動變數控制流水燈亮</h2>
<p>我們發現,上圖中,程式正常執行,但是燈號只留在第一個燈,我們看看原來使用陣列與迴圈控制燈號程式,如下表所示,我們雖然使用了『NowLedOn』這個變數,來控制燈號所亮之處:</p>
<p>&nbsp;</p>
<blockquote>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="557" valign="top">
<p>int NowLedOn = 0 ;</p>
</td>
</tr>
</tbody>
</table>
<p class="a0">&nbsp;</p>
</blockquote>
<p>但是在使用陣列與迴圈控制燈號程之後所有用到『NowLedOn』這個變數的地方,卻沒有將『NowLedOn』這個變數值進行變動,難怪燈號會一直處在初始值『0』的地方。</p>
<p>&nbsp;</p>
<p>我們所知道,在 Arduino 開發版程式設計的地方,在 Setup()區只會執行一次,而loop()區則會不斷執行。(<a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/252/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V5.docx#_ENREF_4">曹永忠, 許智誠, &amp; 蔡英德, 2015a</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/252/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V5.docx#_ENREF_5">2015b</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/252/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V5.docx#_ENREF_6">2015c</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/252/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V5.docx#_ENREF_7">2015d</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/252/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V5.docx#_ENREF_8">2015e</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/252/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V5.docx#_ENREF_9">2015f</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/252/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V5.docx#_ENREF_10">2015g</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/252/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V5.docx#_ENREF_11">2015h</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/252/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V5.docx#_ENREF_12">2016a</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/252/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B8%80%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V5.docx#_ENREF_13">2016b</a>)</p>
<p>所以我們如果將『NowLedOn』這個變數加在 loop()區,如下表所示</p>
<blockquote>
<p>表 4 改變控制燈號變動變數</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="572" valign="top">
<p>&nbsp;&nbsp;&nbsp;&nbsp; NowLedOn ++ ;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; if (NowLedOn &gt;=8)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NowLedOn= 0 ;</p>
</td>
</tr>
</tbody>
</table>
</blockquote>
<p>&nbsp;</p>
<p>我們將下表程式編譯完成後,上傳到開發板進行測試。</p>
<blockquote>
<p>表 5 使用流水燈控制變數控制亮滅程式</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="572" valign="top">
<p class="a0">使用流水燈控制變數控制亮滅程式(Water_light_Array_All)</p>
</td>
</tr>
<tr>
<td width="572" valign="top">
<p class="a0">int LedPins[] = {4,5,6,7,8,9,10,11} ;</p>
<p class="a0">int NowLedOn = 0 ;</p>
<p class="a0">// the setup function runs once when you press reset or power the board</p>
<p class="a0">void setup() {</p>
<p class="a0">&nbsp; // initialize digital pin Blink_Led_Pin as an output.</p>
<p class="a0">&nbsp;&nbsp;&nbsp; for(int i=0; i &lt;8 ; i++)</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pinMode(LedPins[i], OUTPUT);&nbsp;&nbsp;&nbsp; //定義Blink_Led_Pin為輸出腳位</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LedPins[i], LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a0">&nbsp;</p>
<p class="a0">}</p>
<p class="a0">&nbsp;</p>
<p class="a0">// the loop function runs over and over again forever</p>
<p class="a0">void loop() {</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i =0 ; i &lt; 8; i++)</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (NowLedOn == i)</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LedPins[i], HIGH);&nbsp;&nbsp; // turn on Led</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LedPins[i], LOW);&nbsp;&nbsp;&nbsp; // turn off Led</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a0">&nbsp;</p>
<p class="a0">&nbsp;</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp; NowLedOn ++ ;</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp; if (NowLedOn &gt;=8)</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NowLedOn= 0 ;</p>
<p class="a0">&nbsp;</p>
<p class="a0">}</p>
</td>
</tr>
</tbody>
</table>
</blockquote>
<p style="text-align: right;">程式下載:<a href="https://github.com/brucetsao/arduino_Programming_Trick">https://github.com/brucetsao/arduino_Programming_Trick</a></p>
<p>當然、如下圖所示,我們可以看到使用流水燈控制變數控制亮滅程式結果畫面。</p>
<p style="text-align: center;"><img src="https://cdn1-techbang.pixcdn.tw/system/images/379217/original/64caddca3e1fc43615176ba6601afbf3.jpg?1483609284" alt="" /><br />圖 3 使用流水燈控制變數控制亮滅程式結果畫面</p>
<p style="text-align: center;">下一頁還有更多精彩教學唷 !</p>
<p style="text-align: center;"><!-- pagebreak --></p>
<h2 style="text-align: left;">加入延遲控制 Led 燈明滅</h2>
<p>在上面使用流水燈控制變數控制亮滅程式結果畫面中,我們發現許多燈都亮起來了,由於我們肉眼所示,好像八個燈都同時亮起來,然而,這是肉眼視覺暫留的現象,由於 loop()區則會不斷執行,而執行速度太快,以至於我們看到好像八個燈都同時亮起來。</p>
<p>所以我們如果將『delay(1000)』這個變數加在loop()區底層,來延遲閃滅的速度,如下表所示</p>
<blockquote>
<p>表 6 加入延遲函式</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="572" valign="top">
<p>&nbsp;&nbsp;&nbsp;&nbsp; delay(1000) ;</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
</blockquote>
<p>我們將下表程式編譯完成後,上傳到開發板進行測試。</p>
<blockquote>
<p>表 7 使用流水燈控制變數控制亮滅程式完整版</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="572" valign="top">
<p class="a0">使用流水燈控制變數控制亮滅程式完整版(Water_light_Array_All_OK)</p>
</td>
</tr>
<tr>
<td width="572" valign="top">
<p class="a0">int LedPins[] = {4,5,6,7,8,9,10,11} ;</p>
<p class="a0">int NowLedOn = 0 ;</p>
<p class="a0">// the setup function runs once when you press reset or power the board</p>
<p class="a0">void setup() {</p>
<p class="a0">&nbsp; // initialize digital pin Blink_Led_Pin as an output.</p>
<p class="a0">&nbsp;&nbsp;&nbsp; for(int i=0; i &lt;8 ; i++)</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pinMode(LedPins[i], OUTPUT);&nbsp;&nbsp;&nbsp; //定義Blink_Led_Pin為輸出腳位</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LedPins[i], LOW);&nbsp;&nbsp;&nbsp; // 將腳位Blink_Led_Pin設定為低電位&nbsp; turn the LED off by making the voltage LOW</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a0">&nbsp;</p>
<p class="a0">}</p>
<p class="a0">&nbsp;</p>
<p class="a0">// the loop function runs over and over again forever</p>
<p class="a0">void loop() {</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i =0 ; i &lt; 8; i++)</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (NowLedOn == i)</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LedPins[i], HIGH);&nbsp;&nbsp; // turn on Led</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(LedPins[i], LOW);&nbsp;&nbsp;&nbsp; // turn off Led</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a0">&nbsp;</p>
<p class="a0">&nbsp;</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp; NowLedOn ++ ;</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp; if (NowLedOn &gt;=8)</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NowLedOn= 0 ;</p>
<p class="a0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay(1000) ;&nbsp;&nbsp;</p>
<p class="a0">}</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
</blockquote>
<p>程式下載:<a href="https://github.com/brucetsao/arduino_Programming_Trick">https://github.com/brucetsao/arduino_Programming_Trick</a></p>
<p>讀者也可以在作者 YouTube 頻道(<a href="https://www.youtube.com/user/UltimaBruce">https://www.youtube.com/user/UltimaBruce</a> )中,在網址<a href="https://www.youtube.com/watch?v=cPxai727MZU&amp;feature=youtu.be" target="_blank">https://www.youtube.com/watch?v=cPxai727MZU&amp;feature=youtu.be</a>,看到本次實驗-使用流水燈控制變數控制亮滅程式完整版結果畫面。</p>
<p>當然、如下圖所示,我們可以看到使用流水燈控制變數控制亮滅程式完整版結果畫面。</p>
<p style="text-align: center;"><img src="https://cdn0-techbang.pixcdn.tw/system/images/379218/original/e0bfc681846cd1918dce41fb76ded8e7.jpg?1483609286" alt="" /><br />圖 4 使用流水燈控制變數控制亮滅程式完整版結果畫面</p>
<p style="text-align: left;">所以我們使用了『int LedPins[] = {4,5,6,7,8,9,10,11} ;』這個陣列指令,宣告腳位變數要使用的所有腳位,在使用『int NowLedOn = 0 ;』控制燈號閃滅位置,再透過迴圈語法和 IF 判斷式控制明滅後,由於視覺暫留問題,再加入『&nbsp; delay(1000) ;』讓肉眼可以辨識,我們發現,從本章開始的程式複雜度,到最後的程式精簡度,不難看出,在多腳位控制方面,我們只要善用本章所用的技巧,不僅更方便,而且臭蟲(Bugs)會更少,這是又是我們再攥寫 Arduino 程式時,常常使用的一個技巧。希望讀者閱讀本文之後,可以學到這個技巧,並可以熟用這個技巧,在往後將會把程式寫得更加穩定,系統更加龐大,複雜與功能強大,但臭蟲(Bugs)會更少。</p>
<p style="text-align: center;">最後有筆者的介紹哦 !</p>
<p style="text-align: center;"><!-- pagebreak --></p>
<h2 class="23421">後續</h2>
<p>本篇為『MAKER 系列』系列之程式設計篇子系列第三篇:多腳位定義的技巧(下篇),主要介紹之多個 GPIO 腳位使用時,使用在多腳位控制方面,我們只要善用本章所用的技巧,不僅更方便,而且臭蟲(Bugs)會更少,相信讀者會對陣列控制腳位變數方式寫作概念,有更進一步的了解與體認。</p>
<p>筆者本系列是針對非資訊、電機、電子等 Makers 攥寫的系列,這三、四年來在 Maker 領域寫書、發表文章、辦展、授課,常遇到許多學子訓練不足,以交作業的心態來學習,並沒有把程式底子打好。</p>
<p>後續筆者還會繼續發表『MAKER 系列』系列的文章,在未來我們可以創造出更優質,更具未來性的物聯網(Internet of Thing:IOT)產品開發相關技術。</p>
<p>敬請期待更多的文章。</p>
<h2 style="text-align: left;">作者介紹</h2>
<blockquote>曹永忠 (Yung-Chung Tsao) ,目前為自由作家暨專業Maker,專研於軟體工程、軟體開發與設計、物件導向程式設計,商品攝影及人像攝影。長期投入創客運動、資訊系統設計與開發、企業應用系統開發、軟體工程、新產品開發管理、商品及人像攝影等領域,並持續發表作品及相關專業著作。</blockquote>
<blockquote><img src="https://cdn2-techbang.pixcdn.tw/system/images/379220/original/a8472950f73156b229374e5f55bac1e2.jpeg?1483610538" alt="" /><br /></blockquote>
<blockquote>Email:[email protected]<br />Line ID:dr.brucetsao<br />臉書社群(Arduino.Taiwan):<a href="https://www.facebook.com/groups/Arduino.Taiwan/Github" target="_blank">https://www.facebook.com/groups/Arduino.Taiwan/Github</a><br />網站:<a href="https://github.com/brucetsao/" target="_blank">https://github.com/brucetsao/</a><br />Youtube:<a href="https://www.youtube.com/channel/UCcYG2yY_u0m1aotcA4hrRgQ" target="_blank">https://www.youtube.com/channel/UCcYG2yY_u0m1aotcA4hrRgQ</a></blockquote>
<blockquote>郭晉魁 (Jinn-Kwei Guo),國立成功大學電機工程研究所通訊組博士,目前任教於崑山科技大學電腦與通訊系,主要研究為智慧家庭與物聯網應用技術,已獲得二十多個相關專利。<br />Email: [email protected]<br />開放原始碼網址:<a href="https://github.com/ghostyguo" target="_blank">https://github.com/ghostyguo</a></blockquote>
<blockquote>吳佳駿 (Chia-Chun Wu),國立中興大學資訊科學與工程學系博士,現任教於國立金門大學工業工程與管理學系專任助理教授,目前兼任國立金門大學計算機與網路中心資訊網路組組長,主要研究為軟體工程與應用、行動裝置程式設計、物件導向程式設計、網路程式設計、動態網頁資料庫、資訊安全與管理。<br />Email: [email protected]</blockquote>
<blockquote>許智誠 (Chih-Cheng Hsu),美國加州大學洛杉磯分校(UCLA) 資訊工程系博士,曾任職於美國IBM等軟體公司多年,現任教於中央大學資訊管理學系專任副教授,主要研究為軟體工程、設計流程與自動化、數位教學、雲端裝置、多層式網頁系統、系統整合。<br />Email: [email protected]</blockquote>
<blockquote>蔡英德 (Yin-Te Tsai),國立清華大學資訊科學系博士,目前是靜宜大學資訊傳播工程學系教授、靜宜大學計算機及通訊中心主任,主要研究為演算法設計與分析、生物資訊、軟體開發、視障輔具設計與開發。Email:[email protected]<br /></blockquote>
<h2>參考文獻</h2>
<blockquote>
<p class="EndNoteBibliography">曹永忠, 吳佳駿, 許智誠, &amp; 蔡英德. (2016a). <em>Arduino</em><em>程式設計教學(</em><em>基礎篇):Arduino Programming (Writing Style &amp; Skills)</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 吳佳駿, 許智誠, &amp; 蔡英德. (2016b). <em>Arduino</em><em>程序设计教学(</em><em>基础篇):Arduino Programming (Writing Style &amp; Skills)</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 吳佳駿, 許智誠, &amp; 蔡英德. (2016c). MAKER系列-程式設計篇:多腳位定義的技巧(上篇). <em>智慧家庭.</em>&nbsp; Retrieved from <a href="http://www.techbang.com/posts/47531-maker-series-program-review-define-the-application-of">http://www.techbang.com/posts/47531-maker-series-program-review-define-the-application-of</a></p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015a). <em>Arduino</em><em>云 </em><em>物联网系统开发(</em><em>入门篇):Using Arduino Yun to Develop an Application for Internet of Things (Basic Introduction)</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015b). <em>Arduino</em><em>程式教學(</em><em>入門篇):Arduino Programming (Basic Skills &amp; Tricks)</em> (初版 ed.). 台湾、彰化: 渥玛数位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015c). <em>Arduino</em><em>程式教學(</em><em>常用模組篇):Arduino Programming (37 Sensor Modules)</em> (初版 ed.). 台湾、彰化: 渥玛数位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015d). <em>Arduino</em><em>程式教學(</em><em>無線通訊篇):Arduino Programming (Wireless Communication)</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015e). <em>Arduino</em><em>编程教学(</em><em>无线通讯篇):Arduino Programming (Wireless Communication)</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015f). <em>Arduino</em><em>编程教学(</em><em>常用模块篇):Arduino Programming (37 Sensor Modules) </em>(初版 ed.). 台湾、彰化: 渥玛数位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015g). <em>Arduino</em><em>雲 </em><em>物聯網系統開發(</em><em>入門篇):Using Arduino Yun to Develop an Application for Internet of Things (Basic Introduction)</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015h). <em>Arduino</em><em>編程教学(</em><em>入门篇):Arduino Programming (Basic Skills &amp; Tricks)</em> (初版 ed.). 台湾、彰化: 渥玛数位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2016a). <em>Arduino</em><em>程式教學(</em><em>基本語法篇):Arduino Programming (Language &amp; Syntax)</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
曹永忠, 許智誠, &amp; 蔡英德. (2016b). <em>Arduino</em><em>程序教学(基本语法篇) :Arduino Programming (Language &amp; Syntax)</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
<p>&nbsp;</p>
</blockquote><a href="http://www.facebook.com/TKbang">加入T客邦Facebook粉絲團</a><img src="http://feeds.feedburner.com/~r/techbang/~4/cY97kGb9ICM" height="1" width="1" alt=""/>