Using Keypad to trigger outputs with Digits greater than 9

I have a sketch that throws servo turnouts and powers the track on an HO train layout. It successfully works with keypad presses 0-9. I would like to know how to be able to do the same thing using more than single digit key presses so I can control more than 10 turnouts. I guess I would have to use the pound or star key as an enter key and stop the process until enter is pushed after the second digit. any help would be greatly appreciated.

PRH3

/*Relay-St Louis Staging Yard
Sets switches to selected track
Turns on a relay in a cascade configuration.

modified Jan 2, 2017
by Carl Schoeneberg

*/
//Libraries and required code
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#include <Keypad.h>

const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] =
{{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}};
byte rowPins[ROWS] = {10,11,12,13};
byte colPins[COLS] = {7,8,9};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

//end of required code

// the setup function runs once when you press reset or power the board

void setup()
{
Serial.begin (9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);
pwm.begin();
pwm.setPWMFreq(60);
Serial.begin(9600);
Serial.println("16 channel Servo Test");
yield();
//int S1S = 250;
//int S1L = 300;
pwm.setPWM(1, 0, 250);
delay(100);
pwm.setPWM(3, 0, 245);
delay(100);
//pwm.setPWM(5, 0, 400);
//delay(100);
//pwm.setPWM(8, 0, 400);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
}

// the loop function runs over and over again forever

void loop()
{
char key = keypad.getKey(); //Press a keypad key
Serial.print(key);
switch(key) //switch-case looks for numerals 1-9, other are ignored
{
//the selected case positions switches with pwm.set
//and then the required relay will be tripped to power a single track

case '1':
pwm.setPWM(1, 0, 250);
delay(100);
pwm.setPWM(3, 0, 245);
delay(100);
//pwm.setPWM(5, 0, 400);
//delay(100);
//pwm.setPWM(8, 0, 400);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
break;

case '2':
pwm.setPWM(1, 0, 250);
delay(100);
pwm.setPWM(3, 0, 290);
delay(100);
//pwm.setPWM(5, 0, 400);
//delay(100);
//pwm.setPWM(8, 0, 175);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
break;

case '3':
pwm.setPWM(1, 0, 300);
delay(100);
pwm.setPWM(2, 0, 285);
delay(100);
pwm.setPWM(4, 0, 310);
delay(100);
//pwm.setPWM(7, 0, 400);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
break;

case '4':
pwm.setPWM(1, 0, 300);
delay(100);
pwm.setPWM(2, 0, 290);
delay(100);
pwm.setPWM(4, 0, 370);
delay(100);
//pwm.setPWM(7, 0, 175);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
break;

case '5':
pwm.setPWM(1, 0, 300);
delay(100);
pwm.setPWM(2, 0, 350);
delay(100);
pwm.setPWM(5, 0, 210);
delay(100);
pwm.setPWM(6, 0, 320);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(A0, LOW);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
break;

case '6':
pwm.setPWM(1, 0, 300);
delay(100);
pwm.setPWM(2, 0, 350);
delay(100);
pwm.setPWM(5, 0, 210);
delay(100);
pwm.setPWM(6, 0, 275);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(A0, HIGH);
digitalWrite(A1, LOW);
digitalWrite(A2, HIGH);
digitalWrite(A3, HIGH);
break;

case '7':
pwm.setPWM(1, 0, 300);
delay(100);
pwm.setPWM(2, 0, 350);
delay(100);
pwm.setPWM(5, 0, 270);
delay(100);
pwm.setPWM(7, 0, 240);
//delay(100);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, LOW);
digitalWrite(A3, HIGH);
break;

case '8':
pwm.setPWM(1, 0, 300);
delay(100);
pwm.setPWM(2, 0, 350);
delay(100);
pwm.setPWM(5, 0, 270);
delay(100);
pwm.setPWM(7, 0, 330);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(A0, HIGH);
digitalWrite(A1, HIGH);
digitalWrite(A2, HIGH);
digitalWrite(A3, LOW);
break;

}

}

Why not read keystrokes until you receive an "end of input" key (e.g., '#'), storing each keystroke in a char array. When you read the EOI, convert the digit characters to an int and then process it.

Please read the three posts at the top of this Forum, especially the one that details using code tags for code listings.

Thanks for the quick reply EconJack. I was hoping for some examples of how to write all of that. I am not experienced enough to take what you said and turn it into usable code.

PRH3