problema con L298

Hola,
me pasa una cosa muy rara y no se que puede ser.
cargo el sketch a la placa arduino (es para controlar dos motores, utilizo un modulo con un L298).
conecto el monitor serial y me da unos valores correctos, miro la salidas que van conectadas al Enable del modulo L298 y con el osciloscópio y dan un pwm correcto. Miro las salidas que van conectadas a In1, In2, In3, In4, y parece que cambian correctamente para cambiar de sentido de giro.

hasta aquí todo parece correcto, ahora viene lo raro, desconecto el usb y conecto una fuente de alimentación a 9V para alimentar arduino y el modulo L298, se encienden las luces del arduino (on, L y la del driver que controla los motores)y no hace nada, miro con el osciloscopio y no tengo señal de pwm a la salida del arduino ni señal en los pines de dirección.
Alguien sabe que puede estar pasando?

el código que utilizo es el siguiente:

/* codigo del blog de roboblogs, lectura de la IMU con el filtro complementario
   falta incorporar el control PID i salida de los motores */ 

#include <Wire.h>
 
//Direccion I2C de la IMU
#define MPU 0x68
 
//Ratios de conversion
#define A_R 16384.0
#define G_R 131.0
 
//Conversion de radianes a grados 180/PI
#define RAD_A_DEG = 57.295779
 
//MPU-6050 da los valores en enteros de 16 bits
//Valores sin refinar
int16_t AcX, AcY, AcZ, GyX, GyY, GyZ;
 
//Angulos
float Acc[2];
float Gy[2];
float Angle[2];
int llanta_I= 10;
int llanta_D= 11;


void setup()
// Se inicia la comunicación por I2C con el dispositivo MPU, y se “activa” enviando el comando 0.
// También se inicia el puerto de série para ver los resultados.
{
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Serial.begin(9600);

pinMode (llanta_I, OUTPUT);
pinMode (llanta_D, OUTPUT);
}

void loop()
{
   //Leer los valores del Acelerometro de la IMU
   Wire.beginTransmission(MPU);
   Wire.write(0x3B); //Pedir el registro 0x3B - corresponde al AcX
   Wire.endTransmission(false);
   Wire.requestFrom(MPU,6,true); //A partir del 0x3B, se piden 6 registros
   AcX=Wire.read()<<8|Wire.read(); //Cada valor ocupa 2 registros
   AcY=Wire.read()<<8|Wire.read();
   AcZ=Wire.read()<<8|Wire.read();
 
    //Se calculan los angulos Y, X respectivamente.
   Acc[1] = atan(-1*(AcX/A_R)/sqrt(pow((AcY/A_R),2) + pow((AcZ/A_R),2)))*RAD_TO_DEG;
   Acc[0] = atan((AcY/A_R)/sqrt(pow((AcX/A_R),2) + pow((AcZ/A_R),2)))*RAD_TO_DEG;
 
   //Leer los valores del Giroscopio
   Wire.beginTransmission(MPU);
   Wire.write(0x43);
   Wire.endTransmission(false);
   Wire.requestFrom(MPU,4,true); //A diferencia del Acelerometro, solo se piden 4 registros
   GyX=Wire.read()<<8|Wire.read();
   GyY=Wire.read()<<8|Wire.read();
 
   //Calculo del angulo del Giroscopio
   Gy[0] = GyX/G_R;
   Gy[1] = GyY/G_R;
 
   //Aplicar el Filtro Complementario
   Angle[0] = 0.98 *(Angle[0]+Gy[0]*0.010) + 0.02*Acc[0];  //filtro angulo X
   Angle[1] = 0.98 *(Angle[1]+Gy[1]*0.010) + 0.02*Acc[1];  //filtro angulo Y
 
   //Mostrar los valores por consola
   //Serial.print("Angle X: "); Serial.print(Angle[0]); Serial.print("\n");
   //Serial.print("Angle Y: "); Serial.print(Angle[1]); Serial.print("\n---------\n");

    delay(10); //Nuestra dt sera, pues, 0.010, que es el intervalo de tiempo en cada medida 
   
   
   /* ____________________________
         control de los motores 
      ____________________________
    */
    int atras=0;
    int adelante=0;
    
    int ab= floor (3*(float (Angle[1]))); // convierto el angulo Y a un valor que va de 257 a -257 y lo guardo en la variable (ab)
  
    // Serial.print(ab); Serial.print("\n---------\n");
    
   ab= (ab*3);   /* se multipica por 3 para que el valor ab (que es el pwm de los motores) llege a los 255 o -255 más rapidamente,
                 aproximadamente a los 30 grados
                 */   
   
    if (ab < -255)
        {
        ab=-255;
        }
        if (ab > 255)
        {
        ab=255;
        }
        

 
 if (ab>0){
   atras=  ab;       // PWM de los motores atras  (las dos ruedas funcionan al tiempo)
 }
 if (ab<=0){
   adelante=(-1*ab);      // PWM los motores van hacia adelante
 }
    Serial.println(atras);
    Serial.println("\n-------------/n");
    Serial.println(adelante);
    
    // Sentido de giro de los motores
  if (adelante != 0){   // no se permite que se envie el comando hacia adelante y hacia atras al tiempo 
     if (atras == 0){  
       analogWrite(llanta_I,adelante);
       digitalWrite(6,LOW);
       digitalWrite(7,HIGH);
     
       analogWrite(llanta_D,adelante);
       digitalWrite(4,LOW);
       digitalWrite(5,HIGH);
     }
  }
  
  
  if (atras != 0){         // no se permite que se envie el comando hacia adelante y hacia atras al tiempo 
     if (adelante == 0){
       analogWrite(llanta_I,atras);
       digitalWrite(6,HIGH);
       digitalWrite(7,LOW);
     
       analogWrite(llanta_D,atras);
       digitalWrite(4,HIGH);
       digitalWrite(5,LOW);
    }
  }
        
    
   
     // Serial.print(ab); Serial.print("\n---------\n");
   
}

Solucionado.
he vuelto a probar, y resulta que haciendo un reset al arduino ya funciona correctamente cuando es alimentado a través de una fuente de alimentación.

No sabia que se tenia que hacer un reset.

Hola Homer.

Aunque lo hayas solucionado, te diré que yo, por intuición y en mi corta experiencia, separaría la alimentación del L298 y del Arduino.

Un saludo.