Buen día
Tengo un contador de 2 dígitos que fabriqué para contabilizar piezas que salen de una maquina, la caja lleva 21, ahora metimos otro producto que lleva 12, el contador está programado para que cuando se cumplan las 21 manda una salida, espera 5 seg y se reinicializa en 0.
Como puedo hacer un programa para poder contabilizar las cajas de paquete de 21y las de 12, usé el pin A3 como entrada con un selector, cuando está en high deberá trabajar con la cuenta de 21 y cuando esta en low debera contar 12 y reiniciarse, ya realize algunas pruebas con if y else pero no me funciona.
Algún consejo? sería bien recibido.
Anexo el código que tengo con el contador de 21 piezas.
Omití los números de 3 al 21 para ahorrar espacio, el contador tambien tiene 2 botones uno para incrementar y otro para decrementar.
/* se declaran las contantes para identificar cada led*/
const int a = 0;
const int b = 1;
const int c = 2;
const int d = 3;
const int e = 4;
const int f = 5;
const int g = 6;
const int a1 = 7;
const int b1 = 8;
const int c1 = 9;
const int d1 = 10;
const int e1 = 11;
const int f1 = 12;
const int g1 = 13;
const int out = A2;
const int BtnIncremento = A0; // boton de incremento conectadoa al pin 9
const int BtnDecremento = A1; // boton de decremento conectadoa al pin 10
const int tiempoAntirebote =50;
int cuenta =0; //lleva la cuenta
int estadoBtnIncremento;
int estadoBtnIncrementoAnterior;
int estadoBtnDecremento;
int estadoBtnDecrementoAnterior;
boolean antirebote (int pin ) {
int contador =0;
boolean estado; // guarda el estado del boton
boolean estadoAnterior; // guarda el ultimo estado del boton
do {
estado = digitalRead (pin);
if (estado != estadoAnterior ){ // comparamos el estado actual
contador =0; // reiniciamos el contador
estadoAnterior= estado;
}
else{
contador = contador +1; // aumentamos el contador en 1
}
delay (1);
}
while (contador < tiempoAntirebote);
return estado;
if (cuenta != 30){
cuenta = cuenta++;
}
}
/* Metodo para elegir que numero mostrar en el display*/
void actualizarNumero(){
switch (cuenta) {
case 0:
/*Bloque para mostrar un 0*/
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
digitalWrite(a1, LOW);
digitalWrite(b1, LOW);
digitalWrite(c1, LOW);
digitalWrite(d1, LOW);
digitalWrite(e1, LOW);
digitalWrite(f1, LOW);
digitalWrite(g1, LOW);
digitalWrite(out, LOW);
break;
case 1:
/*Bloque para mostrar un 1*/
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(a1, LOW);
digitalWrite(b1, LOW);
digitalWrite(c1, LOW);
digitalWrite(d1, LOW);
digitalWrite(e1, LOW);
digitalWrite(f1, LOW);
digitalWrite(g1, LOW);
break;
void setup(){
/*Declaramos los segmetos del display como salidas*/
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(a1, OUTPUT);
pinMode(b1, OUTPUT);
pinMode(c1, OUTPUT);
pinMode(d1, OUTPUT);
pinMode(e1, OUTPUT);
pinMode(f1, OUTPUT);
pinMode(g1, OUTPUT);
pinMode(out, OUTPUT);
/*Declaramos los botones como entradas*/
pinMode(BtnIncremento, INPUT);
pinMode(BtnDecremento, INPUT);
}
void loop() {
estadoBtnIncremento = digitalRead(BtnIncremento);
if (estadoBtnIncremento != estadoBtnIncrementoAnterior) { // si hay cambio con respeto al estado
if (antirebote (BtnIncremento)){ //checamos si esta preionado y si lo esta
cuenta++; //aumentamos la cuenta
if (cuenta == 21 ) {
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
digitalWrite(a1, HIGH);
digitalWrite(b1, HIGH);
digitalWrite(c1, LOW);
digitalWrite(d1, HIGH);
digitalWrite(e1, HIGH);
digitalWrite(f1, LOW);
digitalWrite(g1, HIGH);
digitalWrite(out, HIGH);
delay(5000);
cuenta=0;
}
}
}
estadoBtnIncrementoAnterior = estadoBtnIncremento; // guardamos el estado del boton
estadoBtnDecremento = digitalRead(BtnDecremento); //leemos el estado del boton
if (estadoBtnDecremento != estadoBtnDecrementoAnterior) { // si hay cambio con respeto al estado anterior
if (antirebote (BtnDecremento)){ //si el boton esta presionado disminuimos la cuenta
cuenta--;
if (cuenta<0){
cuenta = 0;
}
}
}
estadoBtnDecrementoAnterior = estadoBtnDecremento; //guardamos el estado del boton
actualizarNumero(); //desplegamos la cuenta en el display
}