8x8 Led Matrix Library 1.0.0
This is a library for the 8x8 Led Matrix by Soldered
Loading...
Searching...
No Matches
MD_RobotEyes.h
Go to the documentation of this file.
1// Implements a class to draw and animate a pair of 'emotive' eyes for a robot
2//
3#pragma once
4
6
7// Misc defines
8#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
9#define EYE_COL_SIZE 8
10
11// Module offsets from first module specified
12#define LEFT_MODULE_OFFSET 1
13#define RIGHT_MODULE_OFFSET 0
14
15// Array references for eyeData array below
16#define LEFT_EYE_INDEX 1
17#define RIGHT_EYE_INDEX 0
18
19// Basic unit of time a frame is displayed
20#define FRAME_TIME 100
21
28{
29 public:
36 //
56
62 MD_RobotEyes(void);
63
71
85 void begin(Led_Matrix *M, uint8_t moduleStart = 0);
86
103 inline void setAnimation(emotion_t e, bool r, bool b = false)
104 {
105 _nextEmotion = e;
106 _autoReverse = r;
107 _animReverse = b;
108 };
109
118 inline void setBlinkTime(uint16_t t)
119 {
121 };
122
130 inline void setAutoBlink(bool b)
131 {
132 _autoBlink = b;
133 };
134
144 inline bool setText(const char *pText)
145 {
146 if (_pText != nullptr)
147 return (false);
148 else
149 _pText = pText;
150 return (true);
151 };
152
163 bool runAnimation(void);
164
165 protected:
166 // Animations FSM state
175
176 // Define an animation frame
178 {
179 uint8_t eyeData[2]; // [LEFT_MODULE_OFFSET] and [RIGHT_MODULE_OFFSET] eye character from font data
180 uint16_t timeFrame; // Time for this frame in milliseconds
181 };
182
183 // Define an entry in the animation sequence lookup table
185 {
188 uint8_t size;
189 };
190
191 // Display parameters
193 uint16_t _sd; // Start module for the display
194
195 // Animation parameters
201 uint16_t _scrollDelay;
202
203 // Animation control data
204 animTable_t _animEntry; // Record with animation sequence parameters
205 int8_t _animIndex; // Current index in the animation sequence
206 bool _animReverse; // True = reverse sequence, false = normal sequence
207 bool _autoReverse; // True = always play the reverse, false = selected direction only
208 emotion_t _nextEmotion; // The next emotion to display
209 const char *_pText; // Pointer to text data in user code. Not nullptr means there is text to print
210
211 // Methods
212 void loadEye(uint8_t module, uint8_t ch);
213 void drawEyes(uint8_t L, uint8_t R);
214 uint8_t loadSequence(emotion_t e); // Return the size of the sequence
215 void loadFrame(animFrame_t *pBuf);
216 void showText(bool bInit = false);
217
218 void dumpSequence(const animFrame_t *pBuf, uint8_t numElements); // Debugging routine only
219
220 // Static data tables
221 static const animFrame_t seqBlink[], seqWink[];
222 static const animFrame_t seqLeft[], seqRight[], seqUp[], seqDown[];
223 static const animFrame_t seqAngry[], seqSad[], seqEvil[], seqEvil2[];
224 static const animFrame_t seqSquint[], seqDead[];
226
227 // Lookup table to find animation
228 static const animTable_t lookupTable[];
229};
Definition Led-Matrix-SOLDERED.h:19
Definition MD_RobotEyes.h:28
static const animFrame_t seqEvil2[]
Definition MD_RobotEyes.h:223
static const animFrame_t seqRight[]
Definition MD_RobotEyes.h:222
void loadFrame(animFrame_t *pBuf)
Definition MD_RobotEyes.cpp:105
static const animFrame_t seqDown[]
Definition MD_RobotEyes.h:222
Led_Matrix * _M
Definition MD_RobotEyes.h:192
static const animFrame_t seqUp[]
Definition MD_RobotEyes.h:222
uint32_t _timeLastAnimation
Definition MD_RobotEyes.h:197
static const animTable_t lookupTable[]
Definition MD_RobotEyes.h:228
void showText(bool bInit=false)
Definition MD_RobotEyes.cpp:112
int8_t _animIndex
Definition MD_RobotEyes.h:205
bool _autoReverse
Definition MD_RobotEyes.h:207
animState_t
Definition MD_RobotEyes.h:168
@ S_RESTART
Definition MD_RobotEyes.h:170
@ S_PAUSE
Definition MD_RobotEyes.h:172
@ S_TEXT
Definition MD_RobotEyes.h:173
@ S_ANIMATE
Definition MD_RobotEyes.h:171
@ S_IDLE
Definition MD_RobotEyes.h:169
void dumpSequence(const animFrame_t *pBuf, uint8_t numElements)
Definition MD_RobotEyes.cpp:63
static const animFrame_t seqSquint[]
Definition MD_RobotEyes.h:224
uint32_t _timeStartPause
Definition MD_RobotEyes.h:196
static const animFrame_t seqScanUpDown[]
Definition MD_RobotEyes.h:225
static const animFrame_t seqSad[]
Definition MD_RobotEyes.h:223
const char * _pText
Definition MD_RobotEyes.h:209
bool _autoBlink
Definition MD_RobotEyes.h:200
static const animFrame_t seqAngry[]
Definition MD_RobotEyes.h:223
uint8_t loadSequence(emotion_t e)
Definition MD_RobotEyes.cpp:80
void setBlinkTime(uint16_t t)
Definition MD_RobotEyes.h:118
animTable_t _animEntry
Definition MD_RobotEyes.h:204
emotion_t
Definition MD_RobotEyes.h:38
@ E_LOOK_R
Both eyes look right.
Definition MD_RobotEyes.h:44
@ E_ANGRY
Eyes look angry (symmetrical)
Definition MD_RobotEyes.h:47
@ E_SAD
Eyes look sad (symmetrical)
Definition MD_RobotEyes.h:48
@ E_SQUINT
Both eye squint.
Definition MD_RobotEyes.h:51
@ E_BLINK
Both eyes blink.
Definition MD_RobotEyes.h:41
@ E_LOOK_U
Both eyes look up.
Definition MD_RobotEyes.h:45
@ E_SCAN_LR
Both eyes scanning Left/Right.
Definition MD_RobotEyes.h:54
@ E_LOOK_D
Both eyes look down.
Definition MD_RobotEyes.h:46
@ E_NONE
Placeholder for no emotions, not user selectable.
Definition MD_RobotEyes.h:39
@ E_EVIL2
Eyes look evil (asymmetrical)
Definition MD_RobotEyes.h:50
@ E_EVIL
Eyes look evil (symmetrical)
Definition MD_RobotEyes.h:49
@ E_NEUTRAL
Eyes in neutral position (no animation)
Definition MD_RobotEyes.h:40
@ E_DEAD
Eyes indicate dead (different)
Definition MD_RobotEyes.h:52
@ E_SCAN_UD
Both eyes scanning Up/Down.
Definition MD_RobotEyes.h:53
@ E_WINK
One eye blink.
Definition MD_RobotEyes.h:42
@ E_LOOK_L
Both eyes look left.
Definition MD_RobotEyes.h:43
void loadEye(uint8_t module, uint8_t ch)
Definition MD_RobotEyes.cpp:32
uint16_t _sd
Definition MD_RobotEyes.h:193
bool setText(const char *pText)
Definition MD_RobotEyes.h:144
static const animFrame_t seqWink[]
Definition MD_RobotEyes.h:221
void drawEyes(uint8_t L, uint8_t R)
Definition MD_RobotEyes.cpp:44
void begin(Led_Matrix *M, uint8_t moduleStart=0)
Definition MD_RobotEyes.cpp:184
static const animFrame_t seqEvil[]
Definition MD_RobotEyes.h:223
~MD_RobotEyes(void)
Definition MD_RobotEyes.h:70
void setAutoBlink(bool b)
Definition MD_RobotEyes.h:130
bool runAnimation(void)
Definition MD_RobotEyes.cpp:199
emotion_t _nextEmotion
Definition MD_RobotEyes.h:208
MD_RobotEyes(void)
Definition MD_RobotEyes.cpp:29
static const animFrame_t seqScanLeftRight[]
Definition MD_RobotEyes.h:225
void setAnimation(emotion_t e, bool r, bool b=false)
Definition MD_RobotEyes.h:103
static const animFrame_t seqBlink[]
Definition MD_RobotEyes.h:221
uint16_t _scrollDelay
Definition MD_RobotEyes.h:201
uint16_t _timeBlinkMinimum
Definition MD_RobotEyes.h:198
static const animFrame_t seqDead[]
Definition MD_RobotEyes.h:224
bool _animReverse
Definition MD_RobotEyes.h:206
static const animFrame_t seqLeft[]
Definition MD_RobotEyes.h:222
animState_t _animState
Definition MD_RobotEyes.h:199
Definition MD_RobotEyes.h:178
uint16_t timeFrame
Definition MD_RobotEyes.h:180
uint8_t eyeData[2]
Definition MD_RobotEyes.h:179
Definition MD_RobotEyes.h:185
const animFrame_t * seq
Definition MD_RobotEyes.h:187
uint8_t size
Definition MD_RobotEyes.h:188
emotion_t e
Definition MD_RobotEyes.h:186