Hola a todos
Tengo un pequeño problema con el que he estado lidiando desde hace un par de días, me encuentro realizando un pequeño proyecto para el cual ocupo un contador de 0-999 usando displays de 7 segmentos de ánodo común pero como necesito usar casi (sino es que todos) los pines de mi Arduino UNO me estoy apoyando de mis fieles compañeros de batalla, los CI 74595 anexo el diagrama del circuito elaborado en proteus
así en vez de lidiar con la distribución de pines puedo controlar los 3 displays con solo 3 pines. Hasta aquí no hay problema todo va bien en el sentido de que tengo el contador funcionando de forma automática, es decir una vez conectándolo empieza a contar es aquí donde mi problema reside ya que quiero que la cantidad aumente hasta que yo presione el pulsador que se ve conectado al pin 6.
Anexo el código del contador trabajando de forma automatica:
int dataPin =8;
int latchPin =11;
int clockPin =12;
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void cero(){
shiftOut(dataPin, clockPin, MSBFIRST, 64);
}
void uno(){
shiftOut(dataPin, clockPin, MSBFIRST, 121);
}
void dos(){
shiftOut(dataPin, clockPin, MSBFIRST, 36);
}
void tres(){
shiftOut(dataPin, clockPin, MSBFIRST, 48);
}
void cuatro(){
shiftOut(dataPin, clockPin, MSBFIRST, 25);
}
void cinco(){
shiftOut(dataPin, clockPin, MSBFIRST, 18);
}
void seis(){
shiftOut(dataPin, clockPin, MSBFIRST, 2);
}
void siete(){
shiftOut(dataPin, clockPin, MSBFIRST, 120);
}
void ocho(){
shiftOut(dataPin, clockPin, MSBFIRST, 0);
}
void nueve(){
shiftOut(dataPin, clockPin, MSBFIRST, 24);
}
void muestra(int x){
switch (x){
case 0:
cero();
break;
case 1:
uno();
break;
case 2:
dos();
break;
case 3:
tres();
break;
case 4:
cuatro();
break;
case 5:
cinco();
break;
case 6:
seis();
break;
case 7:
siete();
break;
case 8:
ocho();
break;
case 9:
nueve();
break;
}
}
void loop() {
for (int x=0; x<1000; x++){
digitalWrite(latchPin, LOW);
muestra(x%10);
muestra((x/10)%10);
muestra(x/100);
digitalWrite(latchPin, HIGH);
delay(10);
}
delay(1000);
}
Hasta este punto como mencione el contador trabaja de forma automática.
Pensé que añadiendo esto podría hacer lo que yo quiero que es controlar el incremento de forma manual
int dataPin =8;
int latchPin =11;
int clockPin =12;
/////////////////////////////// Lineas añadidas /////////////////////////
int button=6;
int estado=0;
int cantidad=0;
/////////////////////////////////////////////////////////////////////////////
void setup() {
// put your setup code here, to run once:
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(button, INPUT);
}
void cero(){
shiftOut(dataPin, clockPin, MSBFIRST, 64);
}
void uno(){
shiftOut(dataPin, clockPin, MSBFIRST, 121);
}
void dos(){
shiftOut(dataPin, clockPin, MSBFIRST, 36);
}
void tres(){
shiftOut(dataPin, clockPin, MSBFIRST, 48);
}
void cuatro(){
shiftOut(dataPin, clockPin, MSBFIRST, 25);
}
void cinco(){
shiftOut(dataPin, clockPin, MSBFIRST, 18);
}
void seis(){
shiftOut(dataPin, clockPin, MSBFIRST, 2);
}
void siete(){
shiftOut(dataPin, clockPin, MSBFIRST, 120);
}
void ocho(){
shiftOut(dataPin, clockPin, MSBFIRST, 0);
}
void nueve(){
shiftOut(dataPin, clockPin, MSBFIRST, 24);
}
void muestra(int x){
switch (x){
case 0:
cero();
break;
case 1:
uno();
break;
case 2:
dos();
break;
case 3:
tres();
break;
case 4:
cuatro();
break;
case 5:
cinco();
break;
case 6:
seis();
break;
case 7:
siete();
break;
case 8:
ocho();
break;
case 9:
nueve();
break;
}
}
void loop() {
///////////////////////////////// lineas añadidas ///////////////////////////////
estado=digitalRead(button);
[color=red]if(estado==HIGH){
cantidad=cantidad++;
delay(15);
}
/////////////////////////////////////////////////////////////////////////////////////////////
for (int x=0; x<1000; x++){
digitalWrite(latchPin, LOW);
muestra(x%10);
muestra((x/10)%10);
muestra(x/100);
digitalWrite(latchPin, HIGH);
delay(10);
}
delay(1000);
}
Pero no logro lo que quiero, espero y alguien me pueda orientar un poco.
Gracias