Hola buenas noches como están?
Necesito una ayuda gigante tengo que hacer un proyecto de realizar un contador de 0 a 99 con dos displays 7 segmentos y un deslizador que de un lado sea el contador de 0 a 99 y del otro sea un contador de numero primos, los contadores de numeros normales y los primos funcionan perfecto, el problema el problema es que la unidad osea el display derecho se ve pero esta titilando y eso se supone que no tiene que pasar, ya intente usando delay() tambien use millis() pero sigue sin funcionar y no puedo encontrar el error, dejo aclarado que no puedo usar librerias solo puedo usar lo que esta en el codigo que ahora les voy a dejar
#define A 10
#define B 11
#define C 5
#define D 6
#define E 7
#define F 9
#define G 8
#define INTERRUPTOR 2
#define UNIDAD A4
#define DECENA A5
#define APAGADOS 0
#define TIMEDISPLAYON 10
// VARIABLES
int numeroPrimo = 2; // Guarda el valor del numero primo
int numero = 0; // Guarda el valor del contador
int tiempo = millis();
// FUNCION: SETUP
// La funcion tiene el objetivo configurar y asignar los pines
void setup() {
pinMode(2, INPUT_PULLUP); //INTERRUPTOR
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(UNIDAD, OUTPUT);
pinMode(DECENA, OUTPUT);
digitalWrite(UNIDAD, 0);
digitalWrite(DECENA, 0);
verEnDisplay(0);
}
void loop() {
int posicionSwitch = digitalRead(INTERRUPTOR);
switch (posicionSwitch) {
case 0: {
if (numero < 100) {
numero++;
}
iniciarContadorEntero(numero);
delay(1000);
break;
}
case 1: {
numeroPrimo++;
if (numeroPrimo > 97) {
numeroPrimo = 0;
}
if (esPrimo(numeroPrimo)) {
iniciarContadorPrimo(numeroPrimo); // Llamada a la función displayNumeroPrimo
delay(1000); // Ajusta el tiempo según lo que necesites
}
}
}
}
// FUNCION: VER EN DISPLAY
// La funcion tiene como objetivo el manejo de los segmentos del
// display dependiendo del numero del contador (UNIDAD Y DECENA)
void verEnDisplay(int numero){
apagarDisplays();
switch (numero){
case 1:
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
break;
case 2:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(E, HIGH);
digitalWrite(D, HIGH);
digitalWrite(G, HIGH);
break;
case 3:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(G, HIGH);
break;
case 4:
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 5:
digitalWrite(A, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 6:
digitalWrite(A, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 7:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
break;
case 8:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
case 9:
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
break;
}
}
// FUNCION: INICIAR CONTADOR
// La funcion tiene como objetivo pasarle a los display
// el numero que debe mostrar a traves de los segmentos
void iniciarContadorEntero(int numero)
{
digitoEncendido(APAGADOS);
verEnDisplay(numero - (numero / 10) * 10);
digitoEncendido(UNIDAD);
digitoEncendido(APAGADOS);
verEnDisplay(numero / 10);
digitoEncendido(DECENA);
}
void iniciarContadorPrimo(int numeroPrimo) {
digitoEncendido(APAGADOS);
verEnDisplay(numeroPrimo % 10); //UNIDADES
digitoEncendido(UNIDAD);
digitoEncendido(APAGADOS);
verEnDisplay(numeroPrimo / 10); //DECENAS
digitoEncendido(DECENA);
}
// FUNCION: DIGITO ENCENDIDO
// La funcion tiene como objetivo controlar la visualizacion de
// los displays a traves de la UNIDAD y DECENA, apagando y
// prendiendo los mismos dependiendo el numero a mostrar
void digitoEncendido(int numero)
{
if (numero == UNIDAD)
{
digitalWrite(UNIDAD, LOW);
digitalWrite(DECENA, HIGH);
delay(TIMEDISPLAYON);
}
else if (numero == DECENA)
{
digitalWrite(UNIDAD, HIGH);
digitalWrite(DECENA, LOW);
delay(TIMEDISPLAYON);
}
else
{
digitalWrite(UNIDAD, HIGH);
digitalWrite(DECENA, HIGH);
delay(TIMEDISPLAYON);
}
}
void apagarDisplays() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
//FUNCION: ES PRIMO
bool esPrimo(int numero) {
if (numero <= 1) {
return false;
}
for (int divisor = 2; divisor * divisor <= numero; ++divisor) {
if (numero % divisor == 0) {
return false;
}
}
return true;
}