Como podéis ver hay dos botones más. Los dos centrales son hacia adelante y hacia atrás, siendo los dos de los extremos el que gira en sentido horario y el otro el que gira en sentido antihorario. Para poder controlar el vehículo hay que añadir los eventos de pulsación de dichos pulsadores nuevos como veremos en el sketch.
//Importamos la libreria AFMotor.h #include <AFMotor.h> //Definimos los pines de los botones #define ADELANTE 22 #define ATRAS 23 #define IZQUIERDA 24 #define DERECHA 25 //Creamos los dos motores que están conectados a M1 y M2 respectivamente con frecuencia 64KHZ AF_DCMotor motor(2, MOTOR12_64KHZ); AF_DCMotor motor2(1, MOTOR12_64KHZ); //variable para la velocidad int velocidad; //Función 'Setup' void setup() { //Inicializamos Serial Serial.begin(9600); Serial.println("BiRueda Pulsador (+Giro sobre sí mismo)"); //Botones como entrada y abiertos pinMode(ADELANTE, INPUT); digitalWrite(ADELANTE, HIGH); pinMode(ATRAS, INPUT); digitalWrite(ATRAS, HIGH); pinMode(IZQUIERDA, INPUT); digitalWrite(IZQUIERDA, HIGH); pinMode(DERECHA, INPUT); digitalWrite(DERECHA, HIGH); //Le damos velocidad a los motores motor.setSpeed(255); motor2.setSpeed(255); } //Eventos de captura de los botones //Botón adelante boolean UP() { //Si el pin está LOW quiere decir que está pulsado int up_pulsado = !digitalRead(ADELANTE); return up_pulsado; } //Botón atras boolean DOWN() { int down_pulsado = !digitalRead(ATRAS); return down_pulsado; } //Botón izquierda boolean LEFT() { int left_pulsado = !digitalRead(IZQUIERDA); return left_pulsado; } //Botón derecha boolean RIGHT() { int right_pulsado = !digitalRead(DERECHA); return right_pulsado; } //Función 'Loop' void loop() { //Obtenemos los eventos de cada botón usando las funciones implementadas boolean ad = UP(); boolean at = DOWN(); boolean iz = LEFT(); boolean de = RIGHT(); //Si los dos pulsadores de velocidad están pulsados o no el BiRueda no se moverá if ((ad == 1 && at==1) || (ad == 0 && at==0)){ Serial.print("."); motor.run(RELEASE); motor2.run(RELEASE); }//Si sólo está pulsado ADELANTE else if(ad ==1){ Serial.print("U"); motor.run(FORWARD); motor2.run(FORWARD); }else if(at == 1){ Serial.println("D"); motor.run(BACKWARD); motor2.run(BACKWARD); } //Si los dos pulsadores de dirección están pulsados o no seguirá con la misma velocidad if ((iz == 1 && de == 1)|| (iz == 0 && de == 0)){ motor.setSpeed(255); motor2.setSpeed(255); }//Giro en sentido horario else if(iz == 0 && de == 1){ Serial.println("R"); motor.run(BACKWARD); motor2.run(FORWARD); motor.setSpeed(155); motor2.setSpeed(155); }//Giro en sentido antihorario else if(iz == 1 && de == 0){ Serial.println("L"); motor.run(FORWARD); motor2.run(BACKWARD); motor.setSpeed(155); motor2.setSpeed(155); } //Dejamos un retraso de 20 milisegundos delay(20); }Como podemos apreciar en el código del sketch, si los dos botones de giro está pulsados o no simultáneamente mantendremos la dirección del vehículo. En cambio cuando pulsemos uno, invertirá el giro de uno de los motores (el conveniente para el giro en el sentido deseado) y reduce la velocidad de los motores para la realización del giro. Sin más os dejo con el funcionamiento.