Code with named output variables:
const char SOP = '<';
const char EOP = '>';
enum { Case, Speed };
int whichNumber = Case;
int Casev, Speedv;
int M1A = 3;
int M1B = 4;
int M2A = 5;
int M2B = 6;
int MServ =11;
//-------------------------------------------------------------------
void setup ()
{
Serial.begin (9600);
pinMode (M1A, OUTPUT);
pinMode (M1B, OUTPUT);
pinMode (M2A, OUTPUT);
pinMode (M2B, OUTPUT);
pinMode (MServ, OUTPUT);
}
//-------------------------------------------------------------------
void processNumber (int n)
{
int x = n;
switch (whichNumber)
{
case Case:
Casev = x;
whichNumber = Speed;
//Serial.print (" Case = ");
break;
case Speed:
Speedv = x;
whichNumber = Case;
//Serial.print (" Speed = ");
break;
}
//Serial.print(x);
}
//-------------------------------------------------------------------
void processInput ()
{
static float receivedNumber = 0;
static boolean False = false;
byte c = Serial.read ();
switch (c)
{
case EOP:
if (False)
processNumber (- receivedNumber);
else
processNumber (receivedNumber);
// fall through to start a new number
case SOP:
receivedNumber = 0;
False = false;
break;
case '0' ... '9':
receivedNumber *= 10; // receivedNumber = recievedNumber*10
receivedNumber += c - '0'; //receivedNumber = recievedNumber + (c - '0')
break;
case '-':
False = true;
break;
}
}
//-------------------------------------------------------------------
void loop ()
{
if (Serial.available ())
processInput ();
int var1 = Casev;
int var2 = Speedv;
switch (var1)
{
//RIGHT
case 1:
analogWrite(M1A,var2);
digitalWrite(M1B, LOW);
digitalWrite(M2A, LOW);
digitalWrite(M2B, LOW);
break;
//LEFT
case 2:
analogWrite(M1A,var2);
digitalWrite(M1B, HIGH);
digitalWrite(M2A, LOW);
digitalWrite(M2B, LOW);
break;
//FWD
case 3:
analogWrite(M1A,var2);
digitalWrite(M1B, LOW);
digitalWrite(M2A, HIGH);
digitalWrite(M2B, LOW);
break;
//REV
case 4:
analogWrite(M1A,var2);
digitalWrite(M1B, LOW);
digitalWrite(M2A, LOW);
digitalWrite(M2B, HIGH);
break;
//CW
case 5:
analogWrite(M1A,var2);
digitalWrite(M1B, HIGH);
digitalWrite(M2A, LOW);
digitalWrite(M2B, HIGH);
break;
//CCW
case 6:
analogWrite(M1A,var2);
digitalWrite(M1B, LOW);
digitalWrite(M2A, HIGH);
digitalWrite(M2B, HIGH);
break;
//SURFACE
case 7:
analogWrite(M1A,LOW);
digitalWrite(M1B, LOW);
digitalWrite(M2A, LOW);
digitalWrite(M2B, LOW);
break;
//DIVE
case 8:
analogWrite(M1A,var2);
digitalWrite(M1B, HIGH);
digitalWrite(M2A, HIGH);
digitalWrite(M2B, HIGH);
break;
//PITCH
case 9:
analogWrite(M1A,HIGH);
digitalWrite(M1B, LOW);
digitalWrite(M2A, LOW);
digitalWrite(M2B, HIGH);
break;
//SERVO
case 10:
digitalWrite (MServ,HIGH);
//digitalWrite(3,LOW);
//...digitalWrite(4, LOW);
// digitalWrite(5, LOW);
//digitalWrite(6, LOW);
//digitalWrite(7, LOW);
//digitalWrite(8, LOW);
//digitalWrite(9, LOW);
//digitalWrite(10, LOW);
//digitalWrite(12, LOW);
break;
}
}
//-------------------------------------------------------------------