mirror of
https://github.com/AlexGyver/GyverLamp2.git
synced 2025-08-10 09:57:36 +03:00
add
This commit is contained in:
68
firmware/GyverLamp2_v0.6b/timeRandom.h
Normal file
68
firmware/GyverLamp2_v0.6b/timeRandom.h
Normal file
@@ -0,0 +1,68 @@
|
||||
#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
|
Reference in New Issue
Block a user