Hola, buenas. Necesito ayuda con un proyecto en el que estoy haciendo un cronometro con boton de pausa e inicio, y un contador de puntos usando solo un display de 7 segmentos 4 digitos.
el problema es que cuando el tiempo marca XX:01 a XX:04 todos los digitos que no muestren un cero, titilan.
int numero[4];
int pos = 0;
int num;
void mostrarnum(int num) {
numero[0] = (num % 10);
numero[1] = (num % 100) / 10;
numero[2] = (num % 1000) / 100;
numero[3] = (num / 1000);
for (pos = 0; pos <= 3; pos++) {
digitalWrite(12 - pos, LOW);
if ((numero[pos] != 1) && (numero[pos] != 4)) {
digitalWrite(2, HIGH);
} else {
digitalWrite(2, LOW);
}
if ((numero[pos] != 5) && (numero[pos] != 6)) {
digitalWrite(3, HIGH);
} else {
digitalWrite(3, LOW);
}
if (numero[pos] != 2) {
digitalWrite(4, HIGH);
} else {
digitalWrite(4, LOW);
}
if ((numero[pos] != 1) && (numero[pos] != 4) && (numero[pos] != 7)) {
digitalWrite(5, HIGH);
} else {
digitalWrite(5, LOW);
}
if ((numero[pos] != 1) && (numero[pos] != 3) && (numero[pos] != 5) && (numero[pos] != 7) && (numero[pos] != 9) && (numero[pos] != 4)) {
digitalWrite(6, HIGH);
} else {
digitalWrite(6, LOW);
}
if ((numero[pos] != 1) && (numero[pos] != 2) && (numero[pos] != 3) && (numero[pos] != 7)) {
digitalWrite(7, HIGH);
} else {
digitalWrite(7, LOW);
}
if ((numero[pos] != 0) && (numero[pos] != 1) && (numero[pos] != 7)) {
digitalWrite(8, HIGH);
} else {
digitalWrite(8, LOW);
}
delay(5);
digitalWrite(12 - pos, HIGH);
}
}
int e = 1; //cuenta los segundos
int g = 0; //cuenta los milis
int p = 0; //junta dlas variables p1 y p2
int p1;
int p2;
int r = 0;
int t1;
int t2;
int t;
int y;
int o;
int pollo;
int s = 1;
bool pausa; //verdadero o falso de la pausa
unsigned long previousMillis = 0;
void setup() {
pinMode(2, OUTPUT); //segmento a
pinMode(3, OUTPUT); //segmento b
pinMode(4, OUTPUT); //segmento c
pinMode(5, OUTPUT); //segmento d
pinMode(6, OUTPUT); //segmento e
pinMode(7, OUTPUT); //segmento f
pinMode(8, OUTPUT); //segmento g
pinMode(9, OUTPUT); //digito 4
pinMode(10, OUTPUT); //digito 3
pinMode(11, OUTPUT); //digito 2
pinMode(12, OUTPUT); //digito 1
Serial.begin(9600);
pausa = true;
}
void loop() {
analogRead(A5);
Serial.println(analogRead(A5)); // imprime los valores de
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// sistema para el cronometro ////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
if ((analogRead(A5) <= 100 && analogRead(A5) >= 90) || r == 1 || !pausa) {
r = 1;
pausa = false;
const long interval = 1000;
unsigned long currentMillis = millis();
if ((currentMillis - previousMillis) >= interval) {
previousMillis = currentMillis;
if (!pausa) { //si no está en pausa
t1++; //cuenta los segundos
}
}
if (t1 == 60) {
t1 = 0; //cuando los segundos llegan a 60 se reinician a 0
t2++; // " " " " " " se suma un minuto
}
t = (t2 * 100) + t1; // junta las 2 variables t1 y t2 como la variable t para mostrar el tiempo en el display
if (y == 0) { mostrarnum(t); } //llama a la funcion}
}
if (analogRead(A5) <= 20 && analogRead(A5) >= 5 || r == 2) {
r = 2;
pausa = true; // pausa el contador
o = t;
mostrarnum(o);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// sistema para alternar entre el cronometro y los puntos ////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (pausa) {
y = 0;
}
else if (t1 % 15 == 1 || t1 % 15 == 2 || t1 % 15 == 3 || y == 1) {
y = 1;
o = p;
mostrarnum(o); //llama a la funcion
}
if (t1 % 18 == 1 || t1 % 18 == 2 || t1 % 18 == 3 || y == 0) {
y = 0;
mostrarnum(t);
}
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////// sistema para la suma de puntos ////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
g = millis() % 10; //rapidez en la que suma los puntos
if (analogRead(A5) >= 800 && analogRead(A5) <= 950) //suma al equipo 1
{
if (g == 0) {
p1++;
}
}
if (p1 == 99) {
p1 = 0;
}
if (analogRead(A5) >= 600 && analogRead(A5) <= 750) //suma al equipo 2
{
{
if (g == 0) {
p2++;
}
}
if (p2 == 99) {
p2 = 0;
}
}
p = (p1 * 100) + p2; // junta las 2 variables p1 y p2 como la variable p para mostyrarlas en el display
//*/
}