计时器

来自Microduino Wikipedia
502748957@qq.com讨论 | 贡献2018年5月16日 (三) 07:59的版本 (创建页面,内容为“{| style="width: 800px;" |- | <p style="color: #4F4E4E;font-size:220%">'''Module_RTC库-计时器示例'''</p> <br> 在下面的示例中,将使用按键类传感…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

Module_RTC库-计时器示例


在下面的示例中,将使用按键类传感器控制RTC计时,并通过串口返回计时时间。

所需硬件


电路搭建

将Battery、Core、MCookie_RTC、MCookie-Hub堆叠在一起,将触摸传感器插在D2/D3接口

代码

#include <Microduino_RTC.h>

RTC rtc;
/* 设置RTC启动时间
 * 年, 月, 星期, 日, 时, 分, 秒 */
DateTime dateTime = {2016, 6, 3, 1, 15, 30, 40};

//中断标志位
volatile uint8_t timerFlag=0;
uint32_t timer=millis();

//中断函数
void blink(){
  timerFlag=1;
}

void setup()
{
  pinMode(2, INPUT);           // 设置中断引脚
  Serial.begin(9600);
  //清除所有寄存器
  rtc.begin();
  rtc.clearAll();
  rtc.setDateTime(dateTime);
   
  //设置定时器频率 TIM_1_60HZ/TIM_1HZ/TIM_64HZ/TIM_4096HZ
  rtc.setTimerFreq(TIM_1HZ);
  //设置定时器计数值   定时器计时时间 = 计数值/定时器频率
  rtc.setTimerCnt(2);
  rtc.enableTimerInt();
  Serial.println("debug set timer");

  //设置外部中断,中断号0, 下降沿触发
  attachInterrupt(0, blink, FALLING);

}

void loop()
{
  if(millis()-timer>1000)
  {
    //打印当前时间
    rtc.getDateTime(&dateTime);    
    Serial.print(dateTime.year);
    Serial.print("/");
    Serial.print(dateTime.month);
    Serial.print("/");
    Serial.print(dateTime.day);
    Serial.print("     ");
    Serial.print(dateTime.hour);
    Serial.print(":");
    Serial.print(dateTime.minute);
    Serial.print(":");
    Serial.print(dateTime.second);
    Serial.print("\r\n");
    timer=millis();  
  }

  if (timerFlag==1){
    Serial.print("blink!\r\n");
	//清除中断
    rtc.clearTimerInt();   
    detachInterrupt(0);
    timerFlag=0;
    attachInterrupt(0, blink, FALLING);
  }
}

该程序使用D2接口作为外部中断,每次按下触摸传感器都会打印当前时间,作为秒表使用。

返回RTC库语法手册