Goga075
New member
Приветствую всех.
Использую в своем проекте программный таймер, который срабатывает при смене часа и производит логирование.
Написал код для аппаратного таймера.
Но расчет времени сбивается и почему это происходит не могу понять.
Мой код не учитывает время выполнение самого кода и значения меньше секунды, по этому получается некий временной сдвиг и каждый последующий цикл выполняется со сдвигом. Примерно через 15 циклов сдвиг равен 1 секунде и формула это компенсирует. Точнее должна, но по какой-то причине иногда это происходит некорректно.
Использую в своем проекте программный таймер, который срабатывает при смене часа и производит логирование.
Написал код для аппаратного таймера.
C++:
#include "esp_timer.h"
#include <Wire.h>
#include <DS3231.h>
DS3231 myRTC;
esp_timer_handle_t timer1;
void setup() {
Serial.begin(115200);
Wire.begin();
delay(1000);
Serial.println("Timer 1 triggered");
Serial.print(myRTC.getMinute(), DEC);
Serial.print(":");
Serial.println(myRTC.getSecond(), DEC);
const esp_timer_create_args_t timer1_args = {
.callback = &timer1_callback,
.name = "timer1"
};
esp_timer_create(&timer1_args, &timer1);
esp_timer_start_once(timer1, (3600-(myRTC.getMinute()*60+myRTC.getSecond()))*1000000ul);
}
void timer1_callback(void* arg) {
Serial.println("Timer 1 triggered");
Serial.print(myRTC.getMinute(), DEC);
Serial.print(":");
Serial.println(myRTC.getSecond(), DEC);
const esp_timer_create_args_t timer1_args = {
.callback = &timer1_callback,
.name = "timer1"
};
esp_timer_create(&timer1_args, &timer1);
esp_timer_start_once(timer1, (3600-(myRTC.getMinute()*60+myRTC.getSecond()))*1000000ul);
}
void loop() {
}
Мой код не учитывает время выполнение самого кода и значения меньше секунды, по этому получается некий временной сдвиг и каждый последующий цикл выполняется со сдвигом. Примерно через 15 циклов сдвиг равен 1 секунде и формула это компенсирует. Точнее должна, но по какой-то причине иногда это происходит некорректно.