Que tal amigos, soy algo nuevo en eso del arduino y quisiera saber si podrian ayudarme....
Tengo este código el cual por medio de 2 botones incrementa o decrementa la cuenta en el display pero quisiera hacer una modificación para que hiciera lo siguiente:
1.- Comienza el contador en 0.
2.- Al presionar el botón1 incremente la cuenta.
3.- Presionar el botón2.
4.- Al presionar el boton1 decremente la cuenta.
5.- Presionar el botón2.
6.- Al presionar el botón1 vuelva a incrementar la cuenta.
Y asi sucesivamente, en pocas palabras deseo hacer que el segundo botón sea el encargado de elegir si el botón1 incrementa o decrementa la cuenta en el display 7 segmentos.
Agradeceria si pudieran ayudarme..
Gracias.
/*
Contador númerico ascendente y descendente con 2 botones
uno para incrementar y el otro para decrementar
*/
const int a = 2;
const int b = 3;
const int c = 4;
const int d = 5;
const int e = 6;
const int f = 7;
const int g = 8;
const int botonIncremento = 9; // boton de incremento conectado al pin 10
const int botonDecremento = 10; // boton de decremento conectado al pin 9
const int tiempoAntirebote = 10;
int cuenta = 0; // lleva la cuenta de las veces que presionamos el botón
int estadoBotonIncremento;
int estadoBotonAnteriorIncremento;
int estadoBotonDecremento;
int estadoBotonAnteriorDecremento;
//Función antirebote botón inicio
boolean antirebote(int pin) {
int contador = 0;
boolean estado; // guarda el estado del botón
boolean estadoAnterior; // 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 != estadoAnterior) { // comparamos el estado actual del botón con el anterior
contador = 0; // si es diferente contador va a valer 0 y reiciamos el contador, "!=" significa diferente a
estadoAnterior = estado; // guardamos el valor de "estado" que leimos en "estadoAnterior"
}
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() {
switch(cuenta) {
case 0:
digitalWrite(a, HIGH); // encendido número 0
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
break;
case 1:
digitalWrite(a, LOW); // encendido número 1
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
break;
case 2:
digitalWrite(a, HIGH); // encendido número 2
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
break;
case 3:
digitalWrite(a, HIGH); // encendido número 3
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
break;
case 4:
digitalWrite(a, LOW); // encendido número 4
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 5:
digitalWrite(a, HIGH); // encendido número 5
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 6:
digitalWrite(a, HIGH); // encendido número 6
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 7:
digitalWrite(a, HIGH); // encendido número 7
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
break;
case 8:
digitalWrite(a, HIGH); // encendido número 8
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
case 9:
digitalWrite(a, HIGH); // encendido número 9
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
break;
}
}
void setup() {
pinMode(a, OUTPUT); // declaramos los LEDS como salidas
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(botonIncremento, INPUT); // declaramos los botones como entradas
pinMode(botonDecremento, INPUT);
}
void loop() {
// codigo botón incremento inicio
estadoBotonIncremento = digitalRead(botonIncremento); // leemos el estado del botón
if(estadoBotonIncremento != estadoBotonAnteriorIncremento) { // si hay cambio con respecto al estado anterior
if(antirebote(botonIncremento)) { // checamos si está presionado y si lo está,
cuenta++; // aumentamos la cuenta en 1
if(cuenta > 9) {
cuenta = 9;
}
}
}
estadoBotonAnteriorIncremento = estadoBotonIncremento; // guardamos el estado del botón
// codigo botón incremento fin
// codigo botón decremento inicio
estadoBotonDecremento = digitalRead(botonDecremento); // leemos el estado del botón
if(estadoBotonDecremento != estadoBotonAnteriorDecremento) { // si hay cambio con respecto al estado anterior
if(antirebote(botonDecremento)) { // checamos si está presionado y si lo está,
cuenta--; // disminuimos la cuenta en 1
if(cuenta < 0) {
cuenta = 0;
}
}
}
estadoBotonAnteriorDecremento = estadoBotonDecremento; // guardamos el estado del botón
actualizarNumero(); // desplegamos la cuenta en el display
}
// codigo botón decremento fin