// Pines de los motores
const int mIzqA = 4; // Motor izquierdo adelante
const int mIzqB = 5; // Motor izquierdo atrás
const int mDerA = 6; // Motor derecho adelante
const int mDerB = 7; // Motor derecho atrás
// Variable para recibir comandos Bluetooth
char comandoBluetooth;
void setup() {
// Iniciar comunicación serial para Bluetooth
[Link](9600);
// Configurar pines de motores como salida
pinMode(mIzqA, OUTPUT);
pinMode(mIzqB, OUTPUT);
pinMode(mDerA, OUTPUT);
pinMode(mDerB, OUTPUT);
}
void loop() {
// Leer comando de Bluetooth si está disponible
if ([Link]() > 0) {
comandoBluetooth = [Link]();
if (comandoBluetooth == 'F') { // Avanzar
avanzar();
}
else if (comandoBluetooth == 'B') { // Retroceder
retroceder();
}
else if (comandoBluetooth == 'L') { // Girar a la izquierda
izquierda();
}
else if (comandoBluetooth == 'R') { // Girar a la derecha
derecha();
}
else if (comandoBluetooth == 'S') { // Detener
detener();
}
else {
detener(); // Detener si el comando no es válido
}
}
}
// Funciones de movimiento
void avanzar() {
digitalWrite(mIzqA, HIGH);
digitalWrite(mIzqB, LOW);
digitalWrite(mDerA, HIGH);
digitalWrite(mDerB, LOW);
}
void retroceder() {
digitalWrite(mIzqA, LOW);
digitalWrite(mIzqB, HIGH);
digitalWrite(mDerA, LOW);
digitalWrite(mDerB, HIGH);
}
void izquierda() {
digitalWrite(mIzqA, LOW);
digitalWrite(mIzqB, LOW);
digitalWrite(mDerA, HIGH);
digitalWrite(mDerB, LOW);
}
void derecha() {
digitalWrite(mIzqA, HIGH);
digitalWrite(mIzqB, LOW);
digitalWrite(mDerA, LOW);
digitalWrite(mDerB, LOW);
}
void detener() {
digitalWrite(mIzqA, LOW);
digitalWrite(mIzqB, LOW);
digitalWrite(mDerA, LOW);
digitalWrite(mDerB, LOW);
}
Opcion B
// Incluimos la librería
#include <SoftwareSerial.h>
// Instanciamos objeto SoftwareSerial para controlar el Bluetooth
SoftwareSerial hc06(2, 3);
// Definición de los pines para el control de la velocidad
int VelocidadMotorIzquierdo = 9;
int VelocidadMotorDerecho = 10;
// Definición de los pines de control de giro de los motores In1, In2, In3 e In4
int MotorIzquierdoA = 4;
int MotorIzquierdoB = 5;
int MotorDerechoC = 6;
int MotorDerechoD = 7;
// Definición de los pines de las luces y de la bocina
int LuzCarroFrontal1 = 11;
int LuzCarroFrontal2 = 12;
int LuzCarroTrasera1 = 13;
int Bocina = 8;
// Definición de la velocidad inicial de los motores
int velocidadMotor = 80;
// Variable para capturar el comando que llega desde la app
String cmd = "";
void setup() {
// Monitor Serial
[Link](9600);
// Puerto Serial Bluetooth
[Link](9600);
// Modo de pines de las luces
pinMode(LuzCarroFrontal1, OUTPUT);
pinMode(LuzCarroFrontal2, OUTPUT);
pinMode(LuzCarroTrasera1, OUTPUT);
// Modo del pin de la bocina
pinMode(Bocina, OUTPUT);
// Establecemos modo de los pines del control de motores
pinMode(MotorIzquierdoA, OUTPUT);
pinMode(MotorIzquierdoB, OUTPUT);
pinMode(MotorDerechoC, OUTPUT);
pinMode(MotorDerechoD, OUTPUT);
pinMode(VelocidadMotorIzquierdo, OUTPUT);
pinMode(VelocidadMotorDerecho, OUTPUT);
// Configuramos velocidad de los dos motores
analogWrite(VelocidadMotorIzquierdo, velocidadMotor);
analogWrite(VelocidadMotorDerecho, velocidadMotor);
}
void loop() {
// Leemos los datos recibidos
while ([Link]() > 0) {
cmd += (char)[Link]();
}
// Programamos cada una de las acciones a realizar según el comando recibido
if (cmd != "") {
cmd = cmd[0];
if (cmd == "S") {
detenerCarro();
} else if (cmd == "F") {
avanzarCarro();
} else if (cmd == "B") {
retrocederCarro();
} else if (cmd == "L") {
girarIzquierda();
} else if (cmd == "R") {
girarDerecha();
} else if (cmd == "G") {
avanzarIzquierda();
} else if (cmd == "I") {
avanzarDerecha();
} else if (cmd == "H") {
retrocederIzquierda();
} else if (cmd == "J") {
retrocederDerecha();
} else if (cmd == "W") {
digitalWrite(LuzCarroFrontal1, HIGH);
digitalWrite(LuzCarroFrontal2, HIGH);
} else if (cmd == "w") {
digitalWrite(LuzCarroFrontal1, LOW);
digitalWrite(LuzCarroFrontal2, LOW);
} else if (cmd == "U") {
digitalWrite(LuzCarroTrasera1, HIGH);
} else if (cmd == "u") {
digitalWrite(LuzCarroTrasera1, LOW);
} else if (cmd == "X") {
digitalWrite(LuzCarroTrasera1, HIGH);
digitalWrite(LuzCarroFrontal1, HIGH);
digitalWrite(LuzCarroFrontal2, HIGH);
} else if (cmd == "x") {
digitalWrite(LuzCarroTrasera1, LOW);
digitalWrite(LuzCarroFrontal1, LOW);
digitalWrite(LuzCarroFrontal2, LOW);
} else if (cmd == "V") {
digitalWrite(Bocina, HIGH);
} else if (cmd == "v") {
digitalWrite(Bocina, LOW);
} else if (cmd == "0") {
velocidadMotor = 80;
} else if (cmd == "1") {
velocidadMotor = 90;
} else if (cmd == "2") {
velocidadMotor = 100;
} else if (cmd == "3") {
velocidadMotor = 110;
} else if (cmd == "4") {
velocidadMotor = 120;
} else if (cmd == "5") {
velocidadMotor = 130;
} else if (cmd == "6") {
velocidadMotor = 140;
} else if (cmd == "7") {
velocidadMotor = 150;
} else if (cmd == "8") {
velocidadMotor = 160;
} else if (cmd == "9") {
velocidadMotor = 170;
} else if (cmd == "q") {
velocidadMotor = 180;
}
analogWrite(VelocidadMotorIzquierdo, velocidadMotor);
analogWrite(VelocidadMotorDerecho, velocidadMotor);
cmd = ""; // Esperamos el siguiente comando
}
}
void detenerCarro() {
digitalWrite(MotorIzquierdoA, LOW);
digitalWrite(MotorIzquierdoB, LOW);
digitalWrite(MotorDerechoC, LOW);
digitalWrite(MotorDerechoD, LOW);
}
void girarDerecha() {
digitalWrite(MotorIzquierdoA, HIGH);
digitalWrite(MotorIzquierdoB, LOW);
digitalWrite(MotorDerechoC, LOW);
digitalWrite(MotorDerechoD, LOW);
}
void girarIzquierda() {
digitalWrite(MotorIzquierdoA, LOW);
digitalWrite(MotorIzquierdoB, LOW);
digitalWrite(MotorDerechoC, LOW);
digitalWrite(MotorDerechoD, HIGH);
}
void avanzarCarro() {
digitalWrite(MotorIzquierdoA, HIGH);
digitalWrite(MotorIzquierdoB, LOW);
digitalWrite(MotorDerechoC, LOW);
digitalWrite(MotorDerechoD, HIGH);
}
void retrocederCarro() {
digitalWrite(MotorIzquierdoA, LOW);
digitalWrite(MotorIzquierdoB, HIGH);
digitalWrite(MotorDerechoC, HIGH);
digitalWrite(MotorDerechoD, LOW);
}
void avanzarIzquierda() {
analogWrite(VelocidadMotorDerecho, velocidadMotor + 60);
avanzarCarro();
delay(20);
analogWrite(VelocidadMotorDerecho, velocidadMotor);
}
void avanzarDerecha() {
analogWrite(VelocidadMotorIzquierdo, velocidadMotor + 60);
avanzarCarro();
delay(20);
analogWrite(VelocidadMotorIzquierdo, velocidadMotor);
}
void retrocederIzquierda() {
analogWrite(VelocidadMotorDerecho, velocidadMotor + 60);
retrocederCarro();
delay(20);
analogWrite(VelocidadMotorDerecho, velocidadMotor);
}
void retrocederDerecha() {
analogWrite(VelocidadMotorIzquierdo, velocidadMotor + 60);
retrocederCarro();
delay(20);
analogWrite(VelocidadMotorIzquierdo, velocidadMotor);
}