专注电子技术学习与研究
当前位置:单片机教程网 >> Arduino >> 浏览文章

Ds1307+nikia5110制作定时器

作者:huqin   来源:本站原创   点击数:  更新时间:2014年04月22日   【字体:
前几天做了一个能设定时间自动打开电源盒关闭电源的装置,现在也把它写出来......
下面是接线图,直接用手画加电脑画的,大家讲究着看看......


下面是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);

//**********初始化时间,当时间准确了后就不用再执行了,第一次用时记住*************

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

//  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的数据************************

  rtc.getTime();

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

jishi();    //运行计时程序,程序在最后。

 //*****************以下是按钮程序,按住1号按钮改变打开小时数

//******************按住2号按钮改变打开分钟数

//******************按住3号按钮改变关闭小时数

//******************按住4号按钮改变关闭分钟数

  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);  

  //*************以下是当时间等于设定的打开时间时打开,等于关闭时间时关闭******

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

digitalWrite(12,HIGH);

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

digitalWrite(12,LOW);

 delay (1000);

   myGLCD.clrScr();

 }

//*****************以下是计时函数**************************

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);

}

 

需要两个库函数,DS1307和LCD5110_CN

将继电器的输入端接到D13端口,这样就可以控制了。昨天晚上连了电压力锅,然后设定早上5点打开,7点关闭。今天早上已经成功的喝上粥了...呵呵...

 


关闭窗口

相关文章