桐桐 发表于 2013-12-12 12:36:55

Ds1307+nikia5110制作定时器

本帖最后由 桐桐 于 2013-12-12 12:55 编辑

前几天做了一个能设定时间自动打开电源盒关闭电源的装置,现在也把它写出来......
下面是接线图,直接用手画加电脑画的,大家讲究着看看......
http://yun.baidu.com/share/link?shareid=2156123376&uk=3626293744

下面是程序:
#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;//定义一个月份字符串变量

DS1307rtc(7, 8);    //定义ds1307接线柱
Timet;
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的数据************************
t = 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);
}


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

下面是实物图,将灯换成继电器就可以控制电源了,昨天晚上已经成功的控制了我家的电压力锅,在早上5点开烧,到7点关闭。早上已经喝上粥了,呵呵。
http://yun.baidu.com/share/link?shareid=2163991999&uk=3626293744

两个库文件链接:
http://yun.baidu.com/share/link?shareid=2212864208&uk=3626293744

Black 发表于 2013-12-12 17:15:16

:D不错 要是做个安全点的盒子就更好了

桐桐 发表于 2013-12-12 22:47:58

今天又加了一个水滴传感器上去,万一粥溢出来时可以自动断电。正打算要做电路板,然后集成在一个多用插里。

桐桐 发表于 2013-12-12 22:50:05

程序中间12端口输出请改成13号端口。

isilcala 发表于 2013-12-12 23:41:30

1307我买了2个走时都不准,一天差2分钟的样子,不知道楼主的咋样。

komoya 发表于 2013-12-13 16:14:34

电压力锅需要点按钮操作开合关吗? 还是就是简单的通电就工作?

桐桐 发表于 2013-12-13 18:13:43

我的已经运行2天了,还一秒不差。我用的是dfrobot的。压力锅需要转好旋钮,如果不通电它不会运行,通电后开始运行。所以我直接用一个继电器来控制通断电就可以了

liguohong 发表于 2014-4-1 14:03:44

用了下这个程序 除了改12号端口为13号端口还发现一个怪现象   1号开关按住不放调时调得很快2 3 4号开关按住不放要1秒钟才跳一格程序是一样的怎么会有这种现象有点不解

絾謌 发表于 2014-4-8 13:40:16

为什么编译的时候这么多错误?
页: [1]
查看完整版本: Ds1307+nikia5110制作定时器