Hola a todos!, Soy nuevo en el uso de arduino tengo una duda sobre un detalle en el funcionamiento en paralelo de 2 servos MG995 y de 4 Motores DC en un Shield Motor Driver L293D en Arduino UNO, controlados por bluetooth. Los servos están conectados a los pines dedicados para servos del Shield.
Cuando cargo SOLO el código que controla los servos al arduino, estos funcionan perfectamente recibiendo las señales desde una app móvil, pero al momento de incluir la parte del código que se encarga de controlar el movimiento de los motores DC, automáticamente los servos dejan de responder, y el código solo responde a los comandos que controlan a los motores.
He leido sobre la ejecución de 2 o más tareas de forma simultánea y, aunque no se si se trate de eso, intenté usando "millis" y tampoco funcionó, los servos siguen sin responder.
Agradecería mcuho cualquier observación y sugerencia para hacer que el código funcione :).
Adjunto código.
#include <AFMotor.h>
#include <Servo.h>
//initial motors pin
AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);
Servo ser_hor;
Servo ser_ver;
int servo_hor = 90; // Posición inicial servo horizontal
int servo_ver = 90; // Posición inicial servo vertical
char comando;
void setup() {
ser_hor.attach(10);
ser_ver.attach(9);
Serial.begin(9600);
}
void loop() {
if(Serial.available()>= 2 ) //Leer mas de 2 bytes
{
unsigned int servopos = Serial.read();
unsigned int servopos1 = Serial.read();
unsigned int realservo = (servopos1 *256) + servopos;
if (realservo >= 1000 && realservo <1180){ // Si el valor de la variable está entre 1000 y 1180
int servo1 = realservo;
servo1 = map(servo1, 1000,1180,0,180);
ser_hor.write(servo1);
Serial.println("ser_hor activado");
}
if (realservo >= 2000 && realservo <2180){ // Si el valor de la variable está entre 2000 y 2180
int servo2 = realservo;
servo2 = map(servo2,2000,2180,0,180);
ser_ver.write(servo2);
Serial.println("ser_ver activado");
}
}
if (Serial.available() > 0); {
comando = Serial.read();
Stop(); // Iniciar con motores apagados
switch (comando) {
case 'W':
forward();
Serial.println("Avanzar");
break;
case 'S':
back();
Serial.println("Retroceder");
break;
case 'A':
left();
Serial.println("Izquierda");
break;
case 'D':
right();
Serial.println("Derecha");
break;
case 'P':
Stop();
Serial.println("Alto");
break;
}
}
}
void forward()
{
motor1.setSpeed(200); //Define maximum velocity
motor1.run(FORWARD); //rotate the motor clockwise
motor2.setSpeed(200); //Define maximum velocity
motor2.run(FORWARD); //rotate the motor clockwise
motor3.setSpeed(200); //Define maximum velocity
motor3.run(FORWARD); //rotate the motor clockwise
motor4.setSpeed(200); //Define maximum velocity
motor4.run(FORWARD); //rotate the motor clockwise
}
void back()
{
motor1.setSpeed(200); //Define maximum velocity
motor1.run(BACKWARD); //rotate the motor anti-clockwise
motor2.setSpeed(200); //Define maximum velocity
motor2.run(BACKWARD); //rotate the motor anti-clockwise
motor3.setSpeed(200); //Define maximum velocity
motor3.run(BACKWARD); //rotate the motor anti-clockwise
motor4.setSpeed(200); //Define maximum velocity
motor4.run(BACKWARD); //rotate the motor anti-clockwise
}
void left()
{
motor1.setSpeed(200); //Define maximum velocity
motor1.run(BACKWARD); //rotate the motor anti-clockwise
motor2.setSpeed(200); //Define maximum velocity
motor2.run(BACKWARD); //rotate the motor anti-clockwise
motor3.setSpeed(200); //Define maximum velocity
motor3.run(FORWARD); //rotate the motor clockwise
motor4.setSpeed(200); //Define maximum velocity
motor4.run(FORWARD); //rotate the motor clockwise
}
void right()
{
motor1.setSpeed(200); //Define maximum velocity
motor1.run(FORWARD); //rotate the motor clockwise
motor2.setSpeed(200); //Define maximum velocity
motor2.run(FORWARD); //rotate the motor clockwise
motor3.setSpeed(200); //Define maximum velocity
motor3.run(BACKWARD); //rotate the motor anti-clockwise
motor4.setSpeed(200); //Define maximum velocity
motor4.run(BACKWARD); //rotate the motor anti-clockwise
}
void Stop()
{
motor1.setSpeed(0); //Define minimum velocity
motor1.run(RELEASE); //stop the motor when release the button
motor2.setSpeed(0); //Define minimum velocity
motor2.run(RELEASE); //rotate the motor clockwise
motor3.setSpeed(0); //Define minimum velocity
motor3.run(RELEASE); //stop the motor when release the button
motor4.setSpeed(0); //Define minimum velocity
motor4.run(RELEASE); //stop the motor when release the button
}