Está en la página 1de 2

/* Contador númerico ascendente y descendente con 2 botones

uno para incrementar y el otro para decrementar */

const int PinContador = 9; // boton de Incr conectado al pin 10


const int PinUpDown = 10; // boton de Decr conectado al pin 9

const int tiempoAntirebote = 10;


int cuenta = 0; // lleva la cuenta de las veces que presionamos el botón
byte BtnContador;
byte BtnContadorAnt;
byte BtnUpDown;
byte BtnUpDownAnt;
byte UpDown = true; // UpDown = true incrementa Updown = false decremetna

const byte pin[] = {2,3,4,5,6,7,8};

// 0 1 2 3 4
const byte segmento[] = {0b1111110, 0b0110000, 0b1111001, 0b1111001, 0b0110011,
// 5 6 7 8 9
0b1011011, 0b1011111, 0b1110000, 0b1111111, 0b1111011};

//Función antirebote botón inicio


boolean antirebote(byte pin) {
int contador = 0;
boolean estado; // guarda el estado del botón
boolean estadoAnt; // guarda el último estado del botón

do {
estado = digitalRead(pin); // Leer el estado del botón y guardarla en la variable "estado"
if(estado != estadoAnt) { // comparamos el estado actual del botón con el Ant
contador = 0; // si es diferente contador va a valer 0 y reiciamos el contador, "!=" significa diferente a
estadoAnt = estado; // guardamos el valor de "estado" que leimos en "estadoAnt"
}
else {
contador = contador + 1; // en caso de que sea igual "contador" sumará 1
}
delay(1);
} while(contador < tiempoAntirebote);

return estado;
}

// Función antirebote botón fin

void actualizarNumero() {
for (int i=0; i<7; i++){
digitalWrite(pin[i], segmento[cuenta]&(1<<(6-i)));
}
}

void setup() {

// declaramos los LEDS como salidas


for (int i=0; i<7; i++){
pinMode(pin[i], OUTPUT);
}

pinMode(PinContador, INPUT); // declaramos los botones como entradas


pinMode(PinUpDown, INPUT);
}

void loop() {

// codigo botón Incr inicio

BtnContador = digitalRead(PinContador); // leemos el estado del botón


if(BtnContador != BtnContadorAnt) { // si hay cambio con respecto al estado Ant
if (antirebote(PinContador)) { // checamos si está presionado y si lo está,
if (UpDown) { // cambia de UP a Down con cada pulsada
cuenta++;
if (cuenta > 9) {
cuenta = 9;
}
} else {
cuenta--;
if (cuenta < 0) {
cuenta = 0;
}
}
}
}

BtnContadorAnt = BtnContador; // guardamos el estado del botón

BtnUpDown = digitalRead(PinUpDown); // leemos el estado del botón


if(BtnUpDown != BtnUpDownAnt) { // si hay cambio con respecto al estado Ant
if (antirebote(PinUpDown)) { // checamos si está presionado y si lo está,
UpDown = !UpDown; // disminuimos la cuenta en 1
}
}
BtnUpDownAnt = BtnUpDown; // guardamos el estado del botón

actualizarNumero(); // desplegamos la cuenta en el display

// codigo botón Decr fin

También podría gustarte