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 :D不错 要是做个安全点的盒子就更好了 今天又加了一个水滴传感器上去,万一粥溢出来时可以自动断电。正打算要做电路板,然后集成在一个多用插里。 程序中间12端口输出请改成13号端口。 1307我买了2个走时都不准,一天差2分钟的样子,不知道楼主的咋样。 电压力锅需要点按钮操作开合关吗? 还是就是简单的通电就工作? 我的已经运行2天了,还一秒不差。我用的是dfrobot的。压力锅需要转好旋钮,如果不通电它不会运行,通电后开始运行。所以我直接用一个继电器来控制通断电就可以了 用了下这个程序 除了改12号端口为13号端口还发现一个怪现象 1号开关按住不放调时调得很快2 3 4号开关按住不放要1秒钟才跳一格程序是一样的怎么会有这种现象有点不解 为什么编译的时候这么多错误?
页:
[1]