本專欄主要以網路投幣計時器的主題,期望透過投幣的機制,來取得電力插座使用時間,進而控制家庭電器的使用時間,並可以透過網際網路來查詢使用情形。<p>本篇是接續上篇文章『如何設計網路計時器:電路組立上、下篇』(<a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_2">曹永忠, 2016b</a>),主要是介紹讀者,接續將投幣計時器、網路投幣計時器,相關元件,進行硬體組立(<a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_1">曹永忠, 2016a</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_2">2016b</a>; <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_3">曹永忠, 許智誠, &amp; 蔡英德, 2015a</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_4">2015b</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_7">2015e</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_8">2015f</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_9">2015g</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_10">2015h</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_11">2015i</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_12">2015j</a>)。</p>
<h3 class="23421">關於組裝元件</h3>
<p>關於所需的元件,請參閱上篇文章『如何設計網路計時器:硬體組立篇』(<a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_2">曹永忠, 2016b</a>; <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_3">曹永忠, 許智誠, et al., 2015a</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_4">2015b</a>),</p>
<p>網址如下:<a href="http://www.techbang.com/posts/44123-how-to-design-a-network-timer-hardware-group-legislative-review">http://www.techbang.com/posts/44123-how-to-design-a-network-timer-hardware-group-legislative-review</a>,本文不再重述。</p>
<h3 class="23421">計算使用時間</h3>
<p>Arduino 投幣計時器最重要的事:我們根據投幣數目,換取可使用電力的時間,所以本文主要是將投幣數轉換成可使用分鐘數。</p>
<p>我們依照上面所述,將硬體與電子電路組立好,攥寫下表程式,編譯之後,上傳到 Arduino 開發版測試。</p>
<blockquote>
<p><span style="text-decoration: underline;"><strong>投幣計數器測試程式三(Coin_test03)</strong></span></p>
<p class="a">#include &lt;DS1307RTC.h&gt;</p>
<p class="a">#include &lt;Time.h&gt;</p>
<p class="a">&nbsp;</p>
<p class="a">#include &lt;Wire.h&gt;</p>
<p class="a">#include &lt;LiquidCrystal_I2C.h&gt;</p>
<p class="a">&nbsp;</p>
<p class="a">#define CoinMinute 3 ;</p>
<p class="a">&nbsp;</p>
<p class="a">LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display</p>
<p class="a">&nbsp;</p>
<p class="a">&nbsp;</p>
<p class="a">int coinnum = 0 ;</p>
<p class="a">&nbsp; tmElements_t tm;</p>
<p class="a">&nbsp; int TotalCoin = 0 ;</p>
<p class="a">&nbsp; int CoinTime = 0 ;</p>
<p class="a">&nbsp;</p>
<p class="a">void setup()</p>
<p class="a">{</p>
<p class="a">&nbsp; lcd.init();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // initialize the lcd</p>
<p class="a">&nbsp;</p>
<p class="a">&nbsp; // Print a message to the LCD.</p>
<p class="a">&nbsp; lcd.backlight();</p>
<p class="a">&nbsp; //pinMode(3,INPUT);</p>
<p class="a">&nbsp;attachInterrupt(1, addcoin, RISING);</p>
<p class="a">&nbsp;&nbsp;//attachInterrupt(1, addcoin, CHANGE);</p>
<p class="a">&nbsp;// attachInterrupt(RFIDIntrupNumber, ReadRfidID, CHANGE);</p>
<p class="a">}</p>
<p class="a">&nbsp;</p>
<p class="a">void loop()</p>
<p class="a">{</p>
<p class="a">&nbsp; // 將游標設到 第一行, 第二列</p>
<p class="a">&nbsp; // (注意: 第二列第五行,因為是從 0 開始數起):</p>
<p class="a">&nbsp; lcd.setCursor(5, 1);</p>
<p class="a">&nbsp; // 列印 Arduino 重開之後經過的秒數</p>
<p class="a">&nbsp; lcd.print(millis() / 1000);</p>
<p class="a">&nbsp; getDateTime() ;</p>
<p class="a">&nbsp; LCDDateTime() ;</p>
<p class="a">&nbsp;LCDCoin(TotalCoin,CoinTime) ;</p>
<p class="a">&nbsp; delay(200);</p>
<p class="a">}</p>
<p class="a">&nbsp;</p>
<p class="a">void addcoin()</p>
<p class="a">{</p>
<p class="a">&nbsp;&nbsp;&nbsp; TotalCoin ++ ;</p>
<p class="a">&nbsp;&nbsp; &nbsp;CoinTime = CoinTime + CoinMinute</p>
<p class="a">}</p>
<p class="a">String&nbsp; print2digits(int number) {</p>
<p class="a">&nbsp; String ttt ;</p>
<p class="a">&nbsp; if (number &gt;= 0 &amp;&amp; number &lt; 10)</p>
<p class="a">&nbsp; {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp; ttt =String("0")+String(number);</p>
<p class="a">&nbsp; }</p>
<p class="a">&nbsp; else</p>
<p class="a">&nbsp; {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp; ttt =String(number);</p>
<p class="a">&nbsp; }</p>
<p class="a">&nbsp;&nbsp; return ttt ;</p>
<p class="a">}</p>
<p class="a">&nbsp;</p>
<p class="a">String&nbsp; print4digits(int number) {</p>
<p class="a">&nbsp; String ttt ;</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp; ttt =String(number);</p>
<p class="a">&nbsp;&nbsp; return ttt ;</p>
<p class="a">}</p>
<p class="a">&nbsp;</p>
<p class="a">&nbsp;</p>
<p class="a">&nbsp;</p>
<p class="a">String&nbsp; StrDate() {</p>
<p class="a">&nbsp; String ttt ;</p>
<p class="a">&nbsp;&nbsp;&nbsp; ttt = print4digits(tmYearToCalendar(tm.Year))+"/"+print2digits(tm.Month)+"/"+print2digits(tm.Day) ;</p>
<p class="a">&nbsp;&nbsp; return ttt ;</p>
<p class="a">}</p>
<p class="a">&nbsp;</p>
<p class="a">String&nbsp; StrTime() {</p>
<p class="a">&nbsp; String ttt ;</p>
<p class="a">&nbsp;&nbsp;&nbsp; ttt = print2digits(tm.Hour)+":"+print2digits(tm.Minute)+":"+print2digits(tm.Second) ;</p>
<p class="a">&nbsp;&nbsp; return ttt ;</p>
<p class="a">}</p>
<p class="a">&nbsp;</p>
<p class="a">boolean&nbsp; getDateTime()</p>
<p class="a">{&nbsp;&nbsp; if (RTC.read(tm))</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true ;</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false ;</p>
<p class="a">}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p class="a">&nbsp;</p>
<p class="a">&nbsp; void LCDDateTime()</p>
<p class="a">&nbsp; {</p>
<p class="a">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.setCursor(0, 0);</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcd.print(StrDate());</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcd.setCursor(11, 0);</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcd.print(StrTime());</p>
<p class="a">&nbsp;</p>
<p class="a">&nbsp; }</p>
<p class="a">&nbsp;</p>
<p class="a">void LCDCoin(int c1,int c2)</p>
<p class="a">{</p>
<p class="a">&nbsp;&nbsp; lcd.setCursor(1, 3);</p>
<p class="a">&nbsp;&nbsp; lcd.print("Credit:");</p>
<p class="a">&nbsp;&nbsp; lcd.print(c1);</p>
<p class="a">&nbsp;&nbsp; lcd.print(" / ") ;</p>
<p class="a">&nbsp;&nbsp; lcd.print(c2);</p>
<p class="a">&nbsp;&nbsp; lcd.print(" min");</p>
<p class="a">&nbsp;</p>
<p class="a">&nbsp; Serial.println(coinnum);</p>
<p class="a">&nbsp;</p>
}
<p>&nbsp;</p>
</blockquote>
<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=z7Iasqh6tIw&amp;feature=youtu.be" target="_blank">https://www.youtube.com/watch?v=z7Iasqh6tIw&amp;feature=youtu.be</a> ,看到本次實驗-我們已經可以在投幣時,將時間累加進去系統,並顯示在 LCD 顯示模組上,我們投幣時,可將時間累加後再 LCD 顯示模組會加上可使用時間。</p>
<p>當然、如下圖所示,我們可以看到投幣計數器測試程式三結果畫面。</p>
<p style="text-align: center;"><img src="https://cdn1-techbang.pixcdn.tw/system/images/361539/original/9b15e0026c131af3596fb932b1eaf30f.jpg?1472711182" alt="" /><br />▲投幣計數器測試程式三結果畫面</p>
<p style="text-align: center;">下一頁還有更精采教學哦 ~</p>
<p><!-- pagebreak --></p>
<p style="text-align: center;">&nbsp;</p>
<h3 class="23421">啟動使用電源</h3>
<p>Arduino 投幣計時器最重要的事:當我們投幣之後,產生可以使用的時間,我們系統必須發現有可用時間時,必須啟動電力開關(<a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_5">曹永忠, 許智誠, &amp; 蔡英德, 2015c</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_6">2015d</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_13">2015k</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_14">2015l</a>; <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_15">曹永忠, 蔡佳軒, 許智誠, &amp; 蔡英德, 2015a</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_16">2015b</a>)。</p>
<p>我們依照上面所述,將硬體與電子電路組立好,攥寫下表程式,編譯之後,上傳到 Arduino 開發版測試。</p>
<blockquote>
<p><strong>投幣計數器測試程式四(Coin_test11)</strong></p>
<p class="a">#include &lt;DS1307RTC.h&gt;</p>
<p class="a">#include &lt;Time.h&gt;</p>
<p class="a">#include &lt;Wire.h&gt;</p>
<p class="a">#include &lt;LiquidCrystal_I2C.h&gt;</p>
<p class="a">#define CoinMinute 3 ;</p>
<p class="a">#define RelayPin 12</p>
<p class="a">#define turnon HIGH</p>
<p class="a">#define turnoff LOW</p>
<p class="a">boolean PowerStatus = false ;</p>
<p class="a">LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display</p>
<p class="a">int coinnum = 0 ;</p>
<p class="a">&nbsp; tmElements_t tm;</p>
<p class="a">&nbsp; int TotalCoin = 0 ;</p>
<p class="a">&nbsp; int CoinTime = 0 ;</p>
<p class="a">void setup()</p>
<p class="a">{</p>
<p class="a">&nbsp; lcd.init();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // initialize the lcd</p>
<p class="a">&nbsp; // Print a message to the LCD.</p>
<p class="a">&nbsp; lcd.backlight();</p>
<p class="a">&nbsp; pinMode(RelayPin,OUTPUT);</p>
<p class="a">&nbsp; digitalWrite(RelayPin,turnoff) ;</p>
<p class="a">&nbsp;attachInterrupt(1, addcoin, RISING);</p>
<p class="a">&nbsp; //attachInterrupt(1, addcoin, CHANGE);</p>
<p class="a">&nbsp;// attachInterrupt(RFIDIntrupNumber, ReadRfidID, CHANGE);</p>
<p class="a">}</p>
<p class="a">void loop()</p>
<p class="a">{</p>
<p class="a">&nbsp; // 將游標設到 第一行, 第二列</p>
<p class="a">&nbsp; // (注意: 第二列第五行,因為是從 0 開始數起):</p>
<p class="a">&nbsp; lcd.setCursor(5, 1);</p>
<p class="a">&nbsp; // 列印 Arduino 重開之後經過的秒數</p>
<p class="a">&nbsp; lcd.print(millis() / 1000);</p>
<p class="a">&nbsp; getDateTime() ;</p>
<p class="a">&nbsp; LCDDateTime() ;</p>
<p class="a">&nbsp;LCDCoin(TotalCoin,CoinTime) ;</p>
<p class="a">&nbsp;CheckStatus() ;</p>
<p class="a">&nbsp; delay(1000);</p>
<p class="a">}</p>
<p class="a">void addcoin()</p>
<p class="a">{</p>
<p class="a">&nbsp;&nbsp;&nbsp; TotalCoin ++ ;</p>
<p class="a">&nbsp;&nbsp;&nbsp; CoinTime = CoinTime + CoinMinute</p>
<p class="a">}</p>
<p class="a">String&nbsp; print2digits(int number) {</p>
<p class="a">&nbsp; String ttt ;</p>
<p class="a">&nbsp; if (number &gt;= 0 &amp;&amp; number &lt; 10)</p>
<p class="a">&nbsp; {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp; ttt =String("0")+String(number);</p>
<p class="a">&nbsp; }</p>
<p class="a">&nbsp; else</p>
<p class="a">&nbsp; {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp; ttt =String(number);</p>
<p class="a">&nbsp; }</p>
<p class="a">&nbsp;&nbsp; return ttt ;</p>
<p class="a">}</p>
<p class="a">String&nbsp; print4digits(int number) {</p>
<p class="a">&nbsp; String ttt ;</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp; ttt =String(number);</p>
<p class="a">&nbsp;&nbsp; return ttt ;</p>
<p class="a">}</p>
<p class="a">String&nbsp; StrDate() {</p>
<p class="a">&nbsp; String ttt ;</p>
<p class="a">&nbsp;&nbsp;&nbsp; ttt = print4digits(tmYearToCalendar(tm.Year))+"/"+print2digits(tm.Month)+"/"+print2digits(tm.Day) ;</p>
<p class="a">&nbsp;&nbsp; return ttt ;</p>
<p class="a">}</p>
<p class="a">String&nbsp; StrTime() {</p>
<p class="a">&nbsp; String ttt ;</p>
<p class="a">&nbsp;&nbsp;&nbsp; ttt = print2digits(tm.Hour)+":"+print2digits(tm.Minute)+":"+print2digits(tm.Second) ;</p>
<p class="a">&nbsp;&nbsp; return ttt ;</p>
<p class="a">}</p>
<p class="a">boolean&nbsp; getDateTime()</p>
<p class="a">{&nbsp;&nbsp; if (RTC.read(tm))</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true ;</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false ;</p>
<p class="a">}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p class="a">&nbsp; void LCDDateTime()</p>
<p class="a">&nbsp; {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcd.setCursor(0, 0);</p>
<p class="a">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd.print(StrDate());</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcd.setCursor(11, 0);</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcd.print(StrTime());</p>
<p class="a">&nbsp; }</p>
<p class="a">void LCDCoin(int c1,int c2)</p>
<p class="a">{</p>
<p class="a">&nbsp;&nbsp; lcd.setCursor(1, 3);</p>
<p class="a">&nbsp;&nbsp; lcd.print("Credit:");</p>
<p class="a">&nbsp;&nbsp; lcd.print(c1);</p>
<p class="a">&nbsp;&nbsp; lcd.print(" / ") ;</p>
<p class="a">&nbsp;&nbsp; lcd.print(c2);</p>
<p class="a">&nbsp;&nbsp; lcd.print(" min");</p>
<p class="a">&nbsp; Serial.println(coinnum);</p>
<p class="a">}</p>
<p class="a">void CheckStatus()</p>
<p class="a">{</p>
<p class="a">&nbsp;&nbsp;&nbsp; if (!PowerStatus&nbsp; &amp;&amp; ( CoinTime &gt;0 ) )</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PowerStatus = true ;</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(RelayPin,turnon);</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p class="a">&nbsp;&nbsp;&nbsp; if (PowerStatus&nbsp; &amp;&amp; ( CoinTime &lt;=0 ) )</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;CoinTime = 0 ;</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PowerStatus = false ;</p>
<p class="a">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
}</blockquote>
<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=-B-Ao0mh43U&amp;feature=youtu.be" target="_blank">https://www.youtube.com/watch?v=-B-Ao0mh43U&amp;feature=youtu.be</a> ,看到本次實驗-我們可以看到投幣前,投幣數為零,可使用時間也為零,所以不能使用電力,但是我們看到投幣後,投幣數累加一,可使用時間也累加,當使用時間大於零時,我們就可以使用電力,所以可以看到右邊的檯燈亮起來。</p>
<p>當然、如下圖所示,我們可以看到投幣計數器測試程式四結果畫面。</p>
<p style="text-align: center;"><img src="https://cdn2-techbang.pixcdn.tw/system/images/361540/original/3e6b526b085e6759e062caf6c62eb51f.jpg?1472711182" alt="" /><br />▲投幣計數器測試程式四結果畫面</p>
<p style="text-align: center;">下一頁還有更多精彩教學哦 ~</p>
<p style="text-align: center;"><!-- pagebreak --></p>
<h3 class="23421">耗用使用電源時間</h3>
<p>Arduino 投幣計時器最重要的事:當我們投幣之後,產生可以使用的時間,我們系統必須發現有可用時間時,必須啟動電力開關(<a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_5">曹永忠, 許智誠, et al., 2015c</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_6">2015d</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_13">2015k</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_14">2015l</a>; <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_15">曹永忠, 蔡佳軒, et al., 2015a</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_16">2015b</a>)。</p>
<p>我們依照上面所述,將硬體與電子電路組立好,攥寫下表程式,編譯之後,上傳到 Arduino 開發版測試。</p>
<blockquote>
<p style="text-align: left;"><strong>投幣計數器測試程式五(Coin_test21)</strong></p>
<p class="a"><span lang="EN-US">#include &lt;DS1307RTC.h&gt;</span></p>
<p class="a"><span lang="EN-US">#include &lt;Time.h&gt;</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">#include &lt;Wire.h&gt;</span></p>
<p class="a"><span lang="EN-US">#include &lt;LiquidCrystal_I2C.h&gt;</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">#define CoinMinute 1 ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">#define RelayPin 12</span></p>
<p class="a"><span lang="EN-US">#define turnon HIGH</span></p>
<p class="a"><span lang="EN-US">#define turnoff LOW</span></p>
<p class="a"><span lang="EN-US">boolean PowerStatus = false ;</span></p>
<p class="a"><span lang="EN-US">//=======================</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">//&nbsp; ===========&nbsp; use time variable</span></p>
<p class="a"><span lang="EN-US">int UseSecond = 0 ;</span></p>
<p class="a"><span lang="EN-US">int UseMinute = 0 ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">int coinnum = 0 ;</span></p>
<p class="a"><span lang="EN-US">&nbsp; tmElements_t tm;</span></p>
<p class="a"><span lang="EN-US">&nbsp; int TotalCoin = 0 ;</span></p>
<p class="a"><span lang="EN-US">&nbsp; int CoinTime = 0 ;</span></p>
<p class="a"><span lang="EN-US">&nbsp; </span></p>
<p class="a"><span lang="EN-US">void setup()</span></p>
<p class="a"><span lang="EN-US">{</span></p>
<p class="a"><span lang="EN-US">&nbsp; lcd.init();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // initialize the lcd</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">&nbsp; // Print a message to the LCD.</span></p>
<p class="a"><span lang="EN-US">&nbsp; lcd.backlight();</span></p>
<p class="a"><span lang="EN-US">&nbsp; pinMode(RelayPin,OUTPUT);</span></p>
<p class="a"><span lang="EN-US">&nbsp; digitalWrite(RelayPin,turnoff) ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;attachInterrupt(1, addcoin, RISING);</span></p>
<p class="a"><span lang="EN-US">&nbsp; //attachInterrupt(1, addcoin, CHANGE);</span></p>
<p class="a"><span lang="EN-US">&nbsp;// attachInterrupt(RFIDIntrupNumber, ReadRfidID, CHANGE);</span></p>
<p class="a"><span lang="EN-US">}</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">void loop()</span></p>
<p class="a"><span lang="EN-US">{</span></p>
<p class="a"><span lang="EN-US">&nbsp; // </span><span>將游標設到 第一行<span lang="EN-US">, </span> 第二列</span></p>
<p class="a"><span lang="EN-US">&nbsp; // (</span><span>注意<span lang="EN-US">: </span> 第二列第五行,因為是從<span lang="EN-US"> 0 </span>開始數起<span lang="EN-US">):</span></span></p>
<p class="a"><span lang="EN-US">&nbsp; lcd.setCursor(5, 1);</span></p>
<p class="a"><span lang="EN-US">&nbsp; // </span><span>列印<span lang="EN-US"> Arduino </span>重開之後經過的秒數</span></p>
<p class="a"><span lang="EN-US">&nbsp; lcd.print(millis() / 1000);</span></p>
<p class="a"><span lang="EN-US">&nbsp; getDateTime() ;</span></p>
<p class="a"><span lang="EN-US">&nbsp; LCDDateTime() ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;LCDCoin(TotalCoin,CoinTime) ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;CheckStatus() ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;if (PowerStatus)</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p class="a"><span lang="EN-US">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UseSecond = UseSecond + 15 ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UseSecond ++ ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CheckUseTIme() ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="a"><span lang="EN-US">&nbsp; delay(1000);</span></p>
<p class="a"><span lang="EN-US">}</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">void addcoin()</span></p>
<p class="a"><span lang="EN-US">{</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp; TotalCoin ++ ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp; CoinTime = CoinTime + CoinMinute</span></p>
<p class="a"><span lang="EN-US">}</span></p>
<p class="a"><span lang="EN-US">String&nbsp; print2digits(int number) {</span></p>
<p class="a"><span lang="EN-US">&nbsp; String ttt ;</span></p>
<p class="a"><span lang="EN-US">&nbsp; if (number &gt;= 0 &amp;&amp; number &lt; 10) </span></p>
<p class="a"><span lang="EN-US">&nbsp; {</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp; ttt =String("0")+String(number);</span></p>
<p class="a"><span lang="EN-US">&nbsp; }</span></p>
<p class="a"><span lang="EN-US">&nbsp; else</span></p>
<p class="a"><span lang="EN-US">&nbsp; {</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp; ttt =String(number);</span></p>
<p class="a"><span lang="EN-US">&nbsp; }</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp; return ttt ;</span></p>
<p class="a"><span lang="EN-US">}</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">String&nbsp; print4digits(int number) {</span></p>
<p class="a"><span lang="EN-US">&nbsp; String ttt ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp; ttt =String(number);</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp; return ttt ;</span></p>
<p class="a"><span lang="EN-US">}</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">String&nbsp; StrDate() {</span></p>
<p class="a"><span lang="EN-US">&nbsp; String ttt ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp; ttt = print4digits(tmYearToCalendar(tm.Year))+"/"+print2digits(tm.Month)+"/"+print2digits(tm.Day) ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp; return ttt ;</span></p>
<p class="a"><span lang="EN-US">}</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">String&nbsp; StrTime() {</span></p>
<p class="a"><span lang="EN-US">&nbsp; String ttt ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp; ttt = print2digits(tm.Hour)+":"+print2digits(tm.Minute)+":"+print2digits(tm.Second) ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp; return ttt ;</span></p>
<p class="a"><span lang="EN-US">}</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">boolean&nbsp; getDateTime()</span></p>
<p class="a"><span lang="EN-US">{&nbsp;&nbsp; if (RTC.read(tm))</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false ;</span></p>
<p class="a"><span lang="EN-US">}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">&nbsp; void LCDDateTime()</span></p>
<p class="a"><span lang="EN-US">&nbsp; {</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcd.setCursor(0, 0);</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcd.print(StrDate());</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcd.setCursor(11, 0);</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lcd.print(StrTime());</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p class="a"><span lang="EN-US">&nbsp; }</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">void LCDCoin(int c1,int c2)</span></p>
<p class="a"><span lang="EN-US">{</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp; lcd.setCursor(1, 3);</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp; lcd.print("Credit:");</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp; lcd.print(c1);</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp; lcd.print(" / ") ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp; lcd.print(c2);</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp; lcd.print(" min");</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp; </span></p>
<p class="a"><span lang="EN-US">&nbsp; Serial.println(coinnum);</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">}</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">void CheckStatus()</span></p>
<p class="a"><span lang="EN-US">{</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp; if (!PowerStatus&nbsp; &amp;&amp; ( CoinTime &gt;0 ) )</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // UseSecond ++ ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PowerStatus = true ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(RelayPin,turnon);</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp; if (PowerStatus&nbsp; &amp;&amp; ( CoinTime &lt;=0 ) )</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CoinTime = 0 ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UseSecond = 0 ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TotalCoin = 0 ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PowerStatus = false ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; digitalWrite(RelayPin,turnoff);</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p class="a"><span lang="EN-US">}</span></p>
<p class="a"><span lang="EN-US">&nbsp;</span></p>
<p class="a"><span lang="EN-US">void CheckUseTIme()</span></p>
<p class="a"><span lang="EN-US">{</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp; if (UseSecond &gt;= 60)</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CoinTime --;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UseSecond = 0 ;</span></p>
<p class="a"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p class="a"><span lang="EN-US">}</span></p>
<p class="a"><span lang="EN-US"><br /></span></p>
</blockquote>
<p class="a"><span lang="EN-US">讀者也可以在作者 YouTube 頻道(<a href="https://www.youtube.com/user/UltimaBruce">https://www.youtube.com/user/UltimaBruce</a> )中,在網址<a href="https://www.youtube.com/watch?v=vPGxf8nITPs&amp;feature=youtu.be" target="_blank">https://www.youtube.com/watch?v=vPGxf8nITPs&amp;feature=youtu.be</a> ,看到本次實驗-我們可以看到投幣前,投幣數為零,可使用時間也為零,所以不能使用電力,但是我們看到投幣後,投幣數累加一,可使用時間也累加,當使用時間大於零時,我們就可以使用電力,所以可以看到右邊的檯燈亮起來,最後當使用時間為零時,系統會關閉電力,並且投幣數會歸零(<a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_5">曹永忠, 許智誠, et al., 2015c</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_6">2015d</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_13">2015k</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_14">2015l</a>; <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_15">曹永忠, 蔡佳軒, et al., 2015a</a>, <a href="file:///D:/%E5%B7%A5%E4%BD%9C/PCHome/248/9%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87/%E4%B9%9D%E6%9C%88%E7%AC%AC%E4%B8%80%E7%AF%87V3.doc#_ENREF_16">2015b</a>)。</span></p>
<p>當然、如下圖所示,我們可以看到投幣計數器測試程式五結果畫面。</p>
<p style="text-align: center;"><img src="https://cdn0-techbang.pixcdn.tw/system/images/361541/original/e35d9a671f2a15fcd63c4b1a283e7610.jpg?1472711183" alt="" /><br />▲投幣計數器測試程式五結果畫面</p>
<p style="text-align: center;">下一頁還有筆者之介紹唷 ~</p>
<p style="text-align: center;"><!-- pagebreak --></p>
<p>本文為『智慧家庭:網路計時器』系列第五篇:系統開發篇,主要承接上篇『如何設計網路計時器:電路組立上、下篇』,介紹讀者如何開發網路計時器的主要核心的程式。</p>
<p>本文內容主要是介紹讀者投幣計時器核心程式,主要可以讀取時間,耗用時間,讀取投幣器與顯示,進而控制電力開啟與關閉。</p>
<p>本文到此,我們發現已經完成一個投幣計時器的核心功能,也達到市售投幣計時器的主要功能,下篇文章我們會進入物聯網的主題,將這些資訊全部傳送到物聯網。</p>
<p>後續筆者還會繼續發表『智慧家庭:網路計時器』系列的文章,讓我們在未來可以創造出更優質、智慧化的家庭。</p>
<p>敬請期待更多的文章。</p>
<blockquote>
<h3>筆者介紹</h3>
<p><strong>曹永忠 (Yung-Chung Tsao)</strong>:目前為自由作家,專注於軟體工程、軟體開發與設計、物件導向程式設計、Arduino 開發、嵌入式系統開發,商品攝影及人像攝影。長期投入資訊系統設計與開發、企業應用系統開發、軟體工程、新產品開發管理、商品及人像攝影等領域,並持續發表作品及相關專業著作。</p>
<p>Email:<a href="mailto:[email protected]">[email protected]<br /></a>Line ID:dr.brucetsao&nbsp;<br />Arduino部落格:<a href="http://taiwanarduino.blogspot.tw/">http://taiwanarduino.blogspot.tw/<br /></a>臉書社群(Arduino.Taiwan):<a href="https://www.facebook.com/groups/Arduino.Taiwan/">https://www.facebook.com/groups/Arduino.Taiwan/<br /></a>活動官網:<a href="http://arduino.kktix.cc/">http://arduino.kktix.cc/<br /></a>Youtube:<a href="https://www.youtube.com/channel/UCcYG2yY_u0m1aotcA4hrRgQ">https://www.youtube.com/channel/UCcYG2yY_u0m1aotcA4hrRgQ</a></p>
<p style="text-align: left;"><strong><img src="https://cdn0-techbang.pixcdn.tw/system/images/361542/original/cd256c6f528c336cd587ad7717b76166.png?1472711682" alt="" /></strong></p>
</blockquote>
<p style="text-align: left;"><strong><br /></strong></p>
<blockquote>
<h3 style="text-align: left;"><strong>參考文獻</strong></h3>
<p class="EndNoteBibliography">曹永忠. (2016a). 如何設計網路計時器:元件設計篇. <em>智慧家庭.</em>&nbsp; Retrieved from <a href="http://www.techbang.com/posts/43326-how-to-design-a-network-timer-component-design-review">http://www.techbang.com/posts/43326-how-to-design-a-network-timer-component-design-review</a></p>
<p class="EndNoteBibliography">曹永忠. (2016b). 【如何設計網路計時器?】硬體組立篇. <em>智慧家庭.</em>&nbsp; Retrieved from <a href="http://www.techbang.com/posts/44123-how-to-design-a-network-timer-hardware-group-legislative-review">http://www.techbang.com/posts/44123-how-to-design-a-network-timer-hardware-group-legislative-review</a></p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015a). <em>Arduino</em><em>投币定时器(网络篇):Using Arduino to Develop a Timing Controlling Device via Internet</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015b). <em>Arduino</em><em>投幣計時器(網路篇):Using Arduino to Develop a Timing Controlling Device via Internet</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015c). <em>Arduino</em><em>智慧电力监控(监控篇):Using Arduino to Develop a Monitoring Device of Power-Socket</em> (初版 ed.). 台湾、彰化: 渥玛数位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015d). <em>Arduino</em><em>智慧電力監控(監控篇):Using Arduino to Develop a Monitoring Device of Power-Socket</em> (初版 ed.). 台灣、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015e). <em>Arduino</em><em>程式教學(入門篇):Arduino Programming (Basic Skills &amp; Tricks)</em> (初版 ed.). 台湾、彰化: 渥玛数位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015f). <em>Arduino</em><em>程式教學(常用模組篇):Arduino Programming (37 Sensor Modules)</em> (初版 ed.). 台湾、彰化: 渥玛数位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015g). <em>Arduino</em><em>程式教學(無線通訊篇):Arduino Programming (Wireless Communication)</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015h). <em>Arduino</em><em>编程教学(无线通讯篇):Arduino Programming (Wireless Communication)</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015i). <em>Arduino</em><em>编程教学(常用模块篇):Arduino Programming (37 Sensor Modules) </em>(初版 ed.). 台湾、彰化: 渥玛数位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015j). <em>Arduino</em><em>編程教学(入门篇):Arduino Programming (Basic Skills &amp; Tricks)</em> (初版 ed.). 台湾、彰化: 渥玛数位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015k). <em>LinkIt</em><em>智能电力监控(网络篇):Using LinkIt ONE to Develop an IOT-based Power-Socket</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 許智誠, &amp; 蔡英德. (2015l). <em>LinkIt</em><em>智慧電力監控(網路篇)):Using LinkIt ONE to Develop an IOT-based Power-Socket </em>(初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
<p class="EndNoteBibliography">曹永忠, 蔡佳軒, 許智誠, &amp; 蔡英德. (2015a). <em>Arduino</em><em>智慧电力监控(手机篇):Using Arduino to Develop an Advanced Monitoring Device of the Power-Socket</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.</p>
曹永忠, 蔡佳軒, 許智誠, &amp; 蔡英德. (2015b). <em>Arduino</em><em>智慧電力監控(手機篇):Using Arduino to Develop an Advanced Monitoring Device of the Power-Socket</em> (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
<p><strong><br /></strong></p>
</blockquote><a href="http://www.facebook.com/TKbang">加入T客邦Facebook粉絲團</a><img src="http://feeds.feedburner.com/~r/techbang/~4/rmR-gITvmuQ" height="1" width="1" alt=""/>