DDR y PORT no funciona con la libreria PS2_lib.h

Soy nuevo en el foro y en esto de ARDUINO y estoy utilizando un mando de la PS2 con el siguiente codigo;

#include <PS2X_lib.h>

PS2X ps2x;

int error = 0;
byte type = 0;
byte vibrate = 1;
boolean estado= true;

void setup() {
Serial.begin(57600);

DDRB |= 1 << 5; // pinMode(13, OUTPUT
);
error = ps2x.config_gamepad(9, 11, 10, 12, true, true);//setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?)check for error
}

void loop() {
ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at ‘vibrate’ speed

if (ps2x.ButtonPressed(PSB_BLUE)){
PORTB |= 1 << 5; //digitalWrite(13, HIGH);
Serial.println(“Led encendido”);
}
if (ps2x.ButtonPressed(PSB_PINK)){
PORTB &= 0 << 5; //digitalWrite(13, LOW);
Serial.println(“Led apagado”);
}
}

Lo que ocurre es que mi Arduino UNO parece que se bloquea y solo enciende y apaga el led una vez. Despues no hace nada. Sin embargo usando las funciones pinMode y digitalWrite funciona perfectamente.
Alguien me podria decir la causa??
Muchas gracias

Hola.
Creo que el encendido del pin está bien:
PORTB |= 1 << 5; //digitalWrite(13, HIGH);

Sin embargo, el apagado no:
PORTB &= 0 << 5; //digitalWrite(13, LOW);

Ya que estás directamente poniendo a cero todo el PORTB (0<<5 = 0, y X&0 = 0), incluyendo los bits 6 y 7 que creo que no tienen que ver con ningún pin. La manipulación directa de puertos puede venir muy bien para según qué cosas, pero hay que tener mucho cuidado, y valorar cuándo usarla en lugar del digitalWrite.

Creo que el comando correcto sería algo así:
PORTB &= ~(1<<5)

Es decir, 1<<5 = 00100000, que negado (~) quedaría la máscara 11011111, que aplicada con & lo que hace es apagar los bits con valor cero, en este caso el bit 5.

Pues si, llevas razon. He cambiado PORTB &= 0 << 5 por PORTB &= ~(1 << 5) y ya no se queda bloqueado el programa. Al tener conectado el mando de la ps2 en los pines 9, 10, 11 y 12, tambien estaba modificando el estado de esos pine. Muchas gracias!!