Buenas Tardes
Estoy teniendo un problema con el siguiente código el cuál hice para un robot en el que utilizo principalmente servos y motores.
#include <Servo.h>
#include <NewPing.h>
Servo ServoCintura;
Servo ServoBrazoDer;
int pot1 = 2;
int pot2 = 3;
int val1;
int val2;
const int ServoHombroPin = 2;
const int ServoCodoPin = 3;
const int TriggerPin = 5;
const int EchoPin = 6;
//Maxima distancia = 200
NewPing sonar(TriggerPin, EchoPin, 200);
Servo ServoHombro;
Servo ServoCodo;
int ENA = 9;
int IN1 = 8;
int IN2 = 7;
int IN3 = 13;
int IN4 = 12;
int ENB = 11;
int xPin = A0;
int yPin = A1;
int xPosition = 511;
int yPosition = 511;
unsigned long tiempo = 0;
unsigned long t_actualizado = 0;
unsigned long t_delay = 100;
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
ServoCintura.attach(0);
ServoBrazoDer.attach(1);
ServoHombro.attach(ServoHombroPin);
ServoCodo.attach(ServoCodoPin);
}
void loop() {
loopMotores();
loopBrazos();
}
void loopMotores() {
xPosition = analogRead(xPin);
yPosition = analogRead(yPin);
//IR HACIA ADELANTE
if((xPosition > 256 && xPosition < 768) && (yPosition < 482)){
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 255);
delay(100);
}else{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
//IR HACIA ATRAS
if((xPosition < 768 && xPosition > 256) && (yPosition > 582)){
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 255);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENB, 255);
delay(100);
}else{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
//IR HACIA LA IZQUIERDA
if((xPosition > 556) && (yPosition > 256 && yPosition < 768)){
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENB, 255);
delay(100);
}else{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
//IR HACIA LA DERECHA
if((xPosition < 456) && (yPosition > 256 && yPosition < 768)){
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 255);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 255);
delay(100);
}else{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
delay(10);
}
void loopBrazos() {
val1 = analogRead(pot1);
val2 = analogRead(pot2);
val1 = map(val1, 0 ,1023, 0, 180);
val2 = map(val2, 0 ,1023, 0, 180);
ServoCintura.write(val1);
ServoBrazoDer.write(val2);
int cm = sonar.ping_cm();
Serial.println(cm);
if(cm < 40 && cm > 10){
if(cm < 30){
ServoHombro.write(80);
delay(100);
ServoCodo.write(90);
}else{
ServoHombro.write(180);
delay(100);
ServoCodo.write(0);}
}else{
ServoCodo.write(0);
delay(100);
ServoHombro.write(180);
}
delay(100);
}
Mi problema se encuentra en que los motores efectúan sus giros de forma interrumpida. Es decir, giran durante un muy breve lapso de tiempo, se detienen, y luego vuelven a girar, y así sucesivamente.
Este código lo arme de otros 2 códigos que hice. Ambos códigos funcionan a la perfección por separado, sin embargo cuando los junte en un solo código (código de arriba), comenzó el inconveniente.
Por este motivo yo deduzco que mi error está en el código.
Soy nuevo en esto, por lo que estoy abierto a cualquier aclaración.
Estoy utilizando 1 Arduino UNO alimentado con 2 celdas de 3,7V, 4 servos, el módulo joystick para comandar el módulo l298 alimentado con 6 celdas 3,7V, y dos motores DC conectados al mismo.
Espero que alguien pueda ayudarme a solucionar mi problema pronto ya que es un proyecto que necesito terminar con urgencia.
GRACIAS!!!