Given the following array, how do I do the equivalent of g_arrayCodes[10][2] with pgm_read_byte etc.?
int8_t *pCodeArray = pgm_read_ptr(g_arrayCodes + 10);
int8_t nCode = pCodeArray[0];
The above does not work how I expected it to work.
I am getting random garbage in nCode.
So how do you index a 2D array in PROGMEM?
const int8_t g_arrayCodes[CHAR_ARRAY_SIZE][DOT_DASH_ARRAY_SIZE] PROGMEM = {
/*A*/{DELAY_DOT, DELAY_DASH, -1, -1, -1, -1, -1},
/*B*/{DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DOT, -1, -1, -1},
/*C*/{DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DOT, -1, -1, -1},
/*D*/{DELAY_DASH, DELAY_DOT, DELAY_DOT, -1, -1, -1, -1},
/*E*/{DELAY_DOT, -1, -1, -1, -1, -1, -1},
/*F*/{DELAY_DOT, DELAY_DOT, DELAY_DASH, DELAY_DOT, -1, -1, -1},
/*G*/{DELAY_DASH, DELAY_DASH, DELAY_DOT, -1, -1, -1, -1},
/*H*/{DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DOT, -1, -1, -1},
/*I*/{DELAY_DOT, DELAY_DOT, -1, -1, -1, -1, -1},
/*J*/{DELAY_DOT, DELAY_DASH, DELAY_DASH, DELAY_DASH, -1, -1, -1},
/*K*/{DELAY_DASH, DELAY_DOT, DELAY_DASH, -1, -1, -1, -1},
/*L*/{DELAY_DOT, DELAY_DASH, DELAY_DOT, DELAY_DOT, -1, -1, -1},
/*M*/{DELAY_DASH, DELAY_DASH, -1, -1, -1, -1, -1},
/*N*/{DELAY_DASH, DELAY_DOT, -1, -1, -1, -1, -1},
/*0*/{DELAY_DASH, DELAY_DASH, DELAY_DASH, -1, -1, -1, -1},
/*P*/{DELAY_DOT, DELAY_DASH, DELAY_DASH, DELAY_DOT, -1, -1, -1},
/*Q*/{DELAY_DASH, DELAY_DASH, DELAY_DOT, DELAY_DASH, -1, -1, -1},
/*R*/{DELAY_DOT, DELAY_DASH, DELAY_DOT, -1, -1, -1, -1},
/*S*/{DELAY_DOT, DELAY_DOT, DELAY_DOT, -1, -1, -1, -1},
/*T*/{DELAY_DASH, -1, -1, -1, -1, -1, -1},
/*U*/{DELAY_DOT, DELAY_DOT, DELAY_DASH, -1, -1, -1, -1},
/*V*/{DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DASH, -1, -1, -1},
/*W*/{DELAY_DOT, DELAY_DASH, DELAY_DASH, -1, -1, -1, -1},
/*X*/{DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DASH, -1, -1, -1},
/*Y*/{DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DASH, -1, -1, -1},
/*Z*/{DELAY_DASH, DELAY_DASH, DELAY_DOT, DELAY_DOT, -1, -1, -1},
/*0*/{DELAY_DASH, DELAY_DASH, DELAY_DASH, DELAY_DASH, DELAY_DASH, -1, -1},
/*1*/{DELAY_DOT, DELAY_DASH, DELAY_DASH, DELAY_DASH, DELAY_DASH, -1, -1},
/*2*/{DELAY_DOT, DELAY_DOT, DELAY_DASH, DELAY_DASH, DELAY_DASH, -1, -1},
/*3*/{DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DASH, DELAY_DASH, -1, -1},
/*4*/{DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DASH, -1, -1},
/*5*/{DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DOT, -1, -1},
/*6*/{DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DOT, -1, -1},
/*7*/{DELAY_DASH, DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DOT, -1, -1},
/*8*/{DELAY_DASH, DELAY_DASH, DELAY_DASH, DELAY_DOT, DELAY_DOT, -1, -1},
/*9*/{DELAY_DASH, DELAY_DASH, DELAY_DASH, DELAY_DASH, DELAY_DOT, -1, -1},
/*?*/{DELAY_DOT, DELAY_DOT, DELAY_DASH, DELAY_DASH, DELAY_DOT, DELAY_DOT, -1},
/*!*/{DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DASH, -1},
/*.*/{DELAY_DOT, DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DOT, DELAY_DASH, -1},
/*,*/{DELAY_DASH, DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DASH, DELAY_DASH, -1},
/*;*/{DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DOT, -1},
/*:*/{DELAY_DASH, DELAY_DASH, DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DOT, -1},
/*+*/{DELAY_DOT, DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DOT, -1, -1},
/*-*/{DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DASH, -1},
/*/*/{DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DASH, DELAY_DOT, -1, -1},
/*=*/{DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DASH, -1, -1},
/*&*/{DELAY_DOT, DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DOT, -1, -1},
/*@*/{DELAY_DOT, DELAY_DASH, DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DOT, -1},
/*(*/{DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DASH, DELAY_DOT, DELAY_DASH, -1},
/*)*/{DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DASH, DELAY_DOT, -1, -1},
/*x*/{DELAY_DASH, DELAY_DASH, DELAY_DASH, DELAY_DASH, DELAY_DASH, -1, -1},
/*%*/{DELAY_DASH, DELAY_DOT, DELAY_DASH, DELAY_DASH, DELAY_DOT, -1, -1},
/*'*/{DELAY_DOT, DELAY_DASH, DELAY_DASH, DELAY_DASH, DELAY_DASH, DELAY_DOT, -1},
/*"*/{DELAY_DOT, DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DASH, DELAY_DOT, -1},
/* */{DELAY_DASH, DELAY_DOT, DELAY_DOT, DELAY_DOT, DELAY_DASH, DELAY_DOT, DELAY_DASH}
};