contador de 4 digitos

Hola a todos.. tengo un pequeño problema. Estoy trabajando en un proyecto donde necesito un contador de por lo menos 2 digitos.. se como hacerlo sin un shift register como el 74HC595. . Pero necesito ahorrar pines.. eh buscado en youtube . google, en todas partes y no eh visto nada.. consta de 2 botones . Shift registers y un CC display de 4 digitos o dos 1 digito separados. Displays.. el caballero SURBYTE me ah estado ayudando amablemente, pero donde el me ah enseñado a subir los codigos lamentablemente no puedo subirlos no se porque no me da ninguna opcion de pegarlo.. 0hhh lo importante necesita k suba y baje ejemplo presiono so el display muestra si es de 4 dig. 0005 , presiono 0010, 0015, 0020 etcc. Y vsvs que baje..

Muchas gracias .

Hector

El código, lo copias y pegas usando tags como este que te señalo

Aca dice como insertar códigos

Un código debe subirse con el formato que te he indicado.
Yo no voy a ayudarte si me pones una captura de imagen y termino yo tipeándolo.

Otra cosa. Edita el título. Retira la palabra AYUDAAAAAAAAAAAA. Ese no es un título que alguien va a buscar, pero si Contador de 4 digitos.

ok ya tengo el codigo y fotos en proteus y el diagrama para k vean de lo k hablo..

const int latchPin= A1;
const int clockPin = A2;
const int dataPin = A0;

#define CA1 4
#define CA2 5
#define CA3 6
#define CA4 7

int botonUp = 3;
int botonDown = 2;
int cambio = 0;
int botonPress ;
int boton_No_Press ;
int botonPress2 ;
int boton_No_Press2 ;

const int energisarTiempo = 10;

boolean energisar ( int pin ){
boolean contador = 0;
boolean Press;
boolean NoPress;

do {
Press =digitalRead ( pin);
if ( Press != NoPress) {
  contador = 0;
 NoPress = Press;
}
else
{
contador = contador + 1;
}
delay (1);
}
while ( contador < energisarTiempo);

return Press;
}

void actualizar ()
{
switch ( cambio ) {
  
   case 11:
 for (int numberToDisplay = CA3; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, LOW);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B00001100); 
    //take the latch pin high so the LEDs will light up:
    digitalWrite(CA1, HIGH);
  digitalWrite(CA3, HIGH);
   }
break;
  
  
  case 10:
 for (int numberToDisplay = CA3; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, LOW);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11111110); 
    //take the latch pin high so the LEDs will light up:
    digitalWrite(CA3, HIGH);
  digitalWrite(CA4, HIGH);
 }
break;
  
  
  case 9:
   for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, LOW);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11001110); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA4, HIGH);
   }
break;

case 8:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, LOW);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11111110); 
    //take the latch pin high so the LEDs will light up:
     digitalWrite(CA4, HIGH);
 }
break;

case 7:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, LOW);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B00001110); 
    //take the latch pin high so the LEDs will light up:
    digitalWrite(CA4, HIGH);
 }
break;

case 6:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, LOW);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11111010); 
    //take the latch pin high so the LEDs will light up:
 
 }
break;

case 5:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11011010); 
    //take the latch pin high so the LEDs will light up:
        digitalWrite(CA3, LOW);
  digitalWrite(CA4, LOW);
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, LOW);
  digitalWrite(latchPin, LOW);
 }
break;

case 4:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11001100); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA3, LOW);
  digitalWrite(CA4, HIGH);
  digitalWrite(CA2, LOW);
    digitalWrite(CA1, LOW);
  digitalWrite(latchPin, LOW);
 }
break;

case 3:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B10011110); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA3, HIGH);
  digitalWrite(CA4, HIGH);
  digitalWrite(CA2, LOW);
   digitalWrite(CA1, HIGH);
    digitalWrite(latchPin, LOW); 
 }
break;

case 2:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B10110110); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA3, LOW);
  digitalWrite(CA1,HIGH);
   digitalWrite(CA4, LOW);
   digitalWrite(CA2, HIGH);
   digitalWrite(latchPin, LOW);
 }
break;

case 1:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B00001100); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA3, HIGH);
  digitalWrite(CA1, HIGH);
   digitalWrite(CA2, HIGH);
    digitalWrite(latchPin, LOW);
 }
break;

case 0:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B01111110); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA3, HIGH);
   digitalWrite(CA2, HIGH);
  digitalWrite(CA1, HIGH);
    digitalWrite(latchPin, LOW);
 }
break; 
  }
}
  
void setup ()
{
  Serial.begin ( 9600);
pinMode ( botonUp, INPUT);
pinMode ( botonDown, INPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  
   pinMode(CA1, OUTPUT);
  pinMode(CA2, OUTPUT);
   pinMode(CA3, OUTPUT);
  pinMode(CA4, OUTPUT);
}

void loop ()
{
botonPress = digitalRead ( botonUp );
if ( botonPress != boton_No_Press) {
if ( energisar ( botonUp) ){
cambio ++;
if ( cambio > 11 ) {
  cambio = 11;
}
}
}
boton_No_Press  = botonPress;
////////////////////////////////////////////////
botonPress2 = digitalRead ( botonDown );
if ( botonPress2 != boton_No_Press2) {
if ( energisar ( botonDown) ){
cambio --;
if ( cambio < 0 ) {
  cambio = 0;
}
}
}
boton_No_Press2  = botonPress2;

actualizar ();

}

notaaa. del 5 en adelante no presten mucho atencion es solo pruebas.

Bien y porque no subes el proyecto en proteus para poder simularlo directamente.

Recuerda que debes hacerlo en formato .zip.

A la izquierda de tu imagenes sale un código que dice: "Código para foros y paneles" algo que termina siempre en .jpg.
si usas eso con el icono de imagenes la imagen se vería directamente.

Quedo a la espera del archivo Proteus.

nose como subirlo el archivo

ya creo k lo resorbi casi . lo unico es k se ve como prendiendo y apagando no se nota mucho pero se nota y si me pueden ayudar a simplificarlo seria perfectoo el ejemplo esta en el numero 7 . osea despues de precionar el boton up 7 veces . les dejo el codigo gracias.

const int latchPin= A1;
const int clockPin = A2;
const int dataPin = A0;

#define CA1 4
#define CA2 5
#define CA3 6
#define CA4 7

int botonUp = 3;
int botonDown = 2;
int cambio = 0;
int botonPress ;
int boton_No_Press ;
int botonPress2 ;
int boton_No_Press2 ;

const int energisarTiempo = 10;

boolean energisar ( int pin ){
boolean contador = 0;
boolean Press;
boolean NoPress;

do {
Press =digitalRead ( pin);
if ( Press != NoPress) {
  contador = 0;
 NoPress = Press;
}
else
{
contador = contador + 1;
}
delay (1);
}
while ( contador < energisarTiempo);

return Press;
}

 void actualizar ()
{
switch ( cambio ) {
  
   case 11:
 for (int numberToDisplay = CA3; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, LOW);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B00001100); 
    //take the latch pin high so the LEDs will light up:
    digitalWrite(CA1, HIGH);
  digitalWrite(CA3, HIGH);
   }
break;
  
  
  case 10:
 for (int numberToDisplay = CA3; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, LOW);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11111110); 
    //take the latch pin high so the LEDs will light up:
    digitalWrite(CA3, HIGH);
  digitalWrite(CA4, HIGH);
 }
break;
  
  
  case 9:
   for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, LOW);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11001110); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA4, HIGH);
   }
break;

case 8:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, LOW);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11111110); 
    //take the latch pin high so the LEDs will light up:
     digitalWrite(CA4, HIGH);
 }
break;
////////////////////////////////////////////////////
//////////////////////////////////////////////////
///////////////////////////////////////////////////
case 7:
 for (int numberToDisplay = 0; numberToDisplay < 100; numberToDisplay++) {
digitalWrite(latchPin,HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B00001110); 
 digitalWrite(CA1, LOW);
 digitalWrite(CA2, HIGH);
    digitalWrite(CA3, HIGH);
     digitalWrite(CA4, HIGH);
       numberToDisplay%10;
     digitalWrite(latchPin, LOW);
 }
  for (int numberToDisplay = 0; numberToDisplay < 100; numberToDisplay++) {
digitalWrite(latchPin, HIGH);   
 shiftOut(dataPin, clockPin, MSBFIRST, B10011110); 
 digitalWrite(CA2, LOW);
  digitalWrite(CA1, HIGH);
 digitalWrite(CA3, HIGH);
     digitalWrite(CA4, HIGH);
   numberToDisplay/10%10;
 digitalWrite(latchPin, LOW);
 }
break;
//////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////

case 6:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, LOW);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11111010); 
    //take the latch pin high so the LEDs will light up:
 
 }
break;

case 5:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11011010); 
    //take the latch pin high so the LEDs will light up:
        digitalWrite(CA3, LOW);
  digitalWrite(CA4, LOW);
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, LOW);
  digitalWrite(latchPin, LOW);
 }
break;

case 4:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B11001100); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA3, LOW);
  digitalWrite(CA4, HIGH);
  digitalWrite(CA2, LOW);
    digitalWrite(CA1, LOW);
  digitalWrite(latchPin, LOW);
 }
break;

case 3:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B10011110); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA3, HIGH);
  digitalWrite(CA4, HIGH);
  digitalWrite(CA2, LOW);
   digitalWrite(CA1, HIGH);
    digitalWrite(latchPin, LOW); 
 }
break;

case 2:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B10110110); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA3, LOW);
  digitalWrite(CA1,HIGH);
   digitalWrite(CA4, LOW);
   digitalWrite(CA2, HIGH);
   digitalWrite(latchPin, LOW);
 }
break;

case 1:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B00001100); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA3, HIGH);
  digitalWrite(CA1, HIGH);
   digitalWrite(CA2, HIGH);
    digitalWrite(latchPin, LOW);
 }
break;

case 0:
 for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
digitalWrite(latchPin, HIGH);
 
 shiftOut(dataPin, clockPin, MSBFIRST, B01111110); 
    //take the latch pin high so the LEDs will light up:
      digitalWrite(CA3, HIGH);
   digitalWrite(CA2, HIGH);
  digitalWrite(CA1, HIGH);
    digitalWrite(latchPin, LOW);
 }
break; 
  }
}
  
void setup ()
{
  Serial.begin ( 9600);
pinMode ( botonUp, INPUT);
pinMode ( botonDown, INPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  
   pinMode(CA1, OUTPUT);
  pinMode(CA2, OUTPUT);
   pinMode(CA3, OUTPUT);
  pinMode(CA4, OUTPUT);
}

void loop ()
{
botonPress = digitalRead ( botonUp );
if ( botonPress != boton_No_Press) {
if ( energisar ( botonUp) ){
cambio ++;
if ( cambio > 11 ) {
  cambio = 11;
}
}
}
boton_No_Press  = botonPress;
////////////////////////////////////////////////
botonPress2 = digitalRead ( botonDown );
if ( botonPress2 != boton_No_Press2) {
if ( energisar ( botonDown) ){
cambio --;
if ( cambio < 0 ) {
  cambio = 0;
}
}
}
boton_No_Press2  = botonPress2;

actualizar ();

}

Sigo sin ver el archivo proteus que debes comprimir en formato .zip

Subiste la captura pero no el archivo como para que alguno pueda repetir tu experiencia.

proteus

proteus H4.zip (19.1 KB)

Modifico todo mi post porque no tenia nada que ver con lo que pides.

Tu código es repetitivo al extremo. Si lo copiaste de una web lo dejamos ahi.
Por lo que leo en tu post#1 quieres que con cada pulsacion UP suba 0,5,10 y con DOWN lo que corresponde.
Mi pregunta es: QUE MAS?

Primero intente usar el codigo del cronometro pero este no hacia nada. Asi k opté por este codigo k tenia con un display de 1 digito y trate d acoplarlo a 4 digitos.....

NOTA
Los numeros como el 6 ,8,9,10,11 no importan mucho como estan pues solo estaba esperimentando en ensender y apagar el digito k necesito.. .sientance en libertad de cambiar cualquier cosa oh toda hahahaa. El punta es k puede controlar al menos 2 digitos sin k muestre el mismo numeros en los dos..

Lee mi pregunta anterior?

Solo eso.. lo k pasa es k lo voy a añadif a otro codigo para el proyecto en k trabajo.. solo necesito eso k marque almenos 2 digitos al precionar... claro con un shift register..

Ok. Entendido. Lo corrijo y lo subo.

Viendo el esquema electrónico no entiendo porque usas un ShifRegister 595 en lugar de un decodificador de 7 segmentos. No tiene ningún sentido.
Yo voy a cambiarlo porque se trata de un display multiplexado pero usar un shiftRegister ahi me resulta un despropósito.

disculpe, como le dije no se mucho de los microcontroladores, soy nuevo en arduino, los ejemplos k vi eran con shift register y eran los k tenia a manos para las practicas pero si me puedes decir cual usar seria perfecto. realmente necesito los menos posible el uso de pines de arduino.

Bueno debido a tu consulta y la de otros inicio una serie de contadores de 4 digitos Multiplexados

  1. sin integrados,

  2. con 74HC47 y

  3. con 74HC595.

  4. SIN USAR INTEGRADOS. Con Arduino Solamente
    Aca el primero sin integrados directametne con el Arduino comandando tu mismo display.

Los archivos estan hechos con un programa que permite Nombres con espacios. Si no puedes compilarlo con el IDE, edita el nombre o le quitas el espacio.
Solo agregué los botones UP y DOWN

NOTA: lo mas importante. El código corresponde al Sr. Nick Gammon y lo encuentran aca

LED multiplexing with Arduino alone

Sin IC.zip (22.3 KB)

cool , gracias me quedo a la espera de los que usan los integrados.