JBWOPR
Loading...
Searching...
No Matches
jbwopreffects.h
Go to the documentation of this file.
1
8#ifndef ARDUINO_WOPR_JBWOPREFFECTS_H
9#define ARDUINO_WOPR_JBWOPREFFECTS_H
10
11#include <Arduino.h>
12#include <JBLogger.h>
13#include "jbwoprhelpers.h"
14#include <string>
15#include <vector>
16
17class JBWoprDevice;
18
19// Note that effect names needs to fit in 12 characters.
20#define JBWOPR_EFFECT_NAME_BASE "Base"
21#define JBWOPR_EFFECT_NAME_TEXT "Text"
22#define JBWOPR_EFFECT_NAME_SCROLLTEXT "Scroll text"
23#define JBWOPR_EFFECT_NAME_TIME "Time"
24#define JBWOPR_EFFECT_NAME_TIME_RAINBOW "Time R"
25#define JBWOPR_EFFECT_NAME_DATE "Date"
26#define JBWOPR_EFFECT_NAME_DATE_RAINBOW "Date Time R"
27#define JBWOPR_EFFECT_NAME_DATETIME "Date Time"
28#define JBWOPR_EFFECT_NAME_DATETIME_RAINBOW "Date Time R"
29#define JBWOPR_EFFECT_NAME_XMAS_SECONDS "Xmas seconds"
30#define JBWOPR_EFFECT_NAME_CODE_SOLVE "Code Solve"
31#define JBWOPR_EFFECT_NAME_DEFCON_RAINBOW "Rainbow"
32#define JBWOPR_EFFECT_NAME_SONG "Song"
33
40
43public:
49 explicit JBWoprEffectBase(JBWoprDevice *woprDevice,
50 uint32_t duration = -1,
51 std::string name = JBWOPR_EFFECT_NAME_BASE);
52
56 virtual std::string getName();
57
60 virtual void start();
61
64 virtual void stop();
65
68 virtual void loop();
69
73 bool isRunning() const;
74
78 uint32_t getDuration() const;
79
80protected:
82 std::string _name;
83 bool _isRunning = false;
84 bool _done = true;
85 uint32_t _duration = -1;
86 uint32_t _startTime = 0;
87 uint32_t _nextTick = 0;
88
95 void _displayText(const std::string& text, JBTextAlignment alignment = JBTextAlignment::LEFT);
96
97private:
98 JBLogger _log {"effect" };
99};
100
103public:
111 explicit JBWoprTextDisplayEffect(JBWoprDevice *woprDevice,
112 const std::string& text,
113 JBTextAlignment alignment = JBTextAlignment::LEFT,
114 uint32_t duration = -1,
115 const std::string& name=JBWOPR_EFFECT_NAME_TEXT);
116
119 void start() override;
120
123 void loop() override;
124
128 virtual void setText(const std::string& text);
129
133 virtual void setAlignment(JBTextAlignment alignment);
134
135protected:
136 std::string _text;
137 JBTextAlignment _alignment;
138};
139
142public:
150 explicit JBWoprScrollTextDisplayEffect(JBWoprDevice *woprDevice,
151 const std::string& text,
152 uint32_t scrollSpeed = 200,
153 uint32_t duration = -1,
154 const std::string& name=JBWOPR_EFFECT_NAME_SCROLLTEXT);
155
158 void start() override;
159
162 void loop() override;
163
167 virtual void setText(const std::string& text);
168
172 void setScrollSpeed(uint32_t scrollSpeed);
173
174protected:
175 std::string _text;
176 uint32_t _scrollSpeed = 200;
177 size_t _currentIndex = 0;
178 size_t _totalLength = 0;
179 size_t _endIndex = 0;
180
181private:
182 JBLogger _log {"scroll" };
183};
184
187public:
194 explicit JBWoprTimeDisplayEffect(JBWoprDevice *woprDevice,
195 std::string timeFormat = "",
196 uint32_t duration = -1,
197 const std::string& name=JBWOPR_EFFECT_NAME_TIME);
198
201 void start() override;
202
205 void loop() override;
206
210 virtual void setTimeFormat(const std::string& timeFormat);
211
212protected:
217 virtual std::string _getOddTimeFormat(const std::string& format);
218
219 bool _evenFormat = false;
220 std::string _rawTimeFormat;
221 std::string _timeFormatEven;
222 std::string _timeFormatOdd;
223
224private:
225 JBLogger _log {"time" };
226};
227
230public:
237 explicit JBWoprTimeDisplayRainbowEffect(JBWoprDevice *woprDevice,
238 std::string timeFormat = "",
239 uint32_t duration = -1,
240 const std::string& name=JBWOPR_EFFECT_NAME_TIME_RAINBOW);
241
244 void loop() override;
245
246protected:
247 uint64_t _nextLedTick = 0;
248 uint16_t _pixelHue = 0;
249
250private:
251 JBLogger _log {"time" };
252};
253
256public:
263 explicit JBWoprDateDisplayEffect(JBWoprDevice *woprDevice,
264 std::string dateFormat = "",
265 uint32_t duration = -1,
266 const std::string& name=JBWOPR_EFFECT_NAME_DATE);
267
270 void start() override;
271
274 void loop() override;
275
279 void setDateFormat(const std::string& dateFormat);
280
281protected:
282 std::string _rawTimeFormat;
283 std::string _timeFormatEven;
284 std::string _timeFormatOdd;
285 std::string _rawDateFormat;
286 std::string _dateFormat;
287
288private:
289 JBLogger _log {"date" };
290};
291
295public:
302 explicit JBWoprDateDisplayRainbowEffect(JBWoprDevice *woprDevice,
303 std::string dateFormat = "",
304 uint32_t duration = -1,
305 const std::string& name=JBWOPR_EFFECT_NAME_DATE_RAINBOW);
306
309 void loop() override;
310
311protected:
312 uint64_t _nextLedTick = 0;
313 uint16_t _pixelHue = 0;
314
315private:
316 JBLogger _log {"date" };
317};
318
323public:
327 explicit JBWoprDateTimeDisplayEffect(JBWoprDevice *woprDevice,
328 std::string timeFormat = "",
329 std::string dateFormat = "",
330 uint32_t duration = -1,
331 const std::string& name=JBWOPR_EFFECT_NAME_DATETIME);
332
335 void start() override;
336
339 void loop() override;
340
344 virtual void setTimeFormat(const std::string& timeFormat);
345
349 void setDateFormat(const std::string& dateFormat);
350
351protected:
352 uint32_t _displayCounter = 0;
353 std::string _rawDateFormat;
354 std::string _rawTimeFormat;
355 std::string _dateFormat;
356 bool _evenFormat = false;
357 std::string _timeFormatEven;
358 std::string _timeFormatOdd;
359// uint64_t _nextLedTick = 0; ///< Next LED tick
360// uint16_t _pixelHue = 0; ///< Pixel hue
361private:
362 JBLogger _log {"datetime" };
363
368 virtual std::string _getOddTimeFormat(const std::string& format);
369};
370
375public:
380 std::string timeFormat = "",
381 std::string dateFormat = "",
382 uint32_t duration = -1,
383 const std::string& name=JBWOPR_EFFECT_NAME_DATETIME_RAINBOW);
384
387 void loop() override;
388
389protected:
390 uint64_t _nextLedTick = 0;
391 uint16_t _pixelHue = 0;
392
393private:
394 JBLogger _log {"datetime" };
395};
396
399public:
404 uint32_t scrollSpeed = 200,
405 uint32_t duration = -1,
406 const std::string& name=JBWOPR_EFFECT_NAME_XMAS_SECONDS);
407
411 void start() override;
412
413private:
415#pragma GCC diagnostic push
416#pragma GCC diagnostic ignored "-Woverloaded-virtual"
417 void setText(std::string& text);
418#pragma GCC diagnostic pop
419
420 JBLogger _log {"xmas" };
421};
422
425public:
432 explicit JBWoprMissileCodeSolveEffect(JBWoprDevice *woprBoard,
434 uint32_t duration = -1,
435 const std::string& name=JBWOPR_EFFECT_NAME_CODE_SOLVE);
436
440 void start() override;
441
444 void loop() override;
445
449 void setCodeSolveVariant(CodeSolveVariant solveVariant);
450
451private:
454 void _displayCurrentGuess();
455
458 void _displaySolvedCharacters();
459
462 void _displayBlinkingSolution();
463
466 void _displayBlinkingLaunching();
467
471 std::string _getSolution();
472
476 std::string _getStartingGuess();
477
481 std::vector<uint32_t> _getSolveOrder();
482
486 std::string _getRandomCode();
487
491 static char _getRandomChar();
492
496 uint32_t _getNextSolveTicks() const;
497
499 uint32_t _currentSolveStep = 0;
500 uint32_t _nextSolveTick = 0;
501 int32_t _defconValue = -1;
502 std::string _currentSolution;
503 std::string _currentGuess;
504 std::vector<uint32_t> _codeSolveOrder;
505 const uint32_t _minSolveTicks = 1300;
506 const uint32_t _maxSolveTicks = 2500;
507};
508
511public:
517 explicit JBWoprDefconRainbowEffect(JBWoprDevice *woprBoard,
518 uint32_t duration = -1,
519 const std::string& name=JBWOPR_EFFECT_NAME_DEFCON_RAINBOW);
520
523 void loop() override;
524
525private:
526 uint16_t _pixelHue = 0;
527};
528
531public:
533 struct Note {
534 uint16_t note;
535 uint16_t octave;
536 int16_t duration;
537 std::string text;
538 };
539
547 explicit JBWoprSongEffect(JBWoprDevice *woprBoard,
548 const std::vector<Note>* song,
549 uint32_t tempo = 114,
550 uint32_t duration = -1,
551 const std::string& name=JBWOPR_EFFECT_NAME_SONG);
552
555 void start() override;
556
559 void loop() override;
560
564 virtual void setSong(const std::vector<Note>* song);
565
569 virtual void setTempo(uint32_t tempo);
570
571protected:
572 const std::vector<Note>*_song = nullptr;
573 uint32_t _step = 0;
574 uint32_t _tempo = 114;
575 uint32_t _wholeNote = (60000 * 4) / _tempo;
576 bool _done = false;
577
578private:
579 JBLogger _log {"song" };
580};
581
582
583
584
585#endif//ARDUINO_WOPR_JBWOPREFFECTS_H
Display effect for showing the current date.
Definition jbwopreffects.h:255
void start() override
Start effect.
Definition jbwopreffects.cpp:353
std::string _timeFormatEven
Time format for even.
Definition jbwopreffects.h:283
std::string _timeFormatOdd
Time format for odd.
Definition jbwopreffects.h:284
std::string _rawTimeFormat
Raw time format.
Definition jbwopreffects.h:282
void setDateFormat(const std::string &dateFormat)
Set date format.
Definition jbwopreffects.cpp:383
std::string _rawDateFormat
Raw date format.
Definition jbwopreffects.h:285
void loop() override
Get name of effect.
Definition jbwopreffects.cpp:358
std::string _dateFormat
Date format.
Definition jbwopreffects.h:286
Display effect for showing the current date, with rainbow colors.
Definition jbwopreffects.h:294
uint64_t _nextLedTick
Next LED tick.
Definition jbwopreffects.h:312
uint16_t _pixelHue
Pixel hue.
Definition jbwopreffects.h:313
void loop() override
Get name of effect.
Definition jbwopreffects.cpp:405
Display effect for showing the current date and time.
Definition jbwopreffects.h:322
std::string _rawTimeFormat
Raw time format.
Definition jbwopreffects.h:354
void setDateFormat(const std::string &dateFormat)
Set date format.
Definition jbwopreffects.cpp:494
void loop() override
Get name of effect.
Definition jbwopreffects.cpp:444
virtual void setTimeFormat(const std::string &timeFormat)
Set time format.
Definition jbwopreffects.cpp:481
bool _evenFormat
True if even format.
Definition jbwopreffects.h:356
std::string _timeFormatOdd
Time format for odd.
Definition jbwopreffects.h:358
uint32_t _displayCounter
Display counter, for switching between Date and Time.
Definition jbwopreffects.h:352
std::string _dateFormat
Date format.
Definition jbwopreffects.h:355
std::string _rawDateFormat
Raw date format.
Definition jbwopreffects.h:353
void start() override
Start effect.
Definition jbwopreffects.cpp:437
std::string _timeFormatEven
Time format for even.
Definition jbwopreffects.h:357
Display effect for showing the current date and time, with rainbow colors.
Definition jbwopreffects.h:374
uint16_t _pixelHue
Pixel hue.
Definition jbwopreffects.h:391
void loop() override
Get name of effect.
Definition jbwopreffects.cpp:530
uint64_t _nextLedTick
Next LED tick.
Definition jbwopreffects.h:390
Rainbow effect for the DEFCON LED's.
Definition jbwopreffects.h:510
void loop() override
Run loop.
Definition jbwopreffects.cpp:783
W.O.P.R. device base class.
Definition jbwopr.h:85
Abstract effect base class.
Definition jbwopreffects.h:42
bool isRunning() const
Check if effect is running.
Definition jbwopreffects.cpp:55
virtual void loop()
Run loop.
Definition jbwopreffects.cpp:39
uint32_t _duration
Duration of effect in milliseconds.
Definition jbwopreffects.h:85
virtual void start()
Start effect.
Definition jbwopreffects.cpp:24
virtual void stop()
Stop effect.
Definition jbwopreffects.cpp:31
std::string _name
Name of effect.
Definition jbwopreffects.h:82
bool _isRunning
True if effect is running.
Definition jbwopreffects.h:83
virtual std::string getName()
Get name of effect.
Definition jbwopreffects.cpp:51
void _displayText(const std::string &text, JBTextAlignment alignment=JBTextAlignment::LEFT)
Display text on raw display.
Definition jbwopreffects.cpp:63
uint32_t _nextTick
Next tick time in milliseconds.
Definition jbwopreffects.h:87
JBWoprDevice * _woprDevice
JBWoprDevice instance.
Definition jbwopreffects.h:81
bool _done
True if effect is done, waiting for duration to end.
Definition jbwopreffects.h:84
uint32_t _startTime
Start time of effect in milliseconds.
Definition jbwopreffects.h:86
uint32_t getDuration() const
Set duration of effect.
Definition jbwopreffects.cpp:59
Display effect for showing the WOPR movie code solve.
Definition jbwopreffects.h:424
void loop() override
Run loop.
Definition jbwopreffects.cpp:604
void start() override
Start effect.
Definition jbwopreffects.cpp:595
void setCodeSolveVariant(CodeSolveVariant solveVariant)
Set code solve variant.
Definition jbwopreffects.cpp:641
Display effect for scrolling text.
Definition jbwopreffects.h:141
virtual void setText(const std::string &text)
Set text to display.
Definition jbwopreffects.cpp:230
void start() override
Start effect.
Definition jbwopreffects.cpp:166
size_t _totalLength
Total length of text.
Definition jbwopreffects.h:178
size_t _currentIndex
Current character index.
Definition jbwopreffects.h:177
void loop() override
Run loop.
Definition jbwopreffects.cpp:176
size_t _endIndex
End index of text.
Definition jbwopreffects.h:179
std::string _text
Text to display.
Definition jbwopreffects.h:175
uint32_t _scrollSpeed
Scroll speed in milliseconds.
Definition jbwopreffects.h:176
void setScrollSpeed(uint32_t scrollSpeed)
Set scroll speed.
Definition jbwopreffects.cpp:234
Base class for song effects.
Definition jbwopreffects.h:530
uint32_t _wholeNote
Whole note duration.
Definition jbwopreffects.h:575
virtual void setTempo(uint32_t tempo)
Set tempo.
Definition jbwopreffects.cpp:879
uint32_t _tempo
Tempo.
Definition jbwopreffects.h:574
bool _done
True if done.
Definition jbwopreffects.h:576
const std::vector< Note > * _song
Melody.
Definition jbwopreffects.h:572
virtual void setSong(const std::vector< Note > *song)
Set melody.
Definition jbwopreffects.cpp:875
void start() override
Start effect.
Definition jbwopreffects.cpp:815
uint32_t _step
Current step.
Definition jbwopreffects.h:573
void loop() override
Run loop.
Definition jbwopreffects.cpp:821
Display effect for showing text.
Definition jbwopreffects.h:102
std::string _text
Text to display.
Definition jbwopreffects.h:136
void loop() override
Run loop.
Definition jbwopreffects.cpp:124
virtual void setAlignment(JBTextAlignment alignment)
Set center text.
Definition jbwopreffects.cpp:148
virtual void setText(const std::string &text)
Set text to display.
Definition jbwopreffects.cpp:134
JBTextAlignment _alignment
True if text should be centered.
Definition jbwopreffects.h:137
void start() override
Start effect.
Definition jbwopreffects.cpp:119
Display effect for showing the current time.
Definition jbwopreffects.h:186
void loop() override
Run loop.
Definition jbwopreffects.cpp:257
std::string _rawTimeFormat
Raw time format.
Definition jbwopreffects.h:220
virtual void setTimeFormat(const std::string &timeFormat)
Set time format.
Definition jbwopreffects.cpp:285
bool _evenFormat
True if even format.
Definition jbwopreffects.h:219
virtual std::string _getOddTimeFormat(const std::string &format)
Get time format.
Definition jbwopreffects.cpp:298
void start() override
Start effect.
Definition jbwopreffects.cpp:251
std::string _timeFormatEven
Time format for even.
Definition jbwopreffects.h:221
std::string _timeFormatOdd
Time format for odd.
Definition jbwopreffects.h:222
Display effect for showing the current time.
Definition jbwopreffects.h:229
uint16_t _pixelHue
Pixel hue.
Definition jbwopreffects.h:248
void loop() override
Run loop.
Definition jbwopreffects.cpp:321
uint64_t _nextLedTick
Next LED tick.
Definition jbwopreffects.h:247
Display effect for showing seconds un til Xmas.
Definition jbwopreffects.h:398
void start() override
Start effect.
Definition jbwopreffects.cpp:562
#define JBWOPR_EFFECT_NAME_DATE_RAINBOW
Name of JBWoprDisplayDateTimeRainbowEffect.
Definition jbwopreffects.h:26
#define JBWOPR_EFFECT_NAME_DATETIME_RAINBOW
Name of JBWoprDisplayDateTimeRainbowEffect.
Definition jbwopreffects.h:28
#define JBWOPR_EFFECT_NAME_SONG
Name of JBWoprSongEffect.
Definition jbwopreffects.h:32
#define JBWOPR_EFFECT_NAME_XMAS_SECONDS
Name of JBWoprDisplayXmasSecondsEffect.
Definition jbwopreffects.h:29
#define JBWOPR_EFFECT_NAME_SCROLLTEXT
Name of JBWoprDisplayScrollTextEffect.
Definition jbwopreffects.h:22
#define JBWOPR_EFFECT_NAME_CODE_SOLVE
Name of JBWoprWOPRMovieSolveEffect.
Definition jbwopreffects.h:30
CodeSolveVariant
Code solve variant for the JBWoprMissileCodeSolveEffect class.
Definition jbwopreffects.h:35
@ MOVIE
Movie code solve.
Definition jbwopreffects.h:36
@ RANDOM
Random code solve.
Definition jbwopreffects.h:37
@ MESSAGE
Message code solve.
Definition jbwopreffects.h:38
#define JBWOPR_EFFECT_NAME_DATE
Name of JBWoprDisplayDateEffect.
Definition jbwopreffects.h:25
#define JBWOPR_EFFECT_NAME_TEXT
Name of JBWoprDisplayTextEffect.
Definition jbwopreffects.h:21
#define JBWOPR_EFFECT_NAME_TIME_RAINBOW
Name of JBWoprDisplayTimeRainbowEffect.
Definition jbwopreffects.h:24
#define JBWOPR_EFFECT_NAME_DEFCON_RAINBOW
Name of JBWoprDefconRainbowEffect.
Definition jbwopreffects.h:31
#define JBWOPR_EFFECT_NAME_TIME
Name of JBWoprDisplayTimeEffect.
Definition jbwopreffects.h:23
#define JBWOPR_EFFECT_NAME_BASE
Name of JBWoprEffectBase.
Definition jbwopreffects.h:20
#define JBWOPR_EFFECT_NAME_DATETIME
Name of JBWoprDisplayDateTimeEffect.
Definition jbwopreffects.h:27
Note struct.
Definition jbwopreffects.h:533
int16_t duration
Duration, negative for dotted note.
Definition jbwopreffects.h:536
uint16_t octave
Octave.
Definition jbwopreffects.h:535
std::string text
Lyrics, set to "" to keep last one, or set to "-" to clear display.
Definition jbwopreffects.h:537
uint16_t note
Note.
Definition jbwopreffects.h:534