Buenas,
Vengo a pediros ayuda por este pequeño problema que seguro tenga fácil solución.
Tengo montado 4 displays de 7 segmentos y 2 botones, cuando doy a un botón aumenta en 1 los números y si doy al otro botón resta 1. Hasta ahí todo bien, el problema viene para poner un 3º botón y que haga una cuenta atrás (Vamos que reste en 1 los digitos segun el numero que esté mostrando) . Me estoy volviendo loco creando bucles y no doy con el resultado.
Nota: El común de los displays de 7 segmentos es el ánodo.
El código es este:
#define A 2
#define B 3
#define C 4
#define D 5
#define E 6
#define Z 7
#define G 8
// Botones de pulsación analógicos
#define BTN1 14
#define BTN2 15
#define BTN3 16 // Este es el botón que quiero para hacer la cuenta regresiva
// Comunes para ánodos o cátodos, según leds
#define CC1 9
#define CC2 10
#define CC3 11
#define CC4 12
// Secuencia de leds para A, B, C, D, E, Z, G
const int segs[7] = { 2, 3, 4, 5, 6, 7, 8 };
//Números multiplexados
const byte numbers[10] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010, 0b0000010, 0b1111000, 0b0000000, 0b0010000};
int estadobtn1 = 0;
int estadobtn2 = 0;
int digit1 = 0;
int digit2 = 0;
int digit3 = 0;
int digit4 = 0;
int count = 0;
int val;
int val2;
void setup() {
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(Z, OUTPUT);
pinMode(G, OUTPUT);
pinMode(BTN1, INPUT);
pinMode(BTN2, INPUT);
digitalWrite(BTN1, HIGH);
digitalWrite(BTN2, HIGH);
pinMode(CC1, OUTPUT);
pinMode(CC2, OUTPUT);
pinMode(CC3, OUTPUT);
pinMode(CC4, OUTPUT);
count = 0;
}
void loop() {
val = digitalRead(BTN1);
if (val != estadobtn1)
{
if (val == LOW)
{
count++;
count %= 10000;
}
}
estadobtn1=val;
val = digitalRead(BTN2);
if (val != estadobtn2)
{
if (val == LOW)
{
if (count == 0)
{
count=9999;
} else {
count--;
}
}
estadobtn2=val;
}
// display number
digit1=count / 1000;
digit2=(count - (digit1 * 1000)) / 100;
digit3=(count - (digit11000) - (digit2100)) / 10;
digit4=count % 10;
lightDigit1(numbers[digit1]);
delay(2);
lightDigit2(numbers[digit2]);
delay(2);
lightDigit3(numbers[digit3]);
delay(2);
lightDigit4(numbers[digit4]);
delay(2);
}
void lightDigit1(byte number) {
digitalWrite(CC1, HIGH);
digitalWrite(CC2, LOW);
digitalWrite(CC3, LOW);
digitalWrite(CC4, LOW);
lightSegments(number);
}
void lightDigit2(byte number) {
digitalWrite(CC1, LOW);
digitalWrite(CC2, HIGH);
digitalWrite(CC3, LOW);
digitalWrite(CC4, LOW);
lightSegments(number);
}
void lightDigit3(byte number) {
digitalWrite(CC1, LOW);
digitalWrite(CC2, LOW);
digitalWrite(CC3, HIGH);
digitalWrite(CC4, LOW);
lightSegments(number);
}
void lightDigit4(byte number) {
digitalWrite(CC1, LOW);
digitalWrite(CC2, LOW);
digitalWrite(CC3, LOW);
digitalWrite(CC4, HIGH);
lightSegments(number);
}
void lightSegments(byte number) {
for (int i = 0; i < 7; i++) {
int bit = bitRead(number, i);
digitalWrite(segs*, bit);*
- }*
}[/table]
Un saludo