Files
GyverLamp2/firmware/GyverLamp2_v0.6b/timeRandom.h
2021-02-03 23:34:17 +03:00

69 lines
2.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef TimeRandom_h
#define TimeRandom_h
#include <Arduino.h>
class TimeRandom {
public:
// установить канал (по умолч 0)
void setChannel(byte channel) {
_c = channel;
}
// обновить ЧМС
void update(byte h, byte m, byte s) {
_h = h;
_m = m;
_s = s;
}
// количество секунд с начала суток
uint32_t getSec() {
return (_h * 3600ul + _m * 60 + _s);
}
// количество минут с начала суток
uint32_t getMin() {
return (_h * 60 + _m);
}
// случайное число, обновляется каждые every секунд
uint16_t fromSec(int every) {
uint16_t s = getSec() / every;
uint16_t val = (uint16_t)(_c + 1) * (_h + 1) * (_m + 1) * (s + 1);
for (uint16_t i = 0; i < s & 0b1111; i++) val = (val * 2053ul) + 13849;
return val;
}
// случайное число от 0 до max, обновляется каждые every секунд
uint16_t fromSec(byte every, uint16_t max) {
return ((uint32_t)max * fromSec(every)) >> 16;
}
// случайное число от min до max, обновляется каждые every секунд
uint16_t fromSec(byte every, uint16_t min, uint16_t max) {
return (fromSec(every, max - min) + min);
}
// случайное число, обновляется каждые every минут
uint16_t fromMin(int every) {
uint16_t m = getMin() / every;
uint16_t val = (uint16_t)(_c + 1) * (_h + 1) * (m + 1);
for (uint16_t i = 0; i < m & 0b1111; i++) val = (val * 2053ul) + 13849;
return val;
}
// случайное число от 0 до max, обновляется каждые every минут
uint16_t fromMin(byte every, uint16_t max) {
return ((uint32_t)max * fromMin(every)) >> 16;
}
// случайное число от min до max, обновляется каждые every минут
uint16_t fromMin(byte every, uint16_t min, uint16_t max) {
return (fromMin(every, max - min) + min);
}
private:
byte _h = 0, _m = 0, _s = 0, _c = 0;
};
#endif