For some reason this particular function will cause the uno to lock up as in everything stopping functioning and some strings returned to serial are garbage just before freeze. I narrowed it down to here by commenting out call and finding it works fine when bypassed. I can't post whole code as it's too long.
void menuM1() {
char lcdOut0[20];
char lcdOut1[20];
char timeM[4][20] = { {"Time Set"}, {"Auto/NTP Time Set"}, {"Temp Timeout"}, {"Fan Timeout."} };
char scheduleM[4][20] = { {"Set # of blocks"}, {"Select Block"}, {"Set block time"}, {"Set block Temp"}};
char fanM[4][20] = { {"On with H/C"}, {"On all time"}, {"Post-mix..."}, {"On Every..."} };
char tempM[4][20] = { {"Hysteresis"}, {"Temp. Alerts"}, {"."}};
char lockM[4][20] = { {"Lock On/Off"} , { "Lock Timeout" }, { '.' }, { '.' }};
switch (menuIDa) {
case 0: //Time Menu
strncpy(lcdOut0, timeM[menuIndex], 20);
strncpy(lcdOut1, timeM[menuIndex + 1], 20);
break;
case 1: //Schedule Menu
strncpy(lcdOut0, scheduleM[menuIndex], 20);
strncpy(lcdOut1, scheduleM[menuIndex + 1], 20);
break;
case 2: //Fan Menu
strncpy(lcdOut0, fanM[menuIndex], 20);
strncpy(lcdOut1, fanM[menuIndex + 1], 20);
break;
case 3: //Lock Menu
strncpy(lcdOut0, lockM[menuIndex], 20);
strncpy(lcdOut1, lockM[menuIndex + 1], 20);
case 4: //Temperature Menu
strncpy(lcdOut0, tempM[menuIndex], 20);
strncpy(lcdOut1, tempM[menuIndex + 1], 20);
break;
}
Serial.print('*');
Serial.println(lcdOut0);
Serial.println(lcdOut1);
Serial.println("----------");
}