Друзья, опять нужна ваша помощь.
Датчик должен передавать температуру на приемник (не ардуино, заводское устройство) с периодичность максимально близкой к постоянной, у родных передатчиков разница между двумя отправками в пределах 10 миллисекунд.
Хотелось бы добиться примерно такой же точности для корректного приема.
Подводит датчик температуры у которого очень разнится время чтения данных - от 60 до 120 миллисекунд из-за чего не получается “выровнять” время.
Пытался реализовать с помощью миллис, рассчитывая что отсчет время чтения датчика начнется одновременно с миллис и оно окажется как-бы “внутри” времени таймера миллис, но выводя данные в порт понял, что миллис работает не так. Перепробовал много разных схем с миллис, тут лишь один из “нерабочих” вариантов.
После отправки плата (lgt8f328p) уходит в сон на точно заданное время, с этим проблем нет.
Подскажите как реализовать точную задержку на чтение датчика и как следствие - точное время работы loop. Ох, надеюсь вы меня поняли.
#include "FineOffset.h"
#include <Wire.h>
#include <AHT20.h>
#define TX_PIN 10
#define DEVICE_ID 123
#include <LowPower.h>
AHT20 aht20;
unsigned long timer1;
unsigned long timer2;
void setup() {
Serial.begin(9600);
Wire.begin(); //Join I2C bus
aht20.begin();
timer1 = timer2 = millis();
}
FineOffset tx(TX_PIN);
void loop(void) {
if (millis() - timer1 > 50) {
timer1 = millis();
float temp = 20.0;
tx.send(DEVICE_ID, temp);
Serial.println(temp);
//Serial.println(timer);
}
if (millis() - timer2 > 5000) {
timer2 = millis();
LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
}
}