come funziona questo ponte h?

intanto divertiti con questo codice

byte pwm;
byte EN1 = 7; 
byte EN2 = 6; 

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

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 loop()   
{
  for ( pwm = 0; pwm <255; pwm++)  {
    avanti(pwm);      
    delay(20);      
  }
  delay(1000); 
  ferma();
  delay(2000);

  for ( pwm = 255; pwm >0; pwm-- )  {
    indietro(pwm);      
    delay(20);      
  }
  delay(1000);
  ferma();
  delay(2000);

}