极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12357|回复: 3

用ds3231和继电器做个定时插座 写了部分程序 但有点问题

[复制链接]
发表于 2014-1-16 13:10:31 | 显示全部楼层 |阅读模式
本帖最后由 m33spiral 于 2014-1-16 13:12 编辑

打算做个定时控制器 可以从串口监视器设定当前时间和开关时间,现在loop中的时间判定好像有问题.... 是不是得用中断写???

  1. #include <Wire.h>
  2. #include <EEPROM.h>
  3. #include <DS3231.h>

  4.   int Relay1=4;
  5.   int Relay2=5;
  6.   int Relay3=6;
  7.   int Relay4=7;
  8.   byte Year;
  9.   byte Month;
  10.   byte Date;
  11.   byte DoW;
  12.   byte Hour;
  13.   byte Minute;
  14.   byte Second;
  15.   byte OnHour;
  16.   byte OnMinute;
  17.   byte OffHour;
  18.   byte OffMinute;
  19.   bool PM;
  20.   bool h12;
  21.   bool Century=false;
  22.   
  23.   
  24.   DS3231 Clock;
  25.   
  26. void setup()
  27. {
  28.    int Address = 0;
  29.    for (int i = 0; i < 4; i++)
  30.    {
  31.     pinMode(Relay1, OUTPUT);
  32.    }
  33.    
  34.    Serial.begin(9600);
  35.    Wire.begin();
  36.    
  37.     Serial.println("input Y to set time");
  38.     delay(4000);
  39.     if (Serial.read()==89)
  40.     {
  41.     Serial.println("year");
  42.     delay(2000);
  43.     Year=byte(Serial.parseInt());
  44.     Serial.println("month");
  45.     delay(2000);
  46.     Month=byte(Serial.parseInt());
  47.     Serial.println("date");
  48.     delay(2000);
  49.     Date=byte(Serial.parseInt());
  50.     Serial.println("day");
  51.     delay(2000);
  52.     DoW=byte(Serial.parseInt());
  53.     Serial.println("hour");
  54.     delay(2000);
  55.     Hour=byte(Serial.parseInt());
  56.     Serial.println("minute");
  57.     delay(2000);
  58.     Minute=byte(Serial.parseInt());
  59.     Serial.println("second");
  60.     delay(2000);
  61.     Second=byte(Serial.parseInt());
  62.     Clock.setSecond(Second);//Set the second
  63.     Clock.setMinute(Minute);//Set the minute
  64.     Clock.setHour(Hour);  //Set the hour
  65.     Clock.setDoW(DoW);    //Set the day of the week
  66.     Clock.setDate(Date);  //Set the date of the month
  67.     Clock.setMonth(Month);  //Set the month of the year
  68.     Clock.setYear(Year);
  69.     }  //
  70.      Serial.println("input Y to set switch time");
  71.        delay(4000);
  72.        if (Serial.read()==89)
  73.        {
  74.          Serial.println("input OnHour");
  75.          delay(2000);
  76.          OnHour=byte(Serial.parseInt());
  77.          Serial.println("input OnMinute");
  78.          delay(2000);
  79.          OnMinute=byte(Serial.parseInt());
  80.          Serial.println("input OffHour");
  81.          delay(2000);
  82.          OffHour=byte(Serial.parseInt());
  83.          Serial.println("input OffMinute");
  84.          delay(2000);
  85.          OffMinute=byte(Serial.parseInt());
  86.          EEPROM.write(Address, OnHour);
  87.          Address=Address+1;
  88.          EEPROM.write(Address, OnMinute);
  89.          Address=Address+1;
  90.          EEPROM.write(Address, OffHour);
  91.          Address=Address+1;
  92.          EEPROM.write(Address, OffMinute);
  93.        }
  94.        else
  95.        {
  96.          OnHour=EEPROM.read(Address);
  97.          Address=Address+1;
  98.          OnMinute=EEPROM.read(Address);
  99.          Address==Address+1;
  100.          OffHour=EEPROM.read(Address);
  101.          Address=Address+1;
  102.          OffMinute=EEPROM.read(Address);
  103.        }
  104.                
  105.      
  106.      
  107.      

  108.    
  109. }


  110. void loop()
  111. {
  112.   byte NowHour=Clock.getHour(h12,PM);
  113.   byte NowMinute=Clock.getMinute();
  114.   if  ((OnHour<=NowHour)&&(NowHour<OffHour))
  115.   {
  116.       if ((OnMinute<=NowMinute)&&(NowMinute<OffMinute))
  117.       {
  118.       digitalWrite(13,HIGH);
  119.       }
  120.       else
  121.       {
  122.       digitalWrite(13,LOW);
  123.       }
  124.   }
  125.   else
  126.   {
  127.     digitalWrite(13,LOW);
  128.   }
  129.   
  130. }
复制代码
回复

使用道具 举报

发表于 2014-1-16 14:33:27 | 显示全部楼层
你是打算让人手输入事件的么?
回复 支持 反对

使用道具 举报

发表于 2014-1-17 10:23:23 | 显示全部楼层
推荐你参考一下 http://digital-salvage.net/?p=36
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-17 19:13:14 | 显示全部楼层
zoologist 发表于 2014-1-17 10:23
推荐你参考一下 http://digital-salvage.net/?p=36

我程序是在loop里不断检测当前时间 如果 打开时间<=当前时间<关闭时间 就接通继电器 否则断开.....没用中断...是不是利用ds3231的中断会更好?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 16:54 , Processed in 0.044714 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表