mirror of
https://github.com/AlexGyver/GyverLamp2.git
synced 2025-08-07 08:40:35 +03:00
69 lines
2.2 KiB
C++
69 lines
2.2 KiB
C++
#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
|