Está en la página 1de 3

#define enA 6

#define in1 8
#define in2 7
#define enB 12
#define in3 10
#define in4 11
int xAxis, yAxis;
int x = 0;
int y = 0;
int motorSpeedA = 0;
int motorSpeedB = 0;

void setup() {
pinMode ( enA, OUTPUT ) ;
pinMode ( enB, OUTPUT ) ;
pinMode ( in1, OUTPUT ) ;
pinMode ( in2 , OUTPUT ) ;
pinMode ( in3, OUTPUT ) ;
pinMode ( in4, OUTPUT ) ;
Serial.begin( 38400 ) ; // Tasa de comunicación predeterminada del módulo
Bluetooth
}
void loop() {
// Valor predeterminado: sin movimiento cuando el joystick permanece en el centro
xAxis = 510;
yAxis = 510;
// Leer los datos entrantes de la aplicación de Android para teléfonos
inteligentes
while ( Serial.available () >= 2 ) {
x = Serial.read () ;
delay( 10 ) ;
y = Serial.read () ;
delay( 10 ) ;
}

// Se asegura de que recibamos los valores actuales


if (x> 60 & x <220) {
xAxis = map ( x, 220, 60, 1023, 0 ) ; // Convierta los valores X e Y del
teléfono inteligente al rango 0-1023, motor adecuado para el código de control del
motor a continuación
}
if ( y > 60 & y < 220 ) {
yAxis = map ( y, 220, 60, 0, 1023 ) ;
}
// Eje Y utilizado para control hacia adelante y hacia atrás
if ( yAxis < 470 ) {
// Pon el motor A hacia atrás
digitalWrite ( in1, HIGH ) ;
digitalWrite ( in2 , LOW ) ;
// Pon el motor B hacia atrás
digitalWrite ( in3, HIGH ) ;
digitalWrite ( in4, LOW ) ;
// Convierta las lecturas decrecientes del eje Y para retroceder de 470 a 0 en
un valor de 0 a 255 para la señal PWM para aumentar la velocidad del motor
motorSpeedA = map ( yAxis, 470, 0, 0, 255 ) ;
motorSpeedB = map ( yAxis, 470, 0, 0, 255 ) ;
}
else if ( yAxis > 550 ) {
// Pon el motor A hacia adelante
digitalWrite ( in1, LOW ) ;
digitalWrite ( in2 , HIGH ) ;
// Pon el motor B hacia adelante
digitalWrite ( in3, LOW ) ;
digitalWrite ( in4, HIGH ) ;
// Convierta las lecturas crecientes del eje Y para avanzar de 550 a 1023 en un
valor de 0 a 255 para la señal PWM para aumentar la velocidad del motor
motorSpeedA = map ( yAxis, 550, 1023, 0, 255 ) ;
motorSpeedB = map ( yAxis, 550, 1023, 0, 255 ) ;
}
// Si el joystick permanece en el medio, los motores no se mueven
else {
motorSpeedA = 0;
motorSpeedB = 0;
}
// Eje X utilizado para control izquierdo y derecho
if ( xAxis < 470 ) {
// Convertir las lecturas decrecientes del eje X de 470 a 0 en un valor
creciente de 0 a 255
int xMapped = map ( xAxis, 470, 0, 0, 255 ) ;
// Mover a la izquierda: disminuir la velocidad del motor izquierdo, aumentar
la velocidad del motor derecho
motorSpeedA = motorSpeedA - xMapped;
motorSpeedB = motorSpeedB + xMapped;
// Confine el rango de 0 a 255
if ( motorSpeedA < 0 ) {
motorSpeedA = 0;
}
if ( motorSpeedB > 255 ) {
motorSpeedB = 255;
}
}
if ( xAxis > 550 ) {
// Convertir las lecturas crecientes del eje X de 550 a 1023 en valores de 0 a
255
int xMapped = map ( xAxis, 550, 1023, 0, 255 ) ;
// Mover a la derecha - disminuir la velocidad del motor derecho, aumentar la
velocidad del motor izquierdo
motorSpeedA = motorSpeedA + xMapped;
motorSpeedB = motorSpeedB - xMapped;
// Confine el rango de 0 a 255
if ( motorSpeedA > 255 ) {
motorSpeedA = 255;
}
if ( motorSpeedB < 0 ) {
motorSpeedB = 0;
}
}
// Evite los zumbidos a bajas velocidades (ajuste de acuerdo con sus motores. Mis
motores no podían comenzar a moverse si el valor de PWM estaba por debajo del valor
de 70)
if ( motorSpeedA < 70 ) {
motorSpeedA = 0;
}
if ( motorSpeedB < 70 ) {
motorSpeedB = 0;
}
analogWrite ( enA, motorSpeedA ) ; // Enviar señal PWM al motor A
analogWrite ( enB, motorSpeedB ) ; // Enviar señal PWM al motor B
}

También podría gustarte