/*
Este ejemplo permite controlar el robot de forma remota con un
smartphone o una tablet con Android utilizando la aplicación
"Arduino Control Car" https://play.google.com/store/apps/details? id=appinventor.ai_el_profe_garcia.Arduino_Control_Car&hl=es
En función del movimiento que se seleccione en la aplicación,
se entra en un caso de la máquina de estados, lo que lleva a diferentes movimientos del robot.
*/
#define M1_DIR 7 //Pin de Arduino que controla la dirección del motor (DIGITAL)
#define M1_PWM 9 //Pin de Arduino que controla la velocidad (PWM)
#define M2_DIR 8 //Pin de Arduino que controla la dirección del motor (DIGITAL)
#define M2_PWM 10 //Pin de Arduino que controla la velocidad (PWM)
char estado = 'c'; // Estado con el que se inicia el robot: parado
char anterior; // Variable para coservar el estado anterior de la máquina de estados
char memo; // Variable para memorizar el último estado diferente
void setup()
{
//Declaración como salida de todos los pines que se
//necesitan para controlar los motores del robot
pinMode(M1_DIR, OUTPUT);
pinMode(M1_PWM, OUTPUT);
pinMode(M2_DIR, OUTPUT);
pinMode(M2_PWM, OUTPUT);
Serial.begin(9600); // Inicia el puerto serial para comunicación con el Bluetooth
}
void loop()
{
if (Serial.available() > 0) // lee el bluetooth y almacena el carácter en "estado"
{
// Almacenamiento del último estado utilizado
// Adquisición del nuevo estado
// Memorización del último estado diferente utilizado
anterior = estado;
estado = Serial.read();
if (estado != anterior)
{
memo = anterior;
}
}
switch (estado)
{
case 'a': // Botón desplazar al Frente
// Los dos motores avanzan hacia delante
digitalWrite(M1_DIR, LOW);
analogWrite(M1_PWM, 255);
digitalWrite(M2_DIR, HIGH);
analogWrite(M2_PWM, 255);
break;
case 'b': // Botón IZQ
// Realiza giro
digitalWrite(M1_DIR, LOW); //Motor uno avanza
analogWrite(M1_PWM, 255);
digitalWrite(M2_DIR, LOW); //Motor dos retrocede
analogWrite(M2_PWM, 255);
delay (100);
estado = memo;
break;
case 'c': // Botón Parar
// Los dos motores se detienen
digitalWrite(M1_DIR, LOW);
analogWrite(M1_PWM, 0);
digitalWrite(M2_DIR, LOW);
analogWrite(M2_PWM, 0);
break;
case 'd': // Botón DCHA
// Realiza giro
digitalWrite(M1_DIR, HIGH); //Motor uno retrocede
analogWrite(M1_PWM, 255);
digitalWrite(M2_DIR, HIGH); //Motor dos avanza
analogWrite(M2_PWM, 255);
delay (100);
estado = memo;
break;
case 'e': // Botón Reversa
//Los dos motores retroceden
digitalWrite(M1_DIR, HIGH);
analogWrite(M1_PWM, 255);
digitalWrite(M2_DIR, LOW);
analogWrite(M2_PWM, 255);
break;
case 'g': //A la espera, no hace nada
break;
}
}