JBWOPR
Loading...
Searching...
No Matches
jbwopr.h
Go to the documentation of this file.
1
9#ifndef ARDUINO_JBWOPR_JBWOPR_H
10#define ARDUINO_JBWOPR_WOPR_H
11
12#include <Arduino.h>
13#include <map>
14#include <list>
15//#include <driver/i2s.h>
16#include <jblogger.h>
17#include <Adafruit_GFX.h> // https://github.com/adafruit/Adafruit-GFX-Library
18#include <Adafruit_LEDBackpack.h> // https://github.com/adafruit/Adafruit_LED_Backpack
19#include <Adafruit_NeoPixel.h> // https://github.com/adafruit/Adafruit_NeoPixel
20#include <OneButton.h> // https://github.com/mathertel/OneButton
21#include <ArduinoJson.h> // https://github.com/bblanchon/ArduinoJson
23#include "jbwoprhelpers.h"
24
25#define LIBRARY_VERSION "1.0.2";
26
32
42
52
55 std::string timeFormat;
56 std::string dateFormat;
59 uint32_t effectsTimeout;
60};
61
72
73// ====================================================================
74//
75// W.O.P.R. base device class
76//
77// ====================================================================
86public:
87 // ====================================================================
88 // General
89 //
92
100
107 virtual bool begin(JBWoprBoardVariant variant, JBWoprBoardPins pins);
108
112 virtual void loop();
113
116
117 // ====================================================================
118 // Configuration
119 //
124
125 // ====================================================================
126 // Logger
127 //
131 virtual void setLogLevel(LogLevel level);
132
136 virtual LogLevel getLogLevel();
137
138 // ====================================================================
139 // Effects
140 //
148
153
158
162 std::vector<JBWoprEffectBase*> effectsGetRegisteredEffects();
163
168
171 virtual void effectsStartCurrentEffect();
172
175 virtual void effectsStopCurrentEffect();
176
181
186 virtual void effectsStartEffect(JBWoprEffectBase* effect);
187
191 virtual void effectsStartEffect(const std::string& name);
192
196 virtual void effectsStartEffect(const char* name);
197
198 // ====================================================================
199 // Display
200 //
204 std::array<Adafruit_AlphaNum4, 3> getDisplay();
205
209 virtual void displaySetState(bool state);
210
213 virtual void displayClear();
214
217 virtual void displayShow();
218
222 virtual void displaySetBrightness(uint8_t val);
223
228 virtual void displaySetChar(uint8_t index, char chr);
229
234 virtual void displayShowText(const char* text, JBTextAlignment alignment);
235
240 virtual void displayShowText(const std::string& text, JBTextAlignment alignment);
241
246 virtual void displayShowText(const String& text, JBTextAlignment alignment);
247
251 virtual void displayShowText(const char* text);
252
256 virtual void displayShowText(const std::string& text);
257
261 virtual void displayShowText(const String& text);
262
269 virtual void displayScrollText(const char* text, uint16_t delay_ms);
270
277 virtual void displayScrollText(const String& text, uint16_t delay_ms);
278
285 virtual void displayScrollText(const std::string& text, uint16_t delay_ms);
286
292 virtual void displayScrollText(const char* text);
293
299 virtual void displayScrollText(const std::string& text);
300
306 virtual void displayScrollText(const String& text);
307
308 // ====================================================================
309 // DEFCON LEDs
310 //
311 const char* DEFCON_STRINGS[6] { "DEFCON 1", "DEFCON 2", "DEFCON 3", "DEFCON 4", "DEFCON 5", "None" };
312
316 Adafruit_NeoPixel* getDefconLeds();
317
321 virtual void defconLedsSetState(bool state);
322
326 virtual void defconLedsSetBrightness(uint8_t brightness);
327
331 virtual void defconLedsSetDefconLevel(JBDefconLevel level);
332
336 virtual void defconLedsSetColor(uint32_t color);
337
340 virtual void defconLedsClear();
341
342 // Individual DEFCON LEDs
347 virtual void defconLedSetColor(JBDefconLevel level, uint32_t color);
348
353 virtual void defconLedSetDefconStateColor(JBDefconLevel level, uint32_t color);
354
355 // ====================================================================
356 // Audio
357 //
361 void audioPlayTone(const uint16_t freq);
362
367 void audioPlayNote(note_t note, uint8_t octave);
368
371 void audioClear();
372
373 // ====================================================================
374 // Buttons
375 //
382 OneButton* getButtonFrontLeft();
383
390 OneButton* getButtonFrontRight();
391
398 OneButton* getButtonBackTop();
399
406 OneButton* getButtonBackBottom();
407
411 virtual void buttonFrontLeftSetClickCallback( std::function<void()> func );
412
416 virtual void buttonFrontLeftSetDoubleClickCallback( std::function<void()> func );
417
421 virtual void buttonFrontRightSetClickCallback( std::function<void()> func );
422
426 virtual void buttonFrontRightSetDoubleClickCallback( std::function<void()> func );
427
431 virtual void buttonBackTopSetClickCallback( std::function<void()> func );
432
436 virtual void buttonBackTopSetDoubleClickCallback( std::function<void()> func );
437
441 virtual void buttonBackBottomSetClickCallback( std::function<void()> func );
442
446 virtual void buttonBackBottomSetDoubleClickCallback( std::function<void()> func );
447
448protected:
449 // ====================================================================
450 // Configuration
451 //
455
456 // ====================================================================
457 // Effects
458 //
460 std::vector<JBWoprEffectBase*> _effects;
462 uint32_t _effectsCounter = 0;
463
464 // ====================================================================
465 // Display
466 //
467 std::array<Adafruit_AlphaNum4, 3> _display;
468 bool _displayState = true;
469 uint32_t _displayBrightness = 100;
470
471 // ====================================================================
472 // Defcon LEDs
473 //
474 Adafruit_NeoPixel _defconLeds = Adafruit_NeoPixel(5, 1, NEO_GRB + NEO_KHZ800);
475 bool _defconState = true;
477 uint32_t _defconColors[5];
478 uint32_t _defconBrightness = 100;
479 uint32_t _defconLedsColor = 0;
480
481 // Note - due to how Adafruit_Neopixel handles brigthness, we buffer the LED colors into the
482 // _defconPixels variable together with the current brightness value.
483 // We then apply them both before calling show().
484 uint32_t _defconPixels[5] { 0,0,0,0,0};
485 uint32_t _defconBrigthtness = 100;
486
490 JBDefconLevel _getDefconLevel(std::string value);
491
495 std::string _getDefconLevelString(JBDefconLevel level);
496
500 uint32_t _getDefconLedsPixel(JBDefconLevel level);
501
502 // ====================================================================
503 // Buttons
504 //
505 OneButton* _buttonFrontLeft;
506 OneButton* _buttonFrontRight;
507 OneButton* _buttonBackTop;
508 OneButton* _buttonBackBottom;
509
510 std::function<void()> _buttonFrontLeftClickCallback;
512 std::function<void()> _buttonFrontRightClickCallback;
514 std::function<void()> _buttonBackTopClickCallback;
515 std::function<void()> _buttonBackTopDoubleClickCallback;
516 std::function<void()> _buttonBackBottomClickCallback;
518
519 static void _staticButtonFrontLeftClickCallback(void* data);
520 static void _staticButtonFrontLeftDoubleClickCallback(void* data);
521 static void _staticButtonFrontRightClickCallback(void* data);
522 static void _staticButtonFrontRightDoubleClickCallback(void* data);
523 static void _staticButtonBackTopClickCallback(void* data);
524 static void _staticButtonBackTopDoubleClickCallback(void* data);
525 static void _staticButtonBackBottomClickCallback(void* data);
526 static void _staticButtonBackBottomDoubleClickCallback(void* data);
527
528 virtual void _buttonFrontLeftClick();
529 virtual void _buttonFrontLeftDoubleClick();
530 virtual void _buttonFrontRightClick();
531 virtual void _buttonFrontRightDoubleClick();
532 virtual void _buttonBackTopClick();
533 virtual void _buttonBackTopDoubleClick();
534 virtual void _buttonBackBottomClick();
535 virtual void _buttonBackBottomDoubleClick();
536
537 // ====================================================================
538 // Audio
539 bool _useDAC = false;
540 int _audioFreq = 2000;
543
544private:
545 // ====================================================================
546 // Logger
547 JBLogger* _log;
548};
549
550#endif //ARDUINO_WOPR_WOPR_H
W.O.P.R. device base class.
Definition jbwopr.h:85
JBWoprEffectBase * _defaultEffect
Default effect.
Definition jbwopr.h:459
virtual void _buttonBackBottomDoubleClick()
Back bottom button double click callback.
Definition jbwopr.cpp:733
virtual void _buttonFrontLeftDoubleClick()
Front left button double click callback.
Definition jbwopr.cpp:685
static void _staticButtonBackTopDoubleClickCallback(void *data)
Back top button internal double click callback.
Definition jbwopr.cpp:609
std::function< void()> _buttonBackTopClickCallback
Back top button click callback.
Definition jbwopr.h:514
uint32_t _defconLedsColor
DEFCON LED's color.
Definition jbwopr.h:479
int _audioResolution
Audio resolution.
Definition jbwopr.h:542
static void _staticButtonBackBottomDoubleClickCallback(void *data)
Back bottom button internal double click callback.
Definition jbwopr.cpp:619
std::function< void()> _buttonFrontRightDoubleClickCallback
Front right button double click callback.
Definition jbwopr.h:513
virtual void _buttonBackBottomClick()
Back bottom button click callback.
Definition jbwopr.cpp:725
virtual void loop()
JBWoprDevice loop.
Definition jbwopr.cpp:129
JBWoprBoardVariant getBoardVariant()
Get W.O.P.R board variant.
Definition jbwopr.cpp:173
uint32_t _defconPixels[5]
DEFCON buffered pixel colors.
Definition jbwopr.h:484
static void _staticButtonBackBottomClickCallback(void *data)
Back bottom button internal click callback.
Definition jbwopr.cpp:614
virtual void _buttonFrontLeftClick()
Front left button click callback.
Definition jbwopr.cpp:677
bool _defconState
DEFCON state.
Definition jbwopr.h:475
std::string _getDefconLevelString(JBDefconLevel level)
Get DEFCON level string from DEFCON level.
Definition jbwopr.cpp:663
bool _displayState
Display state.
Definition jbwopr.h:468
int _audioFreq
Audio frequency.
Definition jbwopr.h:540
uint32_t _displayBrightness
Display brightness.
Definition jbwopr.h:469
OneButton * _buttonBackTop
Back to.
Definition jbwopr.h:507
JBDefconLevel _getDefconLevel(std::string value)
Get DEFCON level from string value.
Definition jbwopr.cpp:648
JBWoprConfiguration _config
JBWoprDevice configuration.
Definition jbwopr.h:453
std::function< void()> _buttonBackTopDoubleClickCallback
Back top button double click callback.
Definition jbwopr.h:515
OneButton * _buttonBackBottom
Back bottom button.
Definition jbwopr.h:508
JBWoprDevice()
JBWoprDevice constructor.
Definition jbwopr.cpp:16
JBDefconLevel _defconLevel
DEFCON level.
Definition jbwopr.h:476
std::function< void()> _buttonBackBottomDoubleClickCallback
Back bottom button double click callback.
Definition jbwopr.h:517
static void _staticButtonFrontLeftClickCallback(void *data)
Front left button internal click callback.
Definition jbwopr.cpp:584
static void _staticButtonFrontLeftDoubleClickCallback(void *data)
Front left button internal double click callback.
Definition jbwopr.cpp:589
JBWoprBoardVariant _woprVariant
W.O.P.R. board version.
Definition jbwopr.h:452
JBWoprBoardPins _pins
W.O.P.R. board pin assignements.
Definition jbwopr.h:454
virtual void _buttonFrontRightClick()
Front right button click callback.
Definition jbwopr.cpp:693
OneButton * _buttonFrontLeft
Front left button.
Definition jbwopr.h:505
Adafruit_NeoPixel _defconLeds
DEFCON LEDs.
Definition jbwopr.h:474
uint32_t _defconColors[5]
DEFCON colors.
Definition jbwopr.h:477
bool _useDAC
Use DAC.
Definition jbwopr.h:539
std::function< void()> _buttonFrontLeftClickCallback
Front left button click callback.
Definition jbwopr.h:510
uint32_t _getDefconLedsPixel(JBDefconLevel level)
Get DEFCON LED strip pixel from DEFCON level.
Definition jbwopr.cpp:659
uint32_t _defconBrightness
DEFCON brightness.
Definition jbwopr.h:478
static void _staticButtonFrontRightDoubleClickCallback(void *data)
Front right button internal double click callback.
Definition jbwopr.cpp:599
virtual void _buttonBackTopDoubleClick()
Back top button double click callback.
Definition jbwopr.cpp:717
std::function< void()> _buttonBackBottomClickCallback
Back bottom button click callback.
Definition jbwopr.h:516
uint32_t _defconBrigthtness
DEFCON brightness.
Definition jbwopr.h:485
virtual void _buttonBackTopClick()
Back top button click callback.
Definition jbwopr.cpp:709
virtual bool begin(JBWoprBoardVariant variant=JBWoprBoardVariant::ORIGINAL)
Initialize JBWoprDevice.
Definition jbwopr.cpp:30
std::vector< JBWoprEffectBase * > _effects
Effects.
Definition jbwopr.h:460
int _audioChannel
Audio channel.
Definition jbwopr.h:541
static void _staticButtonBackTopClickCallback(void *data)
Back top button internal click callback.
Definition jbwopr.cpp:604
static void _staticButtonFrontRightClickCallback(void *data)
Front right button internal click callback.
Definition jbwopr.cpp:594
OneButton * _buttonFrontRight
Front right button.
Definition jbwopr.h:506
JBWoprEffectBase * _currentEffect
Current effect.
Definition jbwopr.h:461
std::function< void()> _buttonFrontLeftDoubleClickCallback
Front left button double click callback.
Definition jbwopr.h:511
virtual void _buttonFrontRightDoubleClick()
Front right button double click callback.
Definition jbwopr.cpp:701
std::function< void()> _buttonFrontRightClickCallback
Front right button click callback.
Definition jbwopr.h:512
uint32_t _effectsCounter
Effects counter.
Definition jbwopr.h:462
std::array< Adafruit_AlphaNum4, 3 > _display
Display.
Definition jbwopr.h:467
Abstract effect base class.
Definition jbwopreffects.h:42
void audioClear()
Stop audio playback.
Definition jbwopr.cpp:522
void audioPlayTone(const uint16_t freq)
Play audio tone.
Definition jbwopr.cpp:504
void audioPlayNote(note_t note, uint8_t octave)
Play audio tone.
Definition jbwopr.cpp:513
virtual void buttonBackBottomSetDoubleClickCallback(std::function< void()> func)
Set back bottom button double click callback.
Definition jbwopr.cpp:580
virtual void buttonFrontLeftSetClickCallback(std::function< void()> func)
Set front left button click callback.
Definition jbwopr.cpp:552
virtual void buttonFrontRightSetDoubleClickCallback(std::function< void()> func)
Set front right button double click callback.
Definition jbwopr.cpp:564
virtual void buttonFrontRightSetClickCallback(std::function< void()> func)
Set front right button click callback.
Definition jbwopr.cpp:560
OneButton * getButtonBackTop()
Get back top button OneButton instance.
Definition jbwopr.cpp:544
virtual void buttonBackTopSetDoubleClickCallback(std::function< void()> func)
Set back top button double click callback.
Definition jbwopr.cpp:572
OneButton * getButtonFrontRight()
Get front right button OneButton instance.
Definition jbwopr.cpp:540
OneButton * getButtonBackBottom()
Get back bottom button OneButton instance.
Definition jbwopr.cpp:548
virtual void buttonFrontLeftSetDoubleClickCallback(std::function< void()> func)
Set front left button double click callback.
Definition jbwopr.cpp:556
OneButton * getButtonFrontLeft()
Get front left button OneButton instance.
Definition jbwopr.cpp:536
virtual void buttonBackTopSetClickCallback(std::function< void()> func)
Set back top button click callback.
Definition jbwopr.cpp:568
virtual void buttonBackBottomSetClickCallback(std::function< void()> func)
Set back top button long press callback.
Definition jbwopr.cpp:576
JBWoprConfiguration * getConfiguration()
Get current JBWoprDevice configuration.
Definition jbwopr.cpp:169
virtual void defconLedsSetState(bool state)
Set DEFCON state.
Definition jbwopr.cpp:421
virtual void defconLedsSetBrightness(uint8_t brightness)
Set DEFCON LED's brightness level.
Definition jbwopr.cpp:460
virtual void defconLedsSetColor(uint32_t color)
Set all DEFCON LED's color.
Definition jbwopr.cpp:448
Adafruit_NeoPixel * getDefconLeds()
Get DEFCON LEDs.
Definition jbwopr.cpp:417
virtual void defconLedSetDefconStateColor(JBDefconLevel level, uint32_t color)
Set color for a DEFCON level.
Definition jbwopr.cpp:489
virtual void defconLedsSetDefconLevel(JBDefconLevel level)
Set DEFCON level.
Definition jbwopr.cpp:430
virtual void defconLedsClear()
Clear all DEFCON LEDs.
Definition jbwopr.cpp:471
virtual void defconLedSetColor(JBDefconLevel level, uint32_t color)
Set individual DEFCON LED's color.
Definition jbwopr.cpp:478
virtual void displaySetState(bool state)
Set display state.
Definition jbwopr.cpp:253
virtual void displayShow()
Force display to show current data.
Definition jbwopr.cpp:279
virtual void displaySetBrightness(uint8_t val)
Set display brightness percentage.
Definition jbwopr.cpp:260
std::array< Adafruit_AlphaNum4, 3 > getDisplay()
Get display.
Definition jbwopr.cpp:249
virtual void displaySetChar(uint8_t index, char chr)
Set individual display character.
Definition jbwopr.cpp:286
virtual void displayShowText(const char *text, JBTextAlignment alignment)
Set display text.
Definition jbwopr.cpp:293
virtual void displayClear()
Clear display.
Definition jbwopr.cpp:269
virtual void displayScrollText(const char *text, uint16_t delay_ms)
Set display scroll text.
Definition jbwopr.cpp:356
bool effectsDefaultEffectIsRunning()
Check if default effect is running.
Definition jbwopr.cpp:184
void effectsRegisterDefaultEffect(JBWoprEffectBase *effect)
Register default effect.
Definition jbwopr.cpp:180
virtual void effectsStartEffect(JBWoprEffectBase *effect)
Start effect.
Definition jbwopr.cpp:223
JBWoprEffectBase * effectsGetCurrentEffect()
Get current effect.
Definition jbwopr.cpp:199
virtual void effectsStartCurrentEffect()
Start current effect.
Definition jbwopr.cpp:203
bool effectsCurrentEffectIsRunning()
Check if current effect is running.
Definition jbwopr.cpp:216
std::vector< JBWoprEffectBase * > effectsGetRegisteredEffects()
Get a list of registered effects.
Definition jbwopr.cpp:195
virtual void effectsStopCurrentEffect()
Stop current effect.
Definition jbwopr.cpp:210
void effectsRegisterEffect(JBWoprEffectBase *effect)
Register effect.
Definition jbwopr.cpp:191
virtual LogLevel getLogLevel()
Get log level.
Definition jbwopr.cpp:633
virtual void setLogLevel(LogLevel level)
Set log level.
Definition jbwopr.cpp:629
JBDefconLevel
DEFCON levels.
Definition jbwopr.h:34
@ DEFCON_4
DEFCON 4.
Definition jbwopr.h:38
@ DEFCON_NONE
No DEFCON level.
Definition jbwopr.h:40
@ DEFCON_1
DEFCON 1.
Definition jbwopr.h:35
@ DEFCON_3
DEFCON 3.
Definition jbwopr.h:37
@ DEFCON_2
DEFCON 2.
Definition jbwopr.h:36
@ DEFCON_5
DEFCON 5.
Definition jbwopr.h:39
JBWoprBoardVariant
W.O.P.R. board version.
Definition jbwopr.h:28
@ HAXORZ
Haxorz W.O.P.R. board.
Definition jbwopr.h:30
@ ORIGINAL
Original W.O.P.R. board.
Definition jbwopr.h:29
Header file for the JBWopr library.
W.O.P.R. board pin assignments.
Definition jbwopr.h:44
uint8_t buttonBackTopPin
Back top button pin.
Definition jbwopr.h:47
uint8_t buttonBackBottomPin
Back bottom button pin.
Definition jbwopr.h:48
uint8_t dacPin
DAC pin.
Definition jbwopr.h:50
uint8_t defconLedsPin
DEFCON LEDs pin.
Definition jbwopr.h:49
uint8_t buttonFrontRightPin
Front right button pin.
Definition jbwopr.h:46
uint8_t buttonFrontLeftPin
Front left button pin.
Definition jbwopr.h:45
JBWoprDevice configuration.
Definition jbwopr.h:54
uint32_t effectsTimeout
Effects timeout, seconds.
Definition jbwopr.h:59
std::string dateFormat
Date format.
Definition jbwopr.h:56
uint8_t displayBrightness
Display brightness.
Definition jbwopr.h:57
std::string timeFormat
Time format.
Definition jbwopr.h:55
uint32_t defconLedsBrightness
DEFCON LEDs brightness.
Definition jbwopr.h:58