text: // Implements a class to draw and animate a pair of eyes
  #ifndef MDEYEPAIR_H
  #define MDEYEPAIR_H
  
  #include <MD_MAX72xx.h>
  #include <TrueRandom.h>
  
  // Misc defines
  #define	EYEBALL_ROWS	8		// number of rows in the eyeball definition
  
  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);
  };
  
  #endif