【如何設計網路計時器?】系統開發篇

 

啟動使用電源

Arduino 投幣計時器最重要的事:當我們投幣之後,產生可以使用的時間,我們系統必須發現有可用時間時,必須啟動電力開關(曹永忠, 許智誠, & 蔡英德, 2015c, 2015d, 2015k, 2015l; 曹永忠, 蔡佳軒, 許智誠, & 蔡英德, 2015a, 2015b)。

我們依照上面所述,將硬體與電子電路組立好,攥寫下表程式,編譯之後,上傳到 Arduino 開發版測試。

投幣計數器測試程式四(Coin_test11)

#include <DS1307RTC.h>

#include <Time.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#define CoinMinute 3 ;

#define RelayPin 12

#define turnon HIGH

#define turnoff LOW

boolean PowerStatus = false ;

LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display

int coinnum = 0 ;

  tmElements_t tm;

  int TotalCoin = 0 ;

  int CoinTime = 0 ;

void setup()

{

  lcd.init();                      // initialize the lcd

  // Print a message to the LCD.

  lcd.backlight();

  pinMode(RelayPin,OUTPUT);

  digitalWrite(RelayPin,turnoff) ;

 attachInterrupt(1, addcoin, RISING);

  //attachInterrupt(1, addcoin, CHANGE);

 // attachInterrupt(RFIDIntrupNumber, ReadRfidID, CHANGE);

}

void loop()

{

  // 將游標設到  第一行,  第二列

  // (注意:  第二列第五行,因為是從 0 開始數起):

  lcd.setCursor(5, 1);

  // 列印 Arduino 重開之後經過的秒數

  lcd.print(millis() / 1000);

  getDateTime() ;

  LCDDateTime() ;

 LCDCoin(TotalCoin,CoinTime) ;

 CheckStatus() ;

  delay(1000);

}

void addcoin()

{

    TotalCoin ++ ;

    CoinTime = CoinTime + CoinMinute

}

String  print2digits(int number) {

  String ttt ;

  if (number >= 0 && number < 10)

  {

     ttt =String("0")+String(number);

  }

  else

  {

     ttt =String(number);

  }

   return ttt ;

}

String  print4digits(int number) {

  String ttt ;

     ttt =String(number);

   return ttt ;

}

String  StrDate() {

  String ttt ;

    ttt = print4digits(tmYearToCalendar(tm.Year))+"/"+print2digits(tm.Month)+"/"+print2digits(tm.Day) ;

   return ttt ;

}

String  StrTime() {

  String ttt ;

    ttt = print2digits(tm.Hour)+":"+print2digits(tm.Minute)+":"+print2digits(tm.Second) ;

   return ttt ;

}

boolean  getDateTime()

{   if (RTC.read(tm))

        return true ;

        else

        return false ;

}        

  void LCDDateTime()

  {

        lcd.setCursor(0, 0);

        lcd.print(StrDate());

        lcd.setCursor(11, 0);

        lcd.print(StrTime());

  }

void LCDCoin(int c1,int c2)

{

   lcd.setCursor(1, 3);

   lcd.print("Credit:");

   lcd.print(c1);

   lcd.print(" / ") ;

   lcd.print(c2);

   lcd.print(" min");

  Serial.println(coinnum);

}

void CheckStatus()

{

    if (!PowerStatus  && ( CoinTime >0 ) )

        {

          PowerStatus = true ;

           digitalWrite(RelayPin,turnon);

        }

    if (PowerStatus  && ( CoinTime <=0 ) )

        {

          CoinTime = 0 ;

          PowerStatus = false ;

        }

}

讀者也可以在作者 YouTube 頻道(https://www.youtube.com/user/UltimaBruce )中,在網址https://www.youtube.com/watch?v=-B-Ao0mh43U&feature=youtu.be ,看到本次實驗-我們可以看到投幣前,投幣數為零,可使用時間也為零,所以不能使用電力,但是我們看到投幣後,投幣數累加一,可使用時間也累加,當使用時間大於零時,我們就可以使用電力,所以可以看到右邊的檯燈亮起來。

當然、如下圖所示,我們可以看到投幣計數器測試程式四結果畫面。

【如何設計網路計時器?】系統開發篇
▲投幣計數器測試程式四結果畫面

下一頁還有更多精彩教學哦 ~

曹永忠
作者

曹永忠,國立中央大學資訊管理學系博士,目前在暨南大學電機工程學系兼任助理教授與自由作家,專注於軟體工程、軟體開發與設計、物件導向程式設計......並持續發表作相關專業著作。

使用 Facebook 留言
發表回應
謹慎發言,尊重彼此。按此展開留言規則