8#ifndef ARDUINO_WOPR_JBWOPREFFECTS_H
9#define ARDUINO_WOPR_JBWOPREFFECTS_H
13#include "jbwoprhelpers.h"
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"
50 uint32_t duration = -1,
95 void _displayText(
const std::string& text, JBTextAlignment alignment = JBTextAlignment::LEFT);
98 JBLogger _log {
"effect" };
112 const std::string& text,
113 JBTextAlignment alignment = JBTextAlignment::LEFT,
114 uint32_t duration = -1,
119 void start()
override;
123 void loop()
override;
128 virtual void setText(
const std::string& text);
151 const std::string& text,
152 uint32_t scrollSpeed = 200,
153 uint32_t duration = -1,
158 void start()
override;
162 void loop()
override;
167 virtual void setText(
const std::string& text);
182 JBLogger _log {
"scroll" };
195 std::string timeFormat =
"",
196 uint32_t duration = -1,
201 void start()
override;
205 void loop()
override;
225 JBLogger _log {
"time" };
238 std::string timeFormat =
"",
239 uint32_t duration = -1,
244 void loop()
override;
251 JBLogger _log {
"time" };
264 std::string dateFormat =
"",
265 uint32_t duration = -1,
270 void start()
override;
274 void loop()
override;
289 JBLogger _log {
"date" };
303 std::string dateFormat =
"",
304 uint32_t duration = -1,
309 void loop()
override;
316 JBLogger _log {
"date" };
328 std::string timeFormat =
"",
329 std::string dateFormat =
"",
330 uint32_t duration = -1,
335 void start()
override;
339 void loop()
override;
362 JBLogger _log {
"datetime" };
368 virtual std::string _getOddTimeFormat(
const std::string& format);
380 std::string timeFormat =
"",
381 std::string dateFormat =
"",
382 uint32_t duration = -1,
387 void loop()
override;
394 JBLogger _log {
"datetime" };
404 uint32_t scrollSpeed = 200,
405 uint32_t duration = -1,
411 void start()
override;
415#pragma GCC diagnostic push
416#pragma GCC diagnostic ignored "-Woverloaded-virtual"
417 void setText(std::string& text);
418#pragma GCC diagnostic pop
420 JBLogger _log {
"xmas" };
434 uint32_t duration = -1,
440 void start()
override;
444 void loop()
override;
454 void _displayCurrentGuess();
458 void _displaySolvedCharacters();
462 void _displayBlinkingSolution();
466 void _displayBlinkingLaunching();
471 std::string _getSolution();
476 std::string _getStartingGuess();
481 std::vector<uint32_t> _getSolveOrder();
486 std::string _getRandomCode();
491 static char _getRandomChar();
496 uint32_t _getNextSolveTicks()
const;
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;
518 uint32_t duration = -1,
523 void loop()
override;
526 uint16_t _pixelHue = 0;
548 const std::vector<Note>* song,
549 uint32_t tempo = 114,
550 uint32_t duration = -1,
555 void start()
override;
559 void loop()
override;
564 virtual void setSong(
const std::vector<Note>* song);
569 virtual void setTempo(uint32_t tempo);
572 const std::vector<Note>*
_song =
nullptr;
579 JBLogger _log {
"song" };
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