Turning on multiple relays with space bar

So I am trying to be able to control relays with the serial print in so that i can toggle the relay on and off with the space bar. the problem is that there are 16 relays. so i can control relays 1-9 fine the problem is when i try to turn on relays 10-16 it just turns on relays in the 1-9 series. for example if i put, 12 space bar, it will turn on relay 1 and 2 instead of 12. any thought on this, I have been stumped for like a week! I bolded and italicized the line of code in question. Thnaks

#define RELAY1 31 //climate 1
#define RELAY2 32 //climate 2
#define RELAY3 33 //climate 3
#define RELAY4 34 //climate 4
#define RELAY5 35 //climate 5
#define RELAY6 36 //climate 6
#define RELAY7 37 //climate 7
#define RELAY8 38 //climate 8

#define RELAY9 39 // irrigation 9
#define RELAY10 40 //irrigation 10
#define RELAY11 41 //irrigation 11
#define RELAY12 42 //irrigation 12
#define RELAY13 43 //irrigation 13
#define RELAY14 44 //irrigation 14
#define RELAY15 45 //irrigation 15
#define RELAY16 46 //irrigation 16

void setup()
{
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
pinMode(RELAY5, OUTPUT);
pinMode(RELAY6, OUTPUT);
pinMode(RELAY7, OUTPUT);
pinMode(RELAY8, OUTPUT);

pinMode(RELAY9, OUTPUT);
pinMode(RELAY10, OUTPUT);
pinMode(RELAY11, OUTPUT);
pinMode(RELAY12, OUTPUT);
pinMode(RELAY13, OUTPUT);
pinMode(RELAY14, OUTPUT);
pinMode(RELAY15, OUTPUT);
pinMode(RELAY16, OUTPUT);

Serial.begin(9600); // open serial
** Serial.println("Press a number 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 to toggle a relay on/off");**

}
boolean relay1State = false; // Assume off to start with
boolean relay2State = false;
boolean relay3State = false;
boolean relay4State = false;
boolean relay5State = false;
boolean relay6State = false;
boolean relay7State = false;
boolean relay8State = false;

boolean relay9State = false;
boolean relay10State = false;
boolean relay11State = false;
boolean relay12State = false;
boolean relay13State = false;
boolean relay14State = false;
boolean relay15State = false;
boolean relay16State = false;

void loop()
{
static int relayVal = 0;
int cmd;

while (Serial.available() > 0)
{
cmd = Serial.read();

switch (cmd)
{
case '1':
{
relay1State = !relay1State; // If true, make false. If false, make true
digitalWrite(RELAY1, relay1State);
break;
}
case '2':
{
relay2State = !relay2State; // If true, make false. If false, make true
digitalWrite(RELAY2, relay2State);
break;
}
case '3':
{
relay3State = !relay3State; // If true, make false. If false, make true
digitalWrite(RELAY3, relay3State);
break;
}
case '4':
{
relay4State = !relay4State; // If true, make false. If false, make true
digitalWrite(RELAY4, relay4State);
break;
}
case '5':
{
relay5State = !relay5State; // If true, make false. If false, make true
digitalWrite(RELAY5, relay5State);
break;
}
case '6':
{
relay6State = !relay6State; // If true, make false. If false, make true
digitalWrite(RELAY6, relay6State);
break;
}
case '7':
{
relay7State = !relay7State; // If true, make false. If false, make true
digitalWrite(RELAY7, relay7State);
break;
}
case '8':
{
relay8State = !relay8State; // If true, make false. If false, make true
digitalWrite(RELAY8, relay8State);
break;
}

case '9':
{
relay9State = !relay9State; // If true, make false. If false, make true
digitalWrite(RELAY9, relay9State);
break;
}
case '10':
{
relay10State = !relay10State; // If true, make false. If false, make true
digitalWrite(RELAY10, relay1State);
break;
}
case '11':
{
relay11State = !relay11State; // If true, make false. If false, make true
digitalWrite(RELAY11, relay11State);
break;
}
case '12':
{
relay12State = !relay12State; // If true, make false. If false, make true
digitalWrite(RELAY12, relay12State);
break;
}
case '13':
{
relay13State = !relay13State; // If true, make false. If false, make true
digitalWrite(RELAY13, relay13State);
break;
}
case '14':
{
relay14State = !relay14State; // If true, make false. If false, make true
digitalWrite(RELAY14, relay14State);
break;
}
case '15':
{
relay15State = !relay15State; // If true, make false. If false, make true
digitalWrite(RELAY15, relay15State);
break;
}
case '16':
{
relay16State = !relay16State; // If true, make false. If false, make true
digitalWrite(RELAY16, relay16State);
break;
}
default:
{
Serial.println("There are 8 options Relay 1 or Relay 2 or Relay 3 or Relay 4 or Relay 5 or Relay 6 or Relay 7 or Relay 8");
}
}
}
}

Set up your Serial.read arrangement for a two-digit input (01, 02, 03,... 10, 11, ...)

Single quotes are for single character literals. '10' is not a single character.

A simple solution would be to use 'a', 'b', 'c' etc for the relays numbered higher than 9.

groundfungus:
Single quotes are for single character literals. '10' is not a single character.

Which is just as well, since the Serial.read() only read one character.

OP: You need to read and store all the data until the end of packet marker arrives using a char array. Only when the end of packet marker arrives would you NULL terminate the string and then use atoi() to convert the string to an int, to use in the switch statement.

Emeraldkingdom:
So I am trying to be able to control relays with the serial print in

If you used arrays you could probably reduce the entire sketch to about 20 lines of code. I doubt if you would need the CASE statements at all.

And please go back to your first post and put your code within code tags using the # button so it looks like this

...R

If all you are doing is controlling relays, not other stuff, try the firmata.