專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> Arduino >> 瀏覽文章

Ds1307+nikia5110制作定時器

作者:huqin   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2014年04月22日   【字體:
前幾天做了一個能設(shè)定時間自動打開電源盒關(guān)閉電源的裝置,現(xiàn)在也把它寫出來......
下面是接線圖,直接用手畫加電腦畫的,大家講究著看看......


下面是Arduino端的程序:

#include <DS1307.h>

#include <LCD5110_CN.h>

 

LCD5110 myGLCD(2,3,4,6,5);  //lcd5110接線柱定義

extern uint8_t SmallFont[];     //定義小號字體

extern uint8_t MediumNumbers[];  //定義中號字體

String month;  //定義一個月份字符串變量

 

DS1307  rtc(7, 8);    //定義ds1307接線柱

Time  t;

int h1=0;

int m1=0;

int h2=0;

int m2=0;

int h1bt=0;

int m1bt=0;

int h2bt=0;

int m2bt=0;

int sdbt=0;

int sd=0;

 

 

void setup()

{myGLCD.InitLCD();

  rtc.halt(false);

  Serial.begin(9600);

 pinMode(12, INPUT); 

 pinMode(9, INPUT); 

 pinMode(11, INPUT); 

 pinMode(10, INPUT); 

 pinMode(13,OUTPUT);

    

 digitalWrite(13,LOW);

//**********初始化時間,當(dāng)時間準(zhǔn)確了后就不用再執(zhí)行了,第一次用時記住*************

//******************下面的“//”去掉*****************

//  rtc.setDOW(WEDNESDAY);       

//  rtc.setTime(10, 53, 0);    

//  rtc.setDate(11, 12, 2013);   

//****************************************************************

}

 

void loop()

{

  h1bt=digitalRead(10);

 h2bt=digitalRead(11);

  m1bt=digitalRead(9);

   m2bt=digitalRead(12);

//********讀取來自 DS1307的數(shù)據(jù)************************

  rtc.getTime();

  month=rtc.getMonthStr();          //讀取月份  

jishi();    //運(yùn)行計時程序,程序在最后。

 //*****************以下是按鈕程序,按住1號按鈕改變打開小時數(shù)

//******************按住2號按鈕改變打開分鐘數(shù)

//******************按住3號按鈕改變關(guān)閉小時數(shù)

//******************按住4號按鈕改變關(guān)閉分鐘數(shù)

  while(h1bt==1)

     

    if(h1<23)  

  h1++;

  else

  h1=0;

  delay(300);

   h1bt=digitalRead(10);

    myGLCD.printNumI(h1, LEFT, 36);

    if(h1==23)

     {myGLCD.clrScr();

     jishi();

  }}

  

    while(h2bt==1)

  {if(h2<23)  

  h2++;

  else

  h2=0;

  delay(300);

   h2bt=digitalRead(13);

     myGLCD.printNumI(h2, LEFT, 42);

     if(h2==23)

      {myGLCD.clrScr();

      jishi();

  }}

  

    while(m1bt==1)

  {if(m1<59)  

  m1++;

  else

  m1=0;

  delay(300);

    m1bt=digitalRead(11);

      myGLCD.printNumI(m1, CENTER, 36);

      if(m1==59)

      myGLCD.clrScr();

       jishi();

  }}

  

    while(m2bt==1)

  {if(m2<59)  

  m2++;

  else

  m2=0;

  delay(300);

   m2bt=digitalRead(7);

      myGLCD.printNumI(m2, CENTER, 42);  

      if(m2==59)

      myGLCD.clrScr();

       jishi();

  }}

   

   

   myGLCD.printNumI(h1, LEFT, 36);

    myGLCD.printNumI(h2, LEFT, 42);

   myGLCD.printNumI(m1, CENTER, 36);

    myGLCD.printNumI(m2, CENTER, 42);  

  //*************以下是當(dāng)時間等于設(shè)定的打開時間時打開,等于關(guān)閉時間時關(guān)閉******

  if(t.hour==h1&&t.min==m1)

digitalWrite(12,HIGH);

if(t.hour==h2&&t.min==m2)

digitalWrite(12,LOW);

 delay (1000);

   myGLCD.clrScr();

 }

//*****************以下是計時函數(shù)**************************

void jishi(){

   myGLCD.setFont(SmallFont);

    myGLCD.printNumI(t.year, CENTER, 6);

      myGLCD.print(month, LEFT, 12);

       

      myGLCD.printNumI(t.date, RIGHT, 12);

       myGLCD.setFont(MediumNumbers);

    myGLCD.printNumI(t.hour, LEFT, 18);

    myGLCD.printNumI(t.min, CENTER, 18);

    myGLCD.printNumI(t.sec, RIGHT, 18);

    

    myGLCD.setFont(SmallFont);

 myGLCD.print("on", RIGHT, 36);

  myGLCD.print("off", RIGHT, 42);

}

 

需要兩個庫函數(shù),DS1307和LCD5110_CN

將繼電器的輸入端接到D13端口,這樣就可以控制了。昨天晚上連了電壓力鍋,然后設(shè)定早上5點(diǎn)打開,7點(diǎn)關(guān)閉。今天早上已經(jīng)成功的喝上粥了...呵呵...

 


關(guān)閉窗口

相關(guān)文章