本帖最后由 9robot 于 2016-12-29 16:36 编辑
在这几天的学习当中发现Fireduino的串口并不是十分好用,有时会经常出现错误导致报错,因此决定尽量不适用串口来显示信息。上个帖子搞定了IIC接口的OLED屏,今天就可以使用OLED屏来显示Fireduino运行时的一些信息。Fireduino自带了RTC模块。
RTC芯片是HYM5863,
RTC -- HYM5863HYM8563是一款低功耗CMOS实时时钟/日历芯片,它提供一个可编程的时钟输出,一个中断输出和一个掉电检测器,所有的地址和数据都通过I2C总线接口串行传递。最大总线速度为400Kbit/s,每次读写数据后,内嵌的字地址寄存器会自动递增。
Fireduino RTCFireduino RTC 使用外接设备为I2C 接口的HYM5863,挂接在Wire1 接口
Fireduino RTCTime 相关结构体
//datetimeInfo struct
typedef struct
{
unsigned short year;//year (1900 ~ 2099)
unsigned char mon;//month,begin from 1 to 12
unsigned char week;//week (0:Sunday 1:Monday ... 6:Saturday)
unsigned char day;//day,begin from 1 to 31
unsigned char hour;//hour,24-hour
unsigned char min;//minute
unsigned char sec;//second
}RTCTime;
Fireduino RTC APIgetTime(RTCTime *time)
说明 获取RTCTime
语法 RTC.getTime(&time);
参数 RTCTime 类型指针
返回 无
setTime(RTCTime *time)
说明 设置RTCTime
语法 RTC.setTime(&time);
参数 RTCTime 类型指针
返回 无
这次试验没有键盘,因此不能通过手动设置时间和日期,这部分功能还需要补充。代码部分列出了与RTC有关的操作,省略了其他函数,可以在附件里找到全部内容。- #include "Arduino.h"
- #include "Wire.h"
- #include "RTC.h"
- #include "oledfont.h"
- RTCTime time;
- #define OLED_ADDRESS (0x78>>1) //通过调整0R电阻,屏可以0x78和0x7A两个地址 -- 默认0x78
- char Year[10];
- char Month[10];
- char Day[10];
- char Hour[10];
- char Minute[10];
- char Second[10];
- void setup() {
- Serial.begin(9600);
- delay(100);
- pinMode(3, OUTPUT);
- digitalWrite(3,HIGH);
- Serial.println("setup");
- Wire.begin(); //初始化I2C
- delay(100);
- OLED_Init();
- time.year = 2016;//year (1900 ~ 2099)
- time.mon = 12;//month,begin from 1 to 12
- time.week = 4 ;//week (0:Sunday 1:Monday ... 6:Saturday)
- time.day = 28;//day,begin from 1 to 31
- time.hour = 23;//hour,24-hour
- time.min = 59;//minute
- time.sec = 50;//second
- Wire1.begin();
- RTC.setTime(&time);
- }
- void loop() {
- char tab[]={"Fireduino"};
- char date1[20]={};
- char time1[20]={};
- OLED_ClearScr();
- while(1)
- {
- RTC.getTime(&time);
- date1[0]=(time.year)/1000+'0';
- date1[1]=(time.year)%1000/100+'0';
- date1[2]=(time.year)%100/10+'0';
- date1[3]=(time.year)%10+'0';
- date1[4]='-';
- date1[5]=(time.mon)/10+'0';
- date1[6]=(time.mon)%10+'0';
- date1[7]='-';
- date1[8]=(time.day)/10+'0';
- date1[9]=(time.day)%10+'0';
-
- time1[0]=(time.hour)/10+'0';
- time1[1]=(time.hour)%10+'0';
- time1[3]=(time.min)/10+'0';
- time1[4]=(time.min)%10+'0';
- time1[6]=(time.sec)/10+'0';
- time1[7]=(time.sec)%10+'0';
- time1[2]=':';
- time1[5]=':';
- LCD_P8x16Str(0,0,date1);
- LCD_P8x16Str(0,2,time1);
-
- // digitalWrite(3,HIGH);
- // delay(100);
- // digitalWrite(3,LOW);
- // delay(100);
- }
- }
复制代码 |