前几天做了一个能设定时间自动打开电源盒关闭电源的装置,现在也把它写出来......
下面是接线图,直接用手画加电脑画的,大家讲究着看看......
下面是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的数据************************
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);
}
需要两个库函数,DS1307和LCD5110_CN
将继电器的输入端接到D13端口,这样就可以控制了。昨天晚上连了电压力锅,然后设定早上5点打开,7点关闭。今天早上已经成功的喝上粥了...呵呵...