Arduino UNO. Ciclar máquina + contador 2 x display 7 segmentos

Buenas. Sólo para presentarme. Soy nuevo y luego de hacer destellar algunos leds y quemar un micro servo (lo estaba moviendo con el código reformado del ejemplo FADE), estoy encarando un proyecto.
Quiero ciclar una máquina (arriba-delay-abajo-delay), contar las veces que se realizó este ciclo en dos displays LED de 7 segmentos, manejados con un 74LS47 multiplexado con un 74LS151. A su vez, estas otras acciones:
-Que se interrumpa el ciclado al apretar un botón,
-Que se reinicie el ciclado al apretar otro botón (sin reiniciar el conteo).
-Medir estado de batería.
-Resetear todo.

Es un proyecto linfdo y casi no puedo escribir dos líneas, pero sí investigar.
De este link http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1233546120
pienso utilizar el convertidor de decimal a BCD para entrar al multiplexor.
Acabo de compilar esa porción de código y ya está depurado.

int msbPin[] = {2,3,4,5};  // Pines a ser usador por msb
int lsbPin[] = {6,7,8,9};
int val;

int msb = 7;
int lsb = 0;

void loop(){
for (int i=0; i<4; i++){
 val = msb & 1; //  Aislar el último Bit de msb
digitalWrite(msbPin[i],val); // Enviar al pin correcto
 val = lsb & 1; //  Aislar el último Bit de lsb
digitalWrite(lsbPin[i],val);
msb = msb >> 1; // desplazar los bits hacia abajo para que el próximo esté en posición cero
lsb = lsb >> 1;
}

Pretendo en este thread dejar un seguimiento del proyecto. Bienvenidos comentarios, (seleccioné bien el BCD-decimal y el Multiplexor?).

Solo presentandome,

Yo tambien soy nuevo en esto del arduino y estoy tratando de hacer algo muy parecido, se trata de un contador de decadas up/down activado por un boton simple, y utilizando una 74LS48 para recibir el codigo bcd y pasarlo al display de 7 segmentos, mi problema es que cuando presiono el boton solo funciona en ciertas ocasiones.

Creo que el delay() que utilizo para mostrar los digitos me esta causando que no interprete de manera correcta al presionar el boton, que otra opcion tengo?

#include <Bounce.h>

int switchPin=8; // input button (switch)
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean countUp = false;

Bounce bouncer=Bounce(switchPin,5); //Instantiate switchPin to 5ms

//7-seg array
int sevenSgmnt[10][4]= {{0,0,0,0}, //0 LSB–>
{0,0,0,1}, //1
{0,0,1,0}, //2
{0,0,1,1}, //3
{0,1,0,0}, //4
{0,1,0,1}, //5
{0,1,1,0}, //6
{0,1,1,1}, //7
{1,0,0,0}, //8
{1,0,0,1}}; //9

void setup()
{
pinMode(switchPin,INPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
}

void sevenSgmntwrite (int digit)//Writes 7-seg pinout array
{
int pinOut=3; //define start of pinout

for (int segCount=0; segCount<4; segCount++)//loop to light up bcd
{
digitalWrite(pinOut, sevenSgmnt[digit][segCount]);
pinOut++;
}

}

void loop()
{
bouncer.update(); //update the debouncer

currentButton=bouncer.read();

if (lastButton == LOW && currentButton == HIGH)
{
countUp = !countUp;
}

lastButton=currentButton;

if(countUp)
{
for (int count=0; count<10; count++) //counts up
{
delay(500);
sevenSgmntwrite(count);
}
}
else
{
for (int count=9; count>=0; count–) //counts down
{
delay(500);
sevenSgmntwrite(count);
}
}
delay(500);
}

Una idea es no usar la librería bounce.h (no sabía que era pero por lo que he leido es un sistema antirebote por software) y construir un circuito antirebotes y usar interrupciones. En el playground tienes un tutorial sobre interrupciones.

Personalmente yo uso la libreria Button de carlynorama y me siempre me ha dado buenos resultados tanto con botones fijos como botones RF
http://arduino.cc/playground/Main/LibraryList

Hola MontagK, he leído tu post y se me ocurre que igual te puede servir de orientación un artículo sobre los display de 7 segmentos que, se muestra en este enlace:
http://www.hispavila.com/3ds/atmega/display_multiple.html
A ver si te sirve y nos lo cuentas.

Saludos.