04.实现Timer获取调用间隔dt时间
小于 1 分钟
04.实现Timer获取调用间隔dt时间
具体实现
Timer.cpp
#include "timer.hpp"
uint32_t Timer::dt_us()
{
pre_us = cur_us;
cur_us = micros(); // micros70分钟溢出一次
uint32_t dt = cur_us > pre_us ? cur_us - pre_us : 1; // 处理溢出和dt为0的情况
return dt;
}
uint16_t Timer::dt_ms()
{
uint16_t dt = dt_us() / 1000;
return dt == 0 ? 1 : dt;
}
uint16_t Timer::dt_s()
{
uint16_t dt = dt_us() / 1000000;
return dt == 0 ? 1 : dt;
}
Timer.hpp
#ifndef _Time_H_
#define _Time_H_
#include <Arduino.h>
#include <stdint.h>
#define _1_Second_ 1000000
#define _1_Millisecond_ 1000
class Timer
{
private:
uint32_t pre_us;
uint32_t cur_us;
public:
uint32_t dt_us();
uint16_t dt_ms();
uint16_t dt_s();
};
#endif
实现效果
04.timer.ino
#include <Arduino.h>
#include "Timer.hpp"
Timer *timer1 = new Timer();
Timer *timer2 = new Timer();
Timer *timer3 = new Timer();
Timer *timer4 = new Timer();
void setup()
{
Serial.begin(115200);
timer1->dt_ms();
timer2->dt_ms();
timer3->dt_ms();
timer4->dt_ms();
}
uint8_t idx = 1;
uint8_t flag = 0;
uint16_t dt[4] = {0};
void loop()
{
if (idx % 10 == 0)
dt[0] = timer1->dt_ms(); // 约100ms调用一次
if (idx % 20 == 0)
dt[1] = timer2->dt_ms(); // 约200ms调用一次
if (idx % 40 == 0)
dt[2] = timer3->dt_ms(); // 约400ms调用一次
if (idx % 80 == 0)
dt[3] = timer4->dt_ms(); // 约800ms调用一次
Serial.print(dt[0]); // 输出约100
Serial.print(',');
Serial.print(dt[1]); // 输出约200
Serial.print(',');
Serial.print(dt[2]); // 输出约400
Serial.print(',');
Serial.print(dt[3]); // 输出约800
Serial.print('\n');
idx %= 160;
idx += 1;
delay(10);
}