Control de motor PWM integrado L293D no funciona

Hola :slight_smile: es la primera vez que publico en el foro de arduino, de hecho soy principiante, el hecho es que quiero controlar la velocidad de un motor con un integrado L293D, y usando los metodos de pwm que vienen con arduino, sin embargo esto no me funciona… en teoría me pareciò sencillo así que lo hice a mi manera, per no me funcionó :frowning: mi codigo es este :

void setup()  {   
   pinMode(12, OUTPUT);
   pinMode(11, OUTPUT);
   pinMode(10, OUTPUT);
} 

void loop()  { 
  for(int v = 0 ; v <= 0; v +=5) {    
    analogWrite(12, v);   
    digitalWrite(11,HIGH);
    digitalWrite(10,LOW);    
    delay(300);                            
  } 
  
  for(int v = 0 ; v >= 0; v -=5) {     
    analogWrite(12, v);   
    digitalWrite(11,HIGH);
    digitalWrite(10,LOW);         
    delay(300);                            
  } 
}

El asunto es que el motor siempre gira a máxima velocidad, como alimentación para los motores estoy usando 12V , para todo lo demás 5V de arduino y analogico para el enable respectivo, que estoy haciendo mal ? :frowning:

Tienes un problema con los bucles FOR.

El valor de v siempre es cero. Asignas el valor 0 al inicializar el bucle FOR, pero se acaba inmediatamente, ya que la condición para que se termine es que sea menor o igual a cero en el primero, y menor o igual a cero en el segundo, condición que se dá desde el principio, deteniendo el bucle, y no dando lugar nunca al incremento/decremento de v.

Creo entender que el prop√≥sito del sketch, es que la velocidad del motor, incremente y decremente gradualmente, de forma que el primer bucle haga el incremento, y el segundo haga el decremento. En el segundo bucle, tienes un segundo problema a√Īadido. Al asignar el valor 0 al principio, si la condici√≥n fuese la correcta, estar√≠as dando valores negativos a v.

No dices qué arduino usas, pero si estás usando el UNO, ten en cuenta, que el analogWrite lo estás haciendo en la salida 12, que no es PWM, de forma que nunca funcionará. El digitalwrite de las salidas 10 y 11, no es necesario incluirlos dentro de los bucles. Con hacerlos al principio del loop es suficiente, e incluso se podrían meter en el void setup, ya que su estado no vuelve a cambiar nunca más.

Un sketck que funcionaría en un Arduino UNO sería el siguiente:

void setup()  {
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
}
void loop()  {
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);
  for (int v = 0 ; v < 255; v += 5) {
    analogWrite(9, v);
    delay(300);
  }
  for (int v = 255 ; v > 0; v -= 5) {
    analogWrite(9, v);
    delay(300);
  }
}