secuencia de leds con botones, usando &, |,etc para enmascarar

tengo que hacer que mis salidas los pines 10 al 13 y usando las entradas 4 y 5 (botones)
hagan lo siguientes:

00, corrimieto ala derecha
01 corrimiento ala izquierda
11 se pare

DDRD &=0XCf; //entradas
PORTD |=0X30; //resistencia
DDRB |=0X3C; //salidas

la verdad ando algo perdido y no tengo idea de como hacerlo, tiene que ser con esas entradas y salidas con la misma sintaxis usando algebra boleana

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

Es eso?

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

si es lo que entendiste pero solo del 10 al 13

pues....

imagino que sabrás hacer el efecto de "correr a la izq" y "correr a la drch"

así que yo haría...

void loop()

buttonstate1 =digitalRead (button1);
buttonstate2 =digitalRead (button2);

while ( buttonstate1==0 && buttonstate2==0)
{
buttonstate1 =digitalRead (button1);
buttonstate2 =digitalRead (button2);
Correr a la derecha....
}

while ( buttonstate1==0 && buttonstate2==1)
{
buttonstate1 =digitalRead (button1);
buttonstate2 =digitalRead (button2);
Correr a la izquierda....
}

while ( buttonstate1==1 && buttonstate2==0)
{
buttonstate1 =digitalRead (button1);
buttonstate2 =digitalRead (button2);
Apagar los led
}

hay que comprobar el estado de los botones dentro de los bucles while porque si no , no saldría del bucle....

imagino que como idea te valdrá...

con esta idea, terminara un bucle completo aunque cambie el estado....

prueba y ve comentando...

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

He dejado el movil te dejo unos links.

El del CIRE: primera entrada, segunda entrada y tercera entrada
Como te he dicho antes está muy bien explicado.

Otro que hacen el coche fantastico

Hola,

Aqui está la referencia de la manipulación directa sobre los puertos http://arduino.cc/es/Reference/PortManipulation

Aquí la referencia de pines con los puertos http://arduino.cc/es/Hacking/PinMapping168

Aquí la parte de las resistencias de pullup http://arduino.cc/es/Tutorial/DigitalPins

Lo siguiente es algebra booleando de los operadores de C, AND (&) OR (|) ~(NOT) ^(XOR) Corrimiento a la izquierda (<<) Corrimiento a la derecha (>>) Anexo:Operadores de C y C++ - Wikipedia, la enciclopedia libre

Aqui te dejo un codigo que hice:

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.

Saludos.