Hola,
Me he hecho un coche controlado por bluetooth y le quiero controlar la velocidad a los motores desde el bluetooth.
El coche ya consigo manejarlo con el móvil por bluetooth a una velocidad fija pero cuando lo programo para regular la velocidad desde el móvil no me funciona, no hace nada, no se mueve y no se que estoy haciendo mal.
Adjunto el código.
#define bluetooth Serial
#include <SoftwareSerial.h>
#include <AFMotor.h>
#define rxPin 10
#define txPin 9
#define ARRAY_LENGTH(x) (sizeof(x) / sizeof(x[0]))
// Creamos el puerto serie, le pasamos los pines que serán
// Tx (donde esta conectado en Rx del bluetooth)
// y Rx (donde esta conectado el Tx del bluetooth)
SoftwareSerial miPuertoSerie(rxPin, txPin);
// Definicion de motores
AF_DCMotor Motor1(1); //Trasero Izquierdo
AF_DCMotor Motor2(2); //Delantero Izquierdo
AF_DCMotor Motor3(3); //Delantero Derecho
AF_DCMotor Motor4(4); //Trasero Derecho
//Velocidades motores
int v1; //velocidad de motor 1
int v2; //velocidad de motor 2
int v3; //velocidad de motor 3
int v4; //velocidad de motor 4
//Luces Coche fantastico
byte pinesLed[] = {A0, A1, A2, A3, A4, A5};
unsigned int intervalo = 200; //medio segundo
unsigned long tiempo;
bool direccion = true; //hacia la izquierda o la derecha
byte
contador = 0, //numeros de leds recorridos
indice = 0; //posición del array pinesLed por donde empezará a encenderse
void setup ()
{
delay(500); // wait for bluetooth module to start
// Y lo inicializamos como cualquier puerto serie
miPuertoSerie.begin(9600);
Serial.begin(9600); // set up Serial library at 9600 bps
// Definimos la velocidad de los Motores. 255 es el 100% de la velocidad
Motor1.setSpeed(v1);
Motor2.setSpeed(v2);
Motor3.setSpeed(v3);
Motor4.setSpeed(v4);
// Luces coche fantastico
for (byte i = 0; i < ARRAY_LENGTH(pinesLed); i++) {
pinMode(pinesLed[i], OUTPUT);
}
tiempo = millis();
}
void Luces_coche_fantastico()
{
if(millis() >= tiempo + intervalo ){ // al pasar el tiempo
for(byte i = 0; i < ARRAY_LENGTH(pinesLed); i++){ //recorremos todos los leds
digitalWrite(pinesLed[i], (i == indice) ? HIGH : LOW); //encendemos el led que coincida con ese indice
}
if(contador == ARRAY_LENGTH(pinesLed) - 1){ // cada vez el contador sea igual al número de leds es que ha dado la vuelta
direccion = !direccion; //cambiamos la dirección de encendido
contador = 0; //reiniciamos el contador
}
indice += (direccion) ? 1 : - 1; //según la direccion movemos un índice hacia arriba o hacia abajo
contador++; //aumentamos el contador
tiempo = millis(); //reiniciamos el tiempo para el siguiente intervalo
}
}
void Adelante ()
{
Motor1.run(FORWARD);
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}
void Atras ()
{
Motor1.run(BACKWARD);
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
}
void Parar ()
{
Motor1.run(RELEASE);
Motor2.run(RELEASE);
Motor3.run(RELEASE);
Motor4.run(RELEASE);
}
void Izquierda()
{
Motor1.run(FORWARD);
Motor2.run(BACKWARD);
Motor3.run(FORWARD);
Motor4.run(BACKWARD);
}
void Derecha()
{
Motor1.run(BACKWARD);
Motor2.run(FORWARD);
Motor3.run(BACKWARD);
Motor4.run(FORWARD);
}
void Giro_Derecha()
{
Motor1.run(FORWARD);
Motor2.run(FORWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
}
void Giro_Izquierda()
{
Motor1.run(BACKWARD);
Motor2.run(BACKWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}
void Diagonal_Derecha_Adelante()
{
Motor1.run(RELEASE);
Motor2.run(FORWARD);
Motor3.run(RELEASE);
Motor4.run(FORWARD);
}
void Diagonal_Izquierda_Adelante()
{
Motor1.run(FORWARD);
Motor2.run(RELEASE);
Motor3.run(FORWARD);
Motor4.run(RELEASE);
}
void Diagonal_Derecha_Atras()
{
Motor1.run(BACKWARD);
Motor2.run(RELEASE);
Motor3.run(BACKWARD);
Motor4.run(RELEASE);
}
void Diagonal_Izquierda_Atras()
{
Motor1.run(RELEASE);
Motor2.run(BACKWARD);
Motor3.run(RELEASE);
Motor4.run(BACKWARD);
}
void loop ()
{
Luces_coche_fantastico();
if (miPuertoSerie.available())
switch (miPuertoSerie.read())
{
case 'F':
Adelante();
break;
case 'B':
Atras();
break;
case 'R':
Derecha();
break;
case 'L':
Izquierda();
break;
case 'G':
Giro_Izquierda();
break;
case 'I':
Giro_Derecha();
break;
case 'H':
Diagonal_Izquierda_Atras();
break;
case 'J':
Diagonal_Derecha_Atras();
break;
case 'S':
Parar();
break;
case '1': //Velocidad min
v1=55;
v2=55;
v3=55;
v4=55;
break;
case '2': //Velocidad 2
v1=77;
v2=77;
v3=77;
v4=77;
break;
case '3': //Velocidad 3
v1=99;
v2=99;
v3=99;
v4=99;
break;
case '4': //Velocidad 4
v1=121;
v2=121;
v3=121;
v4=121;
break;
case '5': //Velocidad 5
v1=143;
v2=143;
v3=143;
v4=143;
break;
case '6': //Velocidad 6
v1=165;
v2=165;
v3=165;
v4=165;
break;
case '7': //Velocidad 7
v1=187;
v2=187;
v3=187;
v4=187;
break;
case '8': //Velocidad 8
v1=209;
v2=209;
v3=209;
v4=209;
break;
case '9': //Velocidad 9
v1=231;
v2=231;
v3=231;
v4=231;
break;
case 'q': //Velocidad máxima
v1=255;
v2=255;
v3=255;
v4=255;
break;
default: break;
}
}
A ver si alguien me puede echar una mano.
Gracias