The following code works perfectly to activate 1-9 servos by entering single digits on the keypad. My problem is I would like to be able to control more than 9 servos but I don't know how to write the code to except double digit entries (10-99). Any help with this problem 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;
}
}