极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: Ansifa

Arduino学习笔记A8 - Arduino 连接 DS1302时钟模块

  [复制链接]
发表于 2012-8-20 23:19:47 | 显示全部楼层
为什么我不能通过串口修改时间呢?
回复 支持 反对

使用道具 举报

发表于 2012-8-30 21:16:41 | 显示全部楼层
高深的3102,买了芯片还没搞,先学习下
回复 支持 反对

使用道具 举报

发表于 2012-9-20 09:24:33 | 显示全部楼层
不错,挺实用的
回复 支持 反对

使用道具 举报

发表于 2012-10-22 17:59:43 | 显示全部楼层
为了这个文章,买了个时钟模块~~~
回复 支持 反对

使用道具 举报

发表于 2012-11-19 16:34:47 | 显示全部楼层
再加个温度传感器应该不错
回复 支持 反对

使用道具 举报

发表于 2012-11-20 22:08:14 | 显示全部楼层
编译的时候怎么出现这个错误啊

提示如下:
error: 'String' does not name a type In function 'void print_time()':
In function 'void setup()':
In function 'void loop()':

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-1-3 00:39:12 | 显示全部楼层
我稍微改写了下程序做个测试,想让UNO的13脚在晚上8点到12点输出低电平,其余时刻输出高电平。

但在运行过程中发现了个小问题:
串口供电时一切正常,而用电源口供电时本该低电平的时候,13引脚的LED却是无规律的闪烁。

请各位老师指教,谢谢了!

代码:
#include <stdio.h>
#include <string.h>
#include <DS1302.h>

/* 接口定义
CE(DS1302 pin5) -> Arduino D5
IO(DS1302 pin6) -> Arduino D6
SCLK(DS1302 pin7) -> Arduino D7
*/
uint8_t CE_PIN   = 5;
uint8_t IO_PIN   = 6;
uint8_t SCLK_PIN = 7;

/* 日期变量缓存 */
char buf[50];
char day[10];
/* 串口数据缓存 */
String comdata = "";
int numdata[7] ={0}, j = 0, mark = 0, k = 0;
/* 创建 DS1302 对象 */
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);


void print_time()
{
     /* 从 DS1302 获取当前时间 */
     Time t = rtc.time();
     /* 将星期从数字转换为名称 */
     memset(day, 0, sizeof(day));
     switch (t.day)
     {
     case 1: strcpy(day, "Sunday"); break;
     case 2: strcpy(day, "Monday"); break;
     case 3: strcpy(day, "Tuesday"); break;
     case 4: strcpy(day, "Wednesday"); break;
     case 5: strcpy(day, "Thursday"); break;
     case 6: strcpy(day, "Friday"); break;
     case 7: strcpy(day, "Saturday"); break;
     }
     /* 将日期代码格式化凑成buf等待输出 */
     snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
     /* 输出日期到串口 */
     Serial.println(buf);
     k = t.hr;
}


void setup()
{
     Serial.begin(9600);
     rtc.write_protect(false);
     rtc.halt(false);
     pinMode(13,OUTPUT);
}

void loop()
{
     if( k>=19 && k<=23 ) {
     digitalWrite(13,LOW);
     }
     else  {
     digitalWrite(13,HIGH);
     }
     /* 当串口有数据的时候,将数据拼接到变量comdata */
     while (Serial.available() > 0)
     {
         comdata += char(Serial.read());
         delay(2);
         mark = 1;
     }
     /* 以逗号分隔分解comdata的字符串,分解结果变成转换成数字到numdata[]数组 */
     if(mark == 1)
     {
         Serial.print("You inputed : ");
         Serial.println(comdata);
         for(int i = 0; i < comdata.length() ; i++)
         {
             if(comdata == ',' || comdata == 0x10 || comdata == 0x13)
             {
                 j++;
             }
             else
             {
                 numdata[j] = numdata[j] * 10 + (comdata - '0');
             }
         }
         /* 将转换好的numdata凑成时间格式,写入DS1302 */
         Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
         rtc.time(t);
         mark = 0;j=0;
         /* 清空 comdata 变量,以便等待下一次输入 */
         comdata = String("");
         /* 清空 numdata */
         for(int i = 0; i < 7 ; i++) numdata=0;
     }
     
     /* 打印当前时间 */
     print_time();
     delay(1000);
}
回复 支持 反对

使用道具 举报

发表于 2013-2-20 15:08:40 | 显示全部楼层
我按上面的介绍,试了一下,编译通不过。请指教。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-2-20 16:03:52 | 显示全部楼层
luckly 发表于 2013-2-20 15:08
我按上面的介绍,试了一下,编译通不过。请指教。

你的库文件没装好吧?或者没放对位置
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-2-20 16:04:00 | 显示全部楼层
luckly 发表于 2013-2-20 15:08
我按上面的介绍,试了一下,编译通不过。请指教。

你的库文件没装好吧?或者没放对位置
回复 支持 反对

使用道具 举报

发表于 2013-2-20 16:12:13 | 显示全部楼层
Ansifa 发表于 2013-2-20 16:04
你的库文件没装好吧?或者没放对位置

谢谢,我再试试。我是解压出来直接放到Libraries 里面了。
回复 支持 反对

使用道具 举报

发表于 2013-3-23 20:41:32 | 显示全部楼层
  1. #include <IRremote.h>
  2. #include <IRremoteInt.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <DS1302.h>

  6. int CE_PIN   = 5;
  7. int IO_PIN   = 6;
  8. int SCLK_PIN = 7;
  9. int RECV_PIN = 11;
  10. int flag=0;
  11. int MQ_count=0;
  12. int SR_count=0;
  13. int FR_count=0;
  14. char buf[31];
  15. String sms_SR="A huge of human is coming ";
  16. String sms_MQ="A huge of gas is coming";
  17. String sms_FR="A huge of fire is coming";
  18. /* 创建 DS1302 对象 */
  19. DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
  20. IRrecv irrecv(RECV_PIN);
  21. decode_results results;

  22. void setup()
  23. {
  24.     Serial.begin(9600);
  25.     rtc.writeProtect(false);
  26.     rtc.halt(false);
  27.     irrecv.enableIRIn();
  28. }

  29. void loop()
  30. {   
  31. if (irrecv.decode(&results))
  32.     {
  33.       if(results.value==16753245)
  34.         {
  35.           delay(1000);
  36.           delay(1000);
  37.           Serial.println("system is on");
  38.           while(1)
  39.               {
  40.                 SR501_det();
  41.                 MQ2_det();
  42.                 FR_det();
  43.                 switch(flag)
  44.                   {
  45.                     case 1 : if(SR_count==0)
  46.                               {
  47.                                   SR_count=1;
  48.                                   Add_time();
  49.                                   sms_SR.concat(buf);
  50.                                   gsm_sms(sms_SR);
  51.                                }
  52.                                break;
  53.                    case 2 : if(MQ_count==0)
  54.                               {
  55.                                  MQ_count=1;
  56.                                  Add_time();
  57.                                  sms_MQ.concat(buf);
  58.                                  gsm_sms(sms_MQ);
  59.                               }
  60.                               break;
  61.                    case 3 : if(FR_count==0)
  62.                               {
  63.                                 FR_count=1;
  64.                                 Add_time();
  65.                                 sms_FR.concat(buf);
  66.                                 gsm_sms(sms_FR);
  67.                               }
  68.                               break;
  69.                   }
  70.               }
  71.         }
  72.       irrecv.resume();
  73.     }
  74. }

  75. void gsm_sms(String text)
  76. {
  77.     Serial.println("AT");
  78.     delay(100);
  79.     Serial.println("AT+CMGF=1");
  80.     delay(100);
  81.     Serial.println("AT+CMGS="618975"");  
  82.     delay(100);
  83.     Serial.print(text);
  84.     Serial.write(0x0D);
  85.     delay(100);
  86.     Serial.write(0x1A);
  87.     Serial.write(0x0D);
  88.     delay(100);
  89. }

  90. void Add_time()
  91.   {
  92.    Time t = rtc.getTime();
  93.    snprintf(buf, sizeof(buf), "%02d:%02d:%02d", t.hour, t.min, t.sec);
  94.   }

  95. void SR501_det()
  96.   {
  97.     int SR501;
  98.     SR501=analogRead(5);
  99.     if(SR501>700)
  100.       {
  101.         //digitalWrite(3,LOW);
  102.         //delay(1000);
  103.         //digitalWrite(3,HIGH);
  104.         flag=1;
  105.       }
  106.   }

  107. void MQ2_det()
  108.   {
  109.     int MQ2;
  110.     MQ2=analogRead(4);
  111.     if(MQ2>100)
  112.       {
  113.         //digitalWrite(2,LOW);
  114.         //delay(1000);
  115.         //digitalWrite(2,HIGH);
  116.         flag=2;
  117.       }
  118.   }

  119. void FR_det()
  120. {
  121.   int fire;
  122.   fire=analogRead(3);
  123.   if(fire<100)
  124.     {
  125.       flag=3;
  126.     }
  127. }

复制代码
回复 支持 反对

使用道具 举报

发表于 2013-5-22 14:51:02 | 显示全部楼层
用了一楼的库和代码,输出的秒和分都有问题,不连贯乱跳。60秒分也不加1.请哪位高手帮忙诊断下。
我的环境:UNO+IDE1.0.5
楼上的库文件中的引用WProgram.h已经改成Arduino.h
回复 支持 反对

使用道具 举报

发表于 2013-7-30 20:02:33 | 显示全部楼层


请问我这是为什么?  我就用了一个ds1302+32.768k面包板搭了个电路 请问还需要别的吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-7-30 21:57:23 | 显示全部楼层
lionelg 发表于 2012-4-6 19:40
有个问题,显示的时间总是Friday 2165-25-44 27:00:24
也没办法设置,可以显示输入,但是时间还是不变,我 ...

您好  我测试ds1302  也是这个问题 Saturday 2165-25-45 27:165:85  一直显示这个时间  请问您怎么解决的?

回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 04:22 , Processed in 0.067702 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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