Gleichstrommotoren mit IR Fernbedinung steuern

Habe es mit folgender library neu gemacht:

Leider hat sich an dem Ergebnis nichts geändert. Nur Motor B dreht und das sehr langsam. Kann es auch sein das der Motorshield einen Fehler hat?

#include "IRremote.h"

int IRpin = 7;
IRrecv irrecv(IRpin);
decode_results results;

int richtungA = 12; //Richtung Motor A
int richtungB = 13;  //Richtung Motor B
int pwmA = 3; //Geschwindigkeit Motor A
int pwmB = 11;  //Geschwindigkeit Motor B
int bremseA = 9;  //Bremse Motor A
int bremseB = 8;  //Bremse Motor B

int geschwindigkeitA = 250;  //0-255 (min - max)
int geschwindigkeitB = 255;  //0-255 (min - max)

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  
  //Pins für Motorenrichtung als Ausgang
  pinMode(richtungA, OUTPUT);
  pinMode(richtungB, OUTPUT);
  //Pins für Motorenrichtung als Ausgang
  pinMode(bremseA, OUTPUT);
  pinMode(bremseB, OUTPUT);
  //Geschwindigkeit setzen
  analogWrite(pwmA, geschwindigkeitA);
  analogWrite(pwmB, geschwindigkeitB);
  //Bremsen anziehen
  digitalWrite(bremseA, HIGH);
  digitalWrite(bremseB, HIGH); 
}

void loop() {
  if (irrecv.decode(&results)) 
    {
      Serial.println(results.value, DEC); // Print the Serial 'results.value'
      irrecv.resume();   // Receive the next value
    }
    switch(results.value){
    case 3772778233:
      digitalWrite(bremseA, LOW);
      digitalWrite(bremseB, LOW); 
      digitalWrite(richtungA, HIGH);
      digitalWrite(richtungB, HIGH);
      digitalWrite(bremseA, HIGH);
      digitalWrite(bremseB, HIGH); 
    break;
    case 3772782313:
      digitalWrite(bremseA, HIGH);
      digitalWrite(bremseB, HIGH);
    break;
    case 3772810873:
      digitalWrite(bremseA, LOW);
      digitalWrite(bremseB, LOW); 
      digitalWrite(richtungA, LOW);
      digitalWrite(richtungB, LOW);
      digitalWrite(bremseA, HIGH);
      digitalWrite(bremseB, HIGH); 
    break;
    }
  

}