controllo motori DC con L293D

Sto facendo un piccolo test per controllare 2 motori DC tramite integrato L293D, il programma funziona correttamente tranne che per il comando void fermo(), tramite questo comando metto in stato LOW i pin "enable pin" sul circuito integrato L293D e mi aspetterei che i 2 motori fossero fermi. Sbaglio qualcosa?

int motor1Pin1 = 3;// pin 2 on L293D
int motor1Pin2 = 4; // pin 7 on L293D
int motor2Pin1 = 5; // pin 15 on L293D
int motor2Pin2 = 6; // pin 10 on L293D
int enablePin = 9;    // pin 1 e pin 9 on L293D

void setup() { 
  Serial.begin(9600);             // inizializza seriale a 9600 baud 
  
  pinMode(motor1Pin1, OUTPUT);
   pinMode(motor1Pin2, OUTPUT);
    pinMode(motor2Pin1, OUTPUT);
     pinMode(motor2Pin2, OUTPUT);
  
  pinMode(8, OUTPUT);  
} 


  
void loop() { 

 dritto();
  delay(2000);

  gira();
 delay(2000);

 fermo ();
 delay(5000);
 }



void dritto(){
  digitalWrite(enablePin, HIGH);
   digitalWrite(motor1Pin1, HIGH) ;
   digitalWrite(motor1Pin2, LOW);
   digitalWrite(motor2Pin1, HIGH) ;
   digitalWrite(motor2Pin2, LOW);
   Serial.println("dritto");
   digitalWrite(8, LOW) ; 
}

void gira(){
  digitalWrite(enablePin, HIGH);
   digitalWrite(motor1Pin1, HIGH) ;
   digitalWrite(motor1Pin2, LOW);
   digitalWrite(motor2Pin1, LOW) ;
   digitalWrite(motor2Pin2, HIGH);
   Serial.println("gira");
   digitalWrite(8, LOW) ; 
}


void fermo(){
 digitalWrite(enablePin, LOW);
 Serial.println("fermo");
 digitalWrite(8, HIGH); 
}

Non ricordo se enable sia attivo alto o basso prova a mettere HIGH...

mi sono accorto che staccando i pin ENABLE 1 e pin ENABLE 2, i motori funzionano lo stesso! ...non capisco!

l'alimentazione dei motori proviene da un pacco batterie 4x1,2V e il cavo GND del pacco batterie e' collegato alle uscite del microprocessore L293D e al pin GND della scheda Arduino

forse c'è qualche corto circuito?

in ogni caso ho risolto mettendo tutti i pin di comando allo stato LOW:

void fermo(){
 digitalWrite(enablePin, LOW);
 digitalWrite(motor1Pin1, LOW) ;
   digitalWrite(motor1Pin2, LOW);
   digitalWrite(motor2Pin1, LOW) ;
   digitalWrite(motor2Pin2, LOW);
 Serial.println("fermo");
 digitalWrite(8, HIGH); 
}

an si ora ricordo.... se vuoi spegnerli con enable...... metti una resistenza da 470ohm tra arduino e l'enable ed una da 10K tra l'enable e massa e dovrebbe andare con il codice che hai messo all'inizio..... perchè se metti low da codice non è che mette il pin a gnd lo mette a zero logico quindi lo isola da circuito.....

ratto93: an si ora ricordo.... se vuoi spegnerli con enable...... metti una resistenza da 470ohm tra arduino e l'enable ed una da 10K tra l'enable e massa e dovrebbe andare con il codice che hai messo all'inizio..... perchè se metti low da codice non è che mette il pin a gnd lo mette a zero logico quindi lo isola da circuito.....

Scusami ratto qua ti sbagli. Il Arduino da ca 5V quando un uscita é H e quasi 0V quando é L. Per la frenata del motore ci sono 2 possibilitá. * Mettere Enable a LOW * Mettere tutte 2 le 2 uscite a H o a L. Questo mette praticamente in corto il motore e lo frena velocemente. Inoltre il motore se fosse girato dal carico frenerebbe i giri perché fungerebbe come generatore cortocircuitato. Non sta fermo ma girerebbe lentamente.

@massit78 Come hai collegato i motori? Il primo sulle uscite 3 e 6 del L293 e il secondo sulle uscite 11 e 14?

Ciao Uwe

Mi pareva di aver controllato con il tester tempo fa le uscite..... controllerò... scusate l'errato intervento...