Go Down

Topic: contador de 4 digitos (Read 5165 times) previous topic - next topic

Hcorniel

Mar 19, 2015, 05:58 pm Last Edit: Mar 21, 2015, 04:47 am by Hcorniel
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

surbyte

#1
Mar 19, 2015, 07:30 pm Last Edit: Mar 19, 2015, 07:40 pm by surbyte
El código, lo copias y pegas usando tags como este que te señalo

Aca dice como insertar códigos


surbyte

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.

Hcorniel

ok ya tengo el codigo y fotos en proteus y el diagrama para k vean de lo k hablo..
Code: [Select]
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 ();

}

Hcorniel

notaaa. del 5 en adelante no presten mucho atencion es solo pruebas.
http://tinypic.com/m/ivl8w0/4
http://tinypic.com/m/ivl8vt/4

surbyte

#5
Mar 21, 2015, 11:10 am Last Edit: Mar 21, 2015, 11:13 am by surbyte
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.



Hcorniel

nose como subirlo el archivo

Hcorniel

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.
Code: [Select]
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 ();

}

surbyte

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.


Hcorniel

proteus

surbyte

#12
Mar 22, 2015, 10:50 pm Last Edit: Mar 23, 2015, 12:50 am by surbyte
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?

Hcorniel

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..

surbyte

Lee mi pregunta anterior?

Go Up