come funziona questo ponte h?

buon giorno.
mi sono molto divertito con quel codice e l'ho sviluppato arrivando a questo:

byte pwm;
byte EN1 = 7; 
byte EN2 = 6;
byte EN3=8;
byte EN4=9;

void setup() {
  pinMode(EN1, OUTPUT);     
  pinMode(EN2, OUTPUT);

Serial.begin(9600);}

void avanti(byte pwm) {
  digitalWrite(EN1, HIGH);  
  analogWrite(EN2, (255-pwm));  
}

void indietro(byte pwm) {
  digitalWrite(EN1, LOW);
  analogWrite(EN2, pwm);   
}

void ferma() {           
  digitalWrite(EN1, LOW);   
  digitalWrite(EN2, LOW);   
} 
void sterzaDestra(byte pwm) {
  digitalWrite(EN3, HIGH);  
  analogWrite(EN4, (255-pwm));  
}

void sterzaSinistra(byte pwm) {
  digitalWrite(EN3, LOW);
  analogWrite(EN4, pwm);   
}
void diritto() {           
  digitalWrite(EN3, LOW);   
  digitalWrite(EN4, LOW);   
} 


char dir;
void loop()   {
dir=Serial.read();
  if(dir=='a'){avanti(255);}
  if(dir=='i'){indietro(255);}
  if(dir=='f'){ferma();}
  if(dir='d'){sterzaDestra(255);}
  if(dir='s'){sterzaSinistra(255);}
  if(dir='x'){diritto();}
}

questo codice mi dovrebbe gestire due motori di una macchinetta. il primo la deve spingere avanti indietro(con i comandi avanti/indietro), il secondo la dovrebbe far sterzare. invice con questo codice funziona solo un motore(quello posto in OUT1,OUT2).
qualcuno a qualche idea? per comandare due motori bisogna fare qualcosa di speciale?