#ifndef __MAIN_H__
#define __MAIN_H__

#include <avr/io.h>
#include <avr/pgmspace.h>

#define MATRIX_NUM_ROWS     5 // matrix has five rows
#define MATRIX_NUM_COLS     5 // matrix has five columns

#define MATRIX_ROW0_PIN     0 // on portA
#define MATRIX_ROW1_PIN     1 // on portA
#define MATRIX_ROW2_PIN     2 // on portA
#define MATRIX_ROW3_PIN     3 // on portA
#define MATRIX_ROW4_PIN     4 // on portA
#define MATRIX_COL0_PIN     5 // on portA
#define MATRIX_COL1_PIN     6 // on portA
#define MATRIX_COL2_PIN     7 // on portA
#define MATRIX_COL3_PIN     2 // on portB
#define MATRIX_COL4_PIN     3 // on portB

#define MATRIX_POV_TIME     2 // time in milliseconde for PoV effect
#define MATRIX_SHIFT_TIME 100 // time in milliseconds for matrix shift
#define MATRIX_SHIFT_CTR (100 / MATRIX_POV_TIME) // number of PoV effects for one matrix shift

// Define and initialize global variables
volatile char    ledMatrixArray[MATRIX_NUM_COLS] = {0x00, 0x04, 0x15, 0x0A, 0x04};
volatile uint8_t ledMatrixPtr = 0;      // a pointer to keep track of the current active row
volatile uint8_t ledMatrixShiftCtr = 0; // a timer to track when to shift the matrix

#endif