It tough to follow the program flow, even though you've broken it down into functions. First, requiring the user to enter upper case letters first, and then switch to lowercase letters for input after that is expecting the user to pay closer attention than is realistic. Use toupper() to convert input to upper case and work on that. Next, try to avoid using globals as much as possible. They make it harder to isolate bugs. Also, try to use a single input routine. Note how I've done away with ch in the code.
// digits mm/dd/yy
int m;
int d1;
int d2;
int y1;
int y2;
//char ch;
char mm;
void setup () {
Serial.begin (9600);
Menu ();
}
void loop () {
char ch;
if (Serial.available () > 0) {
ch = ReadInput();
Serial.print ("You Entered: ");
Serial.println (ch);
Serial.println();
if (ch == 'A' || ch == 'B' || ch == 'C') {
menuLayout(ch);
}
}
}
void menuLayout (char ch) {
char input;
switch (ch) {
case 'A':
input = SelMonth();
Month(input);
break;
case 'B': SetClock ();
break;
case 'C': SetAlarm ();
break;
}
}
void Menu () {
Serial.println ("[A] Date Settings");
Serial.println ("[B] Clock Settings");
Serial.println ("[C] Alarm Settings");
}
char SelMonth () {
char input;
Serial.println("Set date by selecting a month");
Serial.println ("[a] Jan [e] May [i] Sep");
Serial.println ("[b] Feb [f] Jun [j] Oct");
Serial.println ("[c] Mar [g] Jul [k] Nov");
Serial.println ("[d] Apr [h] Aug [l] Dec");
input = ReadInput();
return input;
}
void Month(char in) {
switch (in) {
case 'A': Serial.println ("Jan");
break;
case 'B': Serial.println ("Feb");
break;
case 'C': Serial.println ("Mar");
break;
case 'D': Serial.println ("Apr");
break;
case 'E': Serial.println ("May");
break;
case 'F': Serial.println ("June");
break;
case 'G': Serial.println ("July");
break;
case 'H': Serial.println ("Aug");
break;
case 'I': Serial.println ("Sep");
break;
case 'J': Serial.println ("Oct");
break;
case 'K': Serial.println ("Nov");
break;
case 'L': Serial.println ("Dec");
break;
}
}
void SetClock () {
Serial.println("Set Time");
Serial.println("");
}
void SetAlarm () {
Serial.println("Set Alarm");
Serial.println("");
}
char ReadInput()
{
char input;
while (true) {
if (Serial.available()) {
input = toupper(Serial.read()); // Any case will do now
return input;
}
}
}
Also note how menuLayout() processes the selection before returning to loop().