You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.5 KiB
60 lines
1.5 KiB
// Implements a class to draw and animate a pair of eyes |
|
#pragma once |
|
|
|
#include <MD_MAX72xx.h> |
|
|
|
// Misc defines |
|
#define EYEBALL_ROWS 8 // number of rows in the eyeball definition |
|
#define RANDOM_SEED_PORT A0 // for random seed bit shuffling |
|
|
|
class MD_EyePair |
|
{ |
|
public: |
|
MD_EyePair(void); |
|
~MD_EyePair(void) { }; |
|
|
|
void begin(uint8_t startdev, MD_MAX72XX *M, uint16_t maxDelay); |
|
void animate(void); |
|
|
|
protected: |
|
// Pupil related information |
|
enum posPupil_t // Initials are for Top, Middle and Bottom; Left, Center and Right (eg, TL = Top Left) |
|
{ |
|
P_TL = 0, P_TC = 1, P_TR = 2, |
|
P_ML = 3, P_MC = 4, P_MR = 5, |
|
P_BL = 6, P_BC = 7, P_BR = 8 |
|
}; |
|
|
|
// Class static data |
|
static uint8_t _pupilData[]; |
|
static uint8_t _eyeballData[]; |
|
|
|
// display parameters |
|
MD_MAX72XX *_M; |
|
uint8_t _sd; // start device |
|
uint8_t _ed; // end device |
|
|
|
// blinking parameters |
|
uint32_t _lastBlinkTime; |
|
uint16_t _currentDelay; |
|
uint8_t _blinkState; |
|
uint8_t _savedEyeball[EYEBALL_ROWS]; |
|
uint8_t _blinkLine; |
|
|
|
// animation parameters |
|
posPupil_t _pupilCurPos; // the current position for the pupil |
|
uint32_t _timeLast; |
|
uint16_t _timeDelay; |
|
uint16_t _maxDelay; |
|
bool _inBlinkCycle; |
|
|
|
// methods |
|
void drawEyeball(void); |
|
bool blinkEyeball(bool bFirst); |
|
void drawPupil(posPupil_t posOld, posPupil_t posNew); |
|
bool posIsAdjacent(posPupil_t posCur, posPupil_t posNew); |
|
|
|
// random seed creation |
|
uint16_t bitOut(uint8_t port); |
|
uint32_t seedOut(uint16_t noOfBits, uint8_t port); |
|
};
|
|
|