路灯计时控制器的制作

电子说

1.2w人已加入

描述

步骤1:

使12v至5v DC降压

步骤2:

为ARDUINO制作继电器电路并显示电路

步骤3:

//代码设置时间开关要求

#include“ Wire.h”

#includeLiquidCrystal lcd(7,6,5,4,3 ,2);//lcd(rs,enable,d4,d5,d6,d7)

const char * AMPM; int bulb = 0;

字节秒,分钟,小时,dayOfWeek,dayOfMonth,月份,年份;

char * days [] = {“”,“星期日”,“星期一”,“星期二”,“星期三”,“星期四”,“星期五”,“星期六”};

int H;字符串s,m,d,mth,h;

#define DS1307_I2C_ADDRESS 0x68

byte on [8] = {0b01110,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b01010};

字节off [8] = {0b01110,0b10001,0b10001,0b10001,0b10001,0b10001,0b11111,0b01010};

字节spark [8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b10101 ,0b01010};

void setup()

{

Wire.begin();

lcd.createChar(1,on);//开启灯泡压脚

lcd.createChar(0,off);//关闭灯泡

lcd.createChar(2,spark);//火花

lcd.begin(16,2);

lcd.print(“ DIAMOND AHIR”);

lcd.setCursor(0,1);

lcd.print(“ X-PERT GROUP”);

delay(3000);

Serial.begin(9600);

}

无效循环()

{

getDateDs1307( &second,&minute,&hour,&dayOfWeek,&dayOfMonth,&month和&year);//GET值

ampm();

Convert_Hours();

lcd.clear();//清除显示

displaytime();//显示时间

match_bulb_time();//配合设置的灯泡计时

delay(1000);//等待1秒钟

}

byte bcdToDec(byte val){return((val/16 * 10)+(val%16));}

void getDateDs1307(byte * second,byte * minute,byte * hour,byte * dayOfWeek,byte * dayOfMonth,byte * month,byte * year)

{

//从RTC DS1307读取值

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.write(0);

Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS,7);

* second = bcdToDec(Wire.read()&0x7f);

* minute = bcdToDec(Wire.read());

* hour = bcdToDec(Wire.read()&0x3f);

* dayOfWeek = bcdToDec(Wire.read());

* dayOfMonth = bcdToDec(Wire.read());

* month = bcdToDec(Wire.read());

* year = bcdToDec(Wire.read()); }

void ampm(){(hour》 11)?(AMPM =“ PM”):( AMPM =“ AM”); }

void Convert_Hours(){if(hour == 12 || hour == 0)H = 12;否则if(hour》 12)H = hour%12;否则H =小时; }

void displaytime()

{

if(minute == 0)//每小时仅显示一分钟

{

lcd.begin(16,2);

lcd.print(“ DIAMOND AHIR”);

lcd.setCursor(0,1); (H 《10)? (h =“ 0” + String(H)):(h = String(H));

//在1至9小时内应用零+

(分钟《10)? (m =“ 0” + String(minute)):(m = String(minute));//用1至9分钟应用零+

(秒《10)? (s =“ 0” + String(second)):(s = String(second));//以1至9秒应用零+

lcd.print(“” + String(h)+“:” + m +“:” + s +“” + AMPM);

}

else

{

lcd.begin(16,2);

(H 《10)? (h =“ 0” + String(H)):(h = String(H));//在1至9小时内应用零+

(分钟《10)? (m =“ 0” +字符串(分钟)):(m =字符串(分钟));//用1至9分钟应用零+

(秒《10)? (s =“ 0” + String(second)):(s = String(second));//以1至9秒应用零+

(dayOfMonth 《10)? (d =“ 0” + String(dayOfMonth)):(d = String(dayOfMonth));//在1至9天

(月《10)应用零+吗? (mth =“ 0” + String(month)):(mth = String(month));//在1至9个月内申请零+

lcd.setCursor(0,0);

lcd.print(h +“:” + m +“:” + s +“” + AMPM);//小时:分钟:秒AM/PM

lcd.setCursor(0,1);

lcd.print(d +“:” + mth +“:” +年+“” + days [dayOfWeek]);//DAY:MONTH:YEAR WEEK

}

}//END FUNCTION

void match_bulb_time()

{

开关(小时)//将灯泡应用于带小时的开启

{//上午6点至下午6点至灯泡上

情况0:bulb = 1;打破;//12

情况1:bulb = 1;打破;//1

情况2:bulb = 1;打破;//2

情况3:bulb = 1;打破;//3

情况4:bulb = 1;打破;//4

情况5:bulb = 1;打破;//5

情况6:bulb = 1;打破;//6

情况7:bulb = 0;打破;//7

情况8:bulb = 0;打破;//8

情况9:bulb = 0;打破;//9

情况10:bulb = 0;打破;//10

情况11:bulb = 0;打破;//11

情况12:bulb = 0;打破;//12

情况13:bulb = 0;打破;//1

情况14:bulb = 0;打破;//2

案例15:bulb = 0;打破;//3

情况16:bulb = 0;打破;//4

情况17:bulb = 0;打破;//5

情况18:bulb = 1;打破;//6

案例19:bulb = 1;打破;//7

案例20:bulb = 1;打破;//8

情况21:bulb = 1;打破;//9

情况22:bulb = 1;打破;//10

案例23:bulb = 1;打破;//11

默认值:break;

}

if(bulb == 1)//继电器开关

{digitalWrite(8,LOW);//或接地

digitalWrite(9,HIGH);//ON RELAY

//在LCD上显示BULB图标

lcd.setCursor(14,0);

lcd.write((byte)2);

lcd.write((byte)2);

lcd.setCursor(14,1);

lcd.write((byte)1);

lcd.write((byte)1);

}

if(bulb == 0)

{

digitalWrite(8,LOW);//或接地

digitalWrite(9,LOW);//关闭继电器

//显示灯泡关闭图标

lcd.setCursor(14,1);

lcd.write((byte)0);

lcd.write((byte)0);

}

}

步骤4:

现在按照URS设置时间将BLUB ON关闭

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分