come funziona questo ponte h?

Bene, allora lezione numero 2

byte pwm ;
byte IN1 = 6; 
byte IN2 = 7; 
byte IN3 = 8; 
byte IN4 = 9; 
byte ENA = 5 ;  // ENA Motore di Sinistra
byte ENB = 10 ; // ENB Motore di Destra
int dir ;

void setup() {
  Serial.begin(9600);     // Abilita seriale
  pinMode(IN1, OUTPUT);   // Imposta i pin come uscite
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);     
  pinMode(IN4, OUTPUT);
  ferma();
}

void motore1_avanti(byte pwm) { // Motore di SInistra
  digitalWrite(IN1, HIGH);  
  digitalWrite(IN2, LOW);
  analogWrite (ENA, pwm );  
}
void motore2_avanti(byte pwm) { // Motore di Destra
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  analogWrite (ENB, pwm); 
} 
void motore1_indietro(byte pwm) {
  digitalWrite(IN1, LOW);  
  digitalWrite(IN2, HIGH);
  analogWrite (ENA, pwm );  
} 
void motore2_indietro(byte pwm) {
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  analogWrite (ENB, pwm); 
}

void ferma () {           
  digitalWrite(IN1, LOW);   
  digitalWrite(IN2, LOW);  
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW); 
  analogWrite (ENA, 0);  
  analogWrite (ENB, 0); 
}  

void loop()  {
  while ( Serial.available() >0 )
  { 
    dir = Serial.read();
    
    if(dir == 'a'){
      motore1_avanti(255);
      motore2_avanti(255);
      Serial.println("avanti");
    }
    if(dir == 'i'){
      motore1_indietro(255);
      motore2_indietro(255);
      Serial.println("indietro");
    }
    if(dir == 'f'){
      ferma();
      Serial.println("ferma");
    }
    if(dir == 'd'){ // sterza a Destra
      motore1_avanti(255); // Motore di sinistra Veloce
      motore2_avanti(50);  // Motore di destra piano
      Serial.println("Sterza a destra");
    }
    if(dir == 's'){ // sterza a Sinistra
      motore1_avanti(50); // Motore di Sinistra piano
      motore2_avanti(255); // Motore di destra veloce
      Serial.println("sterza a sinistra");
    }
  }
}