Podrias explicarlo mejor?
Personalmente no entiendo lo que quieres conseguir....o al menos no entiendo lo que realmente buscas...
Que es "corriendo a la derecha?
Que es " corriendo a la izquierda?
Que es "pare"
Por lo que yo entiendo ...
Si el pin 4 es 0 y el pin 5 es 0 , corre a la derecha es decir pin 10 a 1
Si el pin 4 es 0 y el pin 5 es 1 , corre a la izquierda, es decir pin 13 a 1
Si el pin 4 es 1 y el pin 5 es 1 , se para, es decir pines 10 y 13 a 0
si a lo que me refiero es que
corriendo ala derecha de la salida 13 ala 10
ala izquierda de la salida 10 ala 13
para cuando se ponga 1 y 0 (me equivoque hace rato no es 1, 1 es 1, 0) se paren los leds
Por lo que veo quieres programar los registros del micro dejando a un ladonla sintaxys de arduino. Yo lo hice leyendo los articulos sobre eso del blog del cire. Busca en google que desde el movil me cuesta poner links. Salu2
void setup()
{
DDRB = DDRB | B00111100; //Configura PB5-2 como salidas (pines 10 al 13) B00111100 es igual que poner 0x3C
DDRD = DDRD & B11001111; //Configura PD5-4 como entradas (pines 4 y 5) B11001111 es igual que poner 0xCF
PORTD = PORTD | B00110000; //Activa las resistencias de pull up de los pines 4 y 5 (PD5 y PD4) B00110000 es igual que 0x30
// PORTB = 0xCC & B00111100; //Escribe el valor que van a tener las salidas (unos y ceros alternados)
PORTB = 0xFF & B00111100; //Escribe el valor que van a tener las salidas (puros unos)
}
void loop()
{
switch( (PORTD & B00110000) >> 4 )
{
case 0x00: //Corrimiento a la derecha
{
PORTB = ( (PORTB & B00111100) >> 1 ) & B00111100;
break;
}
case 0x01: //Corrimiento a la izquierda
{
PORTB = ( (PORTB & B00111100) << 1 ) & B00111100;
break;
}
case 0x00: //Se detiene
{
//No hace desplazamientos
break;
}
default:
{
//No hacer nada
break;
}
}
delay(1000); //Delay de 1 segundo para poder ver las salidas
}
Si lo deseas mejorar tienes que declarar una variable temporal de manera que que recuperes el bit que sale y lo vuelvas a agregar de manera que el corrimiento sea circular y no pierdas los leds encendidos, tal como esta van a agregarse ceros al hacer el corrimiento y tendras que resetearlo para volverlo a probar.