2回答

1收藏

【赚周年币】技术贴-----(5)Fireduino RTC测试

#线上活动 #线上活动 2844 人阅读 | 2 人回复 | 2016-12-09

本帖最后由 wambob 于 2016-12-9 20:18 编辑

看了wu工的RTC测试,我也忍不住了,到官网看了下资料。
Fireduino RTC 使用外接设备为I2C 接口的HYM5863,挂接在Wire1 接口。
RTC使用了一个结构体
  1. typedef struct
  2. {
  3.     unsigned short year;//year (1900 ~ 2099)
  4.     unsigned char  mon;//month,begin from 1 to 12
  5.     unsigned char  week;//week (0:Sunday 1:Monday ... 6:Saturday)
  6.     unsigned char  day;//day,begin from 1 to 31
  7.     unsigned char  hour;//hour,24-hour
  8.     unsigned char  min;//minute
  9.     unsigned char  sec;//second
  10. }RTCTime;
复制代码
给了两个API用来设置和读取结构体值。getTime(RTCTime *time)setTime(RTCTime *time)官网给出了一个串口打印的例子
  1. #include "Arduino.h"
  2. #include "Wire.h"
  3. #include "RTC.h"
  4. RTCTime time;
  5. void setup(void)
  6. {
  7.         Serial.begin(115200);
  8.         Serial.print("\r\n FireDuino Setup ...\r\n");
  9.         time.year  = 2016;//year (1900 ~ 2099)
  10.         time.mon   = 3;//month,begin from 1 to 12
  11.         time.week  = 1 ;//week (0:Sunday 1:Monday ... 6:Saturday)
  12.         time.day   = 14;//day,begin from 1 to 31
  13.         time.hour  = 23;//hour,24-hour
  14.         time.min   = 59;//minute
  15.         time.sec   = 50;//second
  16.         Wire1.begin();
  17.         RTC.setTime(&time);
  18. }
  19. void loop(void)
  20. {
  21.         delay(100);
  22.         RTC.getTime(&time);
  23.         Serial.println();
  24.         Serial.print("Y:");
  25.         Serial.print(time.year,DEC);
  26.         Serial.print(" M:");
  27.         Serial.print(time.mon,DEC);
  28.         Serial.print(" W:");
  29.         Serial.print(time.week,DEC);
  30.         Serial.print(" d:");
  31.         Serial.print(time.day,DEC);
  32.         Serial.print(" h:");
  33.         Serial.print(time.hour,DEC);
  34.         Serial.print(" m:");
  35.         Serial.print(time.min,DEC);
  36.         Serial.print(" s:");
  37.         Serial.print(time.sec,DEC);
  38.         Serial.println();
  39. }
复制代码
打开从官网下载的IDE1.6.8版本,因为使用6.1.13版本配置的问题,读不出数,oled也不显示。

编译下载代码到板子上打开串口助手,可以看到读出了例程里的时间。
这个RTC例程在IDE目录下D:\arduino-1.6.8\portable\packages\Firefly\hardware\arm\1.3.0\libraries\RTC

红色框中是自己准备的oled和字库。第三方的库不支持,什么都要从来,挺费力啊。
其中的I2C协议文件在D:\arduino-1.6.8\portable\packages\Firefly\hardware\arm\1.3.0\libraries\Wire下,里面有数字加速度传感器ADXL345例程。
添加头文件和代码到例程里。编译的时候会提示只读文件,需要另存个路径,点OK吧。
我的主代码如下
  1. /**
  2. * @file RTC_set_get.ino
  3. * @brief Definitions RTC_set_get Demo for Fireduino
  4. * @author jiang<jdz@t-chip.com.cn>
  5. * @version V1.0
  6. * @date 2016.02
  7. *
  8. * @par Copyright:
  9. * Copyright (c) 2016 T-CHIP INTELLIGENCE TECHNOLOGY CO.,LTD. \n\n
  10. *
  11. * For more information, please visit website <http://www.t-firefly.com/>, \n\n
  12. * or email to <service@t-firefly.com>.
  13. */
  14. #include "Arduino.h"
  15. #include "Wire.h"
  16. #include "RTC.h"
  17. #include "ssd1306.h"

  18. RTCTime time;
  19. char year1[100];
  20. char month1[100];
  21. char day1[100];
  22. char hour1[100];
  23. char minute1[100];
  24. char second1[100];
  25. char week1[100];

  26. void setup(void)
  27. {
  28.         Serial.begin(115200);
  29.         time.year  = 2016;//year (1900 ~ 2099)
  30.         time.mon   = 12;//month,begin from 1 to 12
  31.         time.week  = 5 ;//week (0:Sunday 1:Monday ... 6:Saturday)
  32.         time.day   = 9;//day,begin from 1 to 31
  33.         time.hour  = 19;//hour,24-hour
  34.         time.min   = 35;//minute
  35.         time.sec   = 50;//second
  36.         Wire1.begin();
  37.         RTC.setTime(&time);
  38.   OLED_pin_Init();  
  39.   oled_init();   
  40. }

  41. void loop(void)
  42. {
  43.   OLED_Clear();  
  44.         //delay(1000);
  45.         OLED_ShowString(10,0,"RTC test!",12);
  46.         RTC.getTime(&time);

  47.   sprintf(year1,"%d" ,time.year);
  48.   sprintf(month1,"%d" ,time.mon);
  49.   sprintf(day1,"%d" ,time.day);

  50.   sprintf(hour1,"%d" ,time.hour);
  51.   sprintf(minute1,"%d" ,time.min);
  52.   sprintf(second1,"%d" ,time.sec);

  53.   sprintf(week1,"%d" ,time.week);  
  54.   
  55.   OLED_ShowString(10,16,year1,12);
  56.   OLED_ShowChar(34,16,'-',12,1);
  57.   OLED_ShowString(40,16,month1,12);
  58.   OLED_ShowChar(52,16,'-',12,1);
  59.   OLED_ShowString(58,16,day1,12);  

  60.   OLED_ShowString(10,32,hour1,12);
  61.   OLED_ShowChar(22,32,':',12,1);
  62.   OLED_ShowString(28,32,minute1,12);
  63.   OLED_ShowChar(40,32,':',12,1);
  64.   OLED_ShowString(46,32,second1,12);
  65.    
  66.   OLED_ShowString(10,48,"week:",12);  
  67.   OLED_ShowString(40,48,week1,12);
  68.   OLED_Refresh_Gram();//
  69.   delay(3000);
  70. }


复制代码
编译后下载到板子上,显示出读取的时间,+上延迟,刷新一屏要用5秒看来需要修改下显示API,部分刷新了。





评分

参与人数 1 +20 收起 理由
loveeeboard + 20

查看全部评分

分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

jackten

发表于 2016-12-13 18:03:43 | 只看该作者

谢谢分享                                    
板凳

行色匆匆

发表于 2016-12-16 16:15:33 | 只看该作者

慢慢学习学习
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条