Contador ascendente y descendente con botón y display 7 segmentos

Hola, estoy aprendiendo Arduino y no encuentro solución a un problema que tengo, es un display de de 7 segmento con un contador decimal de 0 a 9 y de 9 a 0, cuando el contador este descendentemente solo me muestra numero pares, hasta ahi todo bien, cuando programo el botón para que pause el contador y ejecuto el display no me muestra nada, me podrían ayudar si es que estoy escribiendo mal el o código o me falta agregar otra librería.
Estoy usando un emulador: Virtual Breadboard.

import muvium.compatibility.arduino.*;


public class Class0 extends Arduino{ 
	int a = 2;
	int b = 3;
	int c = 4;
	int d = 5;
	int e = 6;
	int f = 8;
	int g = 7;
	int pt = 9;
	int boton = 12;
	int contador = 0;
	int direccion = 1;

	  
	

	public void setup() {   
		pinMode(a, OUTPUT);
		pinMode(b, OUTPUT);
		pinMode(c, OUTPUT);
		pinMode(d, OUTPUT);
		pinMode(e, OUTPUT);
		pinMode(f, OUTPUT);
		pinMode(g, OUTPUT);
		pinMode(pt, INPUT);
		pinMode(boton, INPUT_PULLUP);
	}

	public void escribirEnElDisplay(int va, int vb, int vc, int vd, int ve, int vf, int vg) {
		digitalWrite(a, va);
		digitalWrite(b, vb);
		digitalWrite(c, vc);
		digitalWrite(d, vd);
		digitalWrite(e, ve);
		digitalWrite(f, vf);
		digitalWrite(g, vg);
	}

	public void loop() {
		// Leer el estado del botón
		int estadoBoton = digitalRead(boton);
        
		// Si el botón está presionado (asumiendo LOW significa presionado)
		if (estadoBoton == LOW) {
			// Pausar el contador, no hacer nada
			return;
		}

		// Si el botón no está presionado, continuar con el contador
		switch (contador) {
			case 0:
				escribirEnElDisplay(1, 1, 1, 1, 1, 1, 0);
				break;
			case 1:
				if (direccion == 1) {
					escribirEnElDisplay(0, 1, 1, 0, 0, 0, 0);
				} else {
					contador += direccion;
					return;
				}
				break;
			case 2:
				escribirEnElDisplay(1, 1, 0, 1, 1, 0, 1);
				break;
			case 3:
				if (direccion == 1) {
					escribirEnElDisplay(1, 1, 1, 1, 0, 0, 1);
				} else {
					contador += direccion;
					return;
				}
				break;
			case 4:
				escribirEnElDisplay(0, 1, 1, 0, 0, 1, 1);
				break;
			case 5:
				if (direccion == 1) {
					escribirEnElDisplay(1, 0, 1, 1, 0, 1, 1);
				} else {
					contador += direccion;
					return;
				}
				break;
			case 6:
				escribirEnElDisplay(1, 0, 1, 1, 1, 1, 1);
				break;
			case 7:
				if (direccion == 1) {
					escribirEnElDisplay(1, 1, 1, 0, 0, 0, 0);
				} else {
					contador += direccion;
					return;
				}
				break;
			case 8:
				escribirEnElDisplay(1, 1, 1, 1, 1, 1, 1);
				break;
			case 9:
				if (direccion == 1) {
					escribirEnElDisplay(1, 1, 1, 1, 0, 1, 1);
				} else {
					contador += direccion;
					return;
				}
				break;
		}
		delay(1000);
		contador += direccion;
		if (contador > 9) {
			direccion = -1;
			contador = 8;
		} else if (contador < 0) {
			direccion = 1;
		}
	}
}```
[https://drive.google.com/drive/folders/1nC84btLGGQ-RwrmftEgPybL-z5HVXbnd?usp=sharing](https://drive.google.com/drive/folders/1nC84btLGGQ-RwrmftEgPybL-z5HVXbnd?usp=sharing)

This is the English section of forum, Please post in the section of Your native language or communicate in English.

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @kevinbertz.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Moderador:
Por favor, lee las Normas del foro
Si posteas en el foro en inglés usa idioma inglés para expresarte.
Si escribes en español debes usar el foro Arduino en español.


Este mensaje lo envío porque tu hilo fue movido del foro en inglés y por eso tenemos una respuesta anterior en ese idioma.
A partir de ahora todos responden en español.
Además no doble postees, abriste el mismo hilo en el foro en inglés y en este el español.
O sea que eres consiente de tu falta.
La primera la dejo pasar, la segunda no.

Tu mismo has complicado el código

int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 8;
int g = 7;
int pt = 9;
int boton = 12;
int contador = 0;
int direccion = 1;




void setup() {
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(pt, INPUT);
  pinMode(boton, INPUT_PULLUP);
}

void escribirEnElDisplay(int va, int vb, int vc, int vd, int ve, int vf, int vg) {
  digitalWrite(a, !va);
  digitalWrite(b, !vb);
  digitalWrite(c, !vc);
  digitalWrite(d, !vd);
  digitalWrite(e, !ve);
  digitalWrite(f, !vf);
  digitalWrite(g, !vg);
}

void loop() {
  // Leer el estado del botón
  int estadoBoton = digitalRead(boton);

  // Si el botón está presionado (asumiendo LOW significa presionado)
  if (estadoBoton == LOW) {
    // Pausar el contador, no hacer nada
    return;
  }

  // Si el botón no está presionado, continuar con el contador
  switch (contador) {
    case 0:
      escribirEnElDisplay(1, 1, 1, 1, 1, 1, 0);
      break;
    case 1:
      escribirEnElDisplay(0, 1, 1, 0, 0, 0, 0);
      break;
    case 2:
      escribirEnElDisplay(1, 1, 0, 1, 1, 0, 1);
      break;
    case 3:
      escribirEnElDisplay(1, 1, 1, 1, 0, 0, 1);
      break;
    case 4:
      escribirEnElDisplay(0, 1, 1, 0, 0, 1, 1);
      break;
    case 5:
      escribirEnElDisplay(1, 0, 1, 1, 0, 1, 1);
      break;
    case 6:
      escribirEnElDisplay(1, 0, 1, 1, 1, 1, 1);
      break;
    case 7:
      escribirEnElDisplay(1, 1, 1, 0, 0, 0, 0);
      break;
    case 8:
      escribirEnElDisplay(1, 1, 1, 1, 1, 1, 1);
      break;
    case 9:
      escribirEnElDisplay(1, 1, 1, 1, 0, 1, 1);
      break;
  }
  delay(500);
  contador += direccion;
  if (contador > 9) {
    direccion = -1;
    contador = 8;
  } else if (contador < 0) {
    direccion = 1;
  }
}

Con esas condiciones que pones en todos los números impares.

Observalo en este simulador

El código puede mejorarse mucho, de hecho mira este otro

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.