Control motor DC bluetooth

Hola buenas noches, estoy trabajando en un proyecto sobre control de sentido de giro de un motor DC via bluetooth con arduino. He logrado que cuando presiono 0 el motor se detenga, cuando presiono 1 el motor gire a la derecha y cuando presiono 2 el motor gire a la izquierda. Pero quisiera que si presiono 1 el motor gire a la derecha y si nuevamente presiono 1 el motor gire a la izquierda y no tengo idea como hacer esto. En resumen quiero que el sentido de giro del motor cambie cada vez que yo presione el 1 y mantenga su estado de giro hasta que yo vuelva a presionar el 1. Help me

int motorPin1 = 3; // pin 2 on L293D IC
int motorPin2 = 4; // pin 7 on L293D IC
int enablePin = 5; // pin 1 on L293D IC
int state;
int flag=0; //makes sure that the serial only prints once the state

void setup() {
// sets the pins as outputs:
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// sets enablePin high so that motor can turn on:
digitalWrite(enablePin, HIGH);
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

void loop() {
//if some date is sent, reads it and saves in state
if(Serial.available() > 0){
state = Serial.read();
flag=0;
}
// if the state is '0' the DC motor will turn off
if (state == '0') {
digitalWrite(motorPin1, LOW); // set pin 2 on L293D low
digitalWrite(motorPin2, LOW); // set pin 7 on L293D low
if(flag == 0){
Serial.println("Motor: off");
flag=1;
}
}
// if the state is '1' the motor will turn right
else if (state == '1') {
digitalWrite(motorPin1, LOW); // set pin 2 on L293D low
digitalWrite(motorPin2, HIGH); // set pin 7 on L293D high
if(flag == 0){
Serial.println("Motor: right");
flag=1;
}
}
// if the state is '2' the motor will turn left
else if (state == '2') {
digitalWrite(motorPin1, HIGH); // set pin 2 on L293D high
digitalWrite(motorPin2, LOW); // set pin 7 on L293D low
if(flag == 0){
Serial.println("Motor: left");
flag=1;
}
}
}

Pero eso es simple programaciòn, y si veo que lograste todo lo que indicas y no puedes hacer que un comando inverta giro cada vez que se presiona me hace suponer que este còdigo simplemente lo has copiado.

si usas una variable de tipo booleana como por ejemplo flagCambioGiro y realizas lo siguiente

flagCambioGiro = !flagCambioGiro ;

cada vez que presiones 1 y lo detectes en tu

else if (state == '1') {
      flagCambioGiro = !flagCambioGiro ;
   }
// lo que sigue

al final preguntas

if (flagCambioGiro) {   //  motor will turn right
       digitalWrite(motorPin1, LOW); // set pin 2 on L293D low
       digitalWrite(motorPin2, HIGH); // set pin 7 on L293D high
}
else {                        //  motor will turn left
       digitalWrite(motorPin1, HIGH); // set pin 2 on L293D high
       digitalWrite(motorPin2, LOW); // set pin 7 on L293D low
}

y hara lo que quieres.

Buenas, si no entiendo mal el problema de adoptar ese metodo de pulsar siempre el mismo boton para ambos giros es que no podemos decidir sobre el primer giro.