Lo que pasa es que estoy haciendo un "sumo" para un proyecto y no logro hacer que los 2 motores funcionen a la vez usando la función analogWrite(); la cual solo funciona si pongo como valor 255 que no es la idea ya que quiero que la velocidad baje para que el sensor ultrasonico no falle o de falsos positivos.
#include <Servo.h>
#include <SoftwareSerial.h>
const int trigPin = 12; // The pin to which the TRIG is connected
const int echoPin = 13; // The pin to which the ECHO is connected
const int trigDistance = 30; //distancia para "atacar"
int duration;
int distance;
// motor izquierdo
int enA = 10;
int in1 = 9;
int in2 = 8;
// motor derecho
int enB = 5;
int in3 = 7;
int in4 = 6;
Servo servo;
void setup() {
Serial.begin(9600);
servo.attach(2);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
digitalWrite(trigPin, HIGH);
delay(1);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
if (distance <= trigDistance){
digitalWrite (in1, LOW);
digitalWrite (in2, HIGH);
digitalWrite (in3, LOW);
digitalWrite (in4, HIGH);
analogWrite(enA, 255);
analogWrite(enB, 255);
delay(50);
Serial.println("AVANZAR");
}
if (distance >= trigDistance){
digitalWrite (in1, HIGH);
digitalWrite (in2, LOW);
digitalWrite (in3, LOW);
digitalWrite (in4, HIGH);
analogWrite(enA, 100);
analogWrite(enB, 100);
delay(50);
Serial.println("GIRAR");
}
if (distance <= 10){
servo.write(180);
Serial.println("golpear");
} else {
servo.write(0);
}
Serial.println(distance);
}
como se ve en el código tengo para que avance con 255, este si funciona (avanzan los 2 motores a máxima potencia).
pero el que me da fallos es el estado de "GIRAR" osea girar lento a 100 con los motores invertidos, con ese gira un solo el motor izquierdo a 100 y el derecho no se mueve.
tengo una especie de código de prueba donde los llevo de 0 a 255 hacia adelante y hacia atrás
#include <SoftwareSerial.h>
// motor izquierdo
int enA = 10;
int in1 = 9;
int in2 = 8;
// motor derecho
int enB = 5;
int in3 = 7;
int in4 = 6;
int i = 0;
void setup()
{
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
}
void loop(){
Serial.println("L298N Test");
Serial.println("1 velocidad 0/255 a 255/0");
seleccion = Serial.read();
while(i < 255){
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enB, i);
analogWrite(enA, i);
delay(50);
i++;
Serial.println(i);
}
while(i > 0){
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enB, i);
analogWrite(enA, i);
delay(50);
i--;
Serial.println(i);
}
}
con este si me funciona pero el de sumo me falla. que puede ser?