/*//usando delay(150); como antirebote// ---------------------------
// Pines para los segmentos del display de 7 segmentos
#define segA 23
#define segB 22
#define segC 21
#define segD 19
#define segE 18
#define segF 5
#define segG 17
// Pines para los dígitos (display multiplexado)
#define Dig1 4
#define Dig2 0
#define Dig3 2
#define Dig4 27
// Botones
#define Boton_1 32
#define Boton_2 33
// ---------------------------
// Arreglos para facilitar el control de los pines
int pinesSegmentos[7]; // A, B, C, D, E, F, G
int pinesDigitos[4]; // Dígitos 1 a 4
// Matriz de segmentos para caracteres usados
// Orden: {A, B, C, D, E, F, G}
// 1 = segmento encendido, 0 = apagado
const bool caracterGuion[7] = {0, 0, 0, 0, 0, 0, 1}; // '-'
const bool caracterL[7] = {0, 0, 0, 1, 1, 1, 0}; // 'L'
const bool caracterJ[7] = {1, 1, 1, 1, 1, 0, 0}; // 'J'
// Secuencia personalizada de segmento y dígito
const int secuencia_segmentos[] = {
segA, segA, segA, segA, segB, segC, segD, segD, segD, segD, segE, segF
};
const int secuencia_digitos[] = {
Dig1, Dig2, Dig3, Dig4, Dig4, Dig4, Dig4, Dig3, Dig2, Dig1, Dig1, Dig1
};
int indice = 0;
int anterior_boton1 = HIGH;
int anterior_boton2 = HIGH;
// ---------------------------
void configurarPines() {
// Asignar pines de segmentos
pinesSegmentos[0] = segA;
pinesSegmentos[1] = segB;
pinesSegmentos[2] = segC;
pinesSegmentos[3] = segD;
pinesSegmentos[4] = segE;
pinesSegmentos[5] = segF;
pinesSegmentos[6] = segG;
for (int i = 0; i < 7; i++) {
pinMode(pinesSegmentos[i], OUTPUT);
digitalWrite(pinesSegmentos[i], HIGH); // apagado (anodo común)
}
pinesDigitos[0] = Dig1;
pinesDigitos[1] = Dig2;
pinesDigitos[2] = Dig3;
pinesDigitos[3] = Dig4;
for (int i = 0; i < 4; i++) {
pinMode(pinesDigitos[i], OUTPUT);
digitalWrite(pinesDigitos[i], LOW); // apagado (anodo común)
}
pinMode(Boton_1, INPUT_PULLUP);
pinMode(Boton_2, INPUT_PULLUP);
}
void apagarTodosLosSegmentos() {
for (int i = 0; i < 7; i++) {
digitalWrite(pinesSegmentos[i], HIGH); // Apagar (anodo común)
}
}
void apagarTodosLosDigitos() {
for (int i = 0; i < 4; i++) {
digitalWrite(pinesDigitos[i], LOW); // Apagar (anodo común)
}
}
void mostrarCaracterEnDigito(int digito, const bool caracter[7]) {
apagarTodosLosDigitos();
for (int i = 0; i < 7; i++) {
digitalWrite(pinesSegmentos[i], caracter[i] ? LOW : HIGH);
}
digitalWrite(pinesDigitos[digito], HIGH);
delay(2);
digitalWrite(pinesDigitos[digito], LOW);
}
void mostrarPalabraUnaVez() {
mostrarCaracterEnDigito(0, caracterGuion);
mostrarCaracterEnDigito(1, caracterL);
mostrarCaracterEnDigito(2, caracterJ);
mostrarCaracterEnDigito(3, caracterL);
}
void mostrarPalabraPorTiempo(int milisegundos) {
int ciclos = milisegundos / 40;
for (int i = 0; i < ciclos; i++) {
mostrarPalabraUnaVez();
}
}
void mostrarSegmento(int i) {
apagarTodosLosSegmentos();
apagarTodosLosDigitos();
digitalWrite(secuencia_segmentos[i], LOW);
digitalWrite(secuencia_digitos[i], HIGH);
}
void setup() {
configurarPines();
delay(1000);
// Parpadeo de "-LJL" 3 veces
for (int i = 0; i < 3; i++) {
mostrarPalabraPorTiempo(1500);
apagarTodosLosSegmentos();
apagarTodosLosDigitos();
delay(500);
}
// Iniciar con la secuencia personalizada
mostrarSegmento(indice);
}
void loop() {
int nuevo_boton1 = digitalRead(Boton_1);
int nuevo_boton2 = digitalRead(Boton_2);
if (nuevo_boton1 == LOW && anterior_boton1 == HIGH) {
if (indice < 11) {
indice++;
mostrarSegmento(indice);
}
}
if (nuevo_boton2 == LOW && anterior_boton2 == HIGH) {
if (indice > 0) {
indice--;
mostrarSegmento(indice);
}
}
anterior_boton1 = nuevo_boton1;
anterior_boton2 = nuevo_boton2;
delay(150);
}
*/ // Usando unsigned long ahora = millis(); como antirrebote
// ---------------------------
// Pines para los segmentos del display de 7 segmentos
#define segA 23
#define segB 22
#define segC 21
#define segD 19
#define segE 18
#define segF 5
#define segG 17
// Pines para los dígitos (display multiplexado)
#define Dig1 4
#define Dig2 0
#define Dig3 2
#define Dig4 27
// Botones
#define Boton_1 32
#define Boton_2 33
// ---------------------------
// Arreglos para facilitar el control de los pines
int pinesSegmentos[7]; // A, B, C, D, E, F, G
int pinesDigitos[4]; // Dígitos 1 a 4
// Matriz de segmentos para caracteres usados
const bool caracterGuion[7] = {0, 0, 0, 0, 0, 0, 1}; // '-'
const bool caracterL[7] = {0, 0, 0, 1, 1, 1, 0}; // 'L'
const bool caracterJ[7] = {1, 1, 1, 1, 1, 0, 0}; // 'J'
// Secuencia personalizada de segmento y dígito
const int secuencia_segmentos[] = {
segA, segA, segA, segA, segB, segC, segD, segD, segD, segD, segE, segF
};
const int secuencia_digitos[] = {
Dig1, Dig2, Dig3, Dig4, Dig4, Dig4, Dig4, Dig3, Dig2, Dig1, Dig1, Dig1
};
int indice = 0;
int anterior_boton1 = HIGH;
int anterior_boton2 = HIGH;
unsigned long ultimoTiempoRebote = 0;
const int tiempoRebote = 150; // milisegundos
// ---------------------------
void configurarPines() {
// Asignar pines de segmentos
pinesSegmentos[0] = segA;
pinesSegmentos[1] = segB;
pinesSegmentos[2] = segC;
pinesSegmentos[3] = segD;
pinesSegmentos[4] = segE;
pinesSegmentos[5] = segF;
pinesSegmentos[6] = segG;
for (int i = 0; i < 7; i++) {
pinMode(pinesSegmentos[i], OUTPUT);
digitalWrite(pinesSegmentos[i], HIGH); // apagado (ánodo común)
}
pinesDigitos[0] = Dig1;
pinesDigitos[1] = Dig2;
pinesDigitos[2] = Dig3;
pinesDigitos[3] = Dig4;
for (int i = 0; i < 4; i++) {
pinMode(pinesDigitos[i], OUTPUT);
digitalWrite(pinesDigitos[i], LOW); // apagado (ánodo común)
}
pinMode(Boton_1, INPUT_PULLUP);
pinMode(Boton_2, INPUT_PULLUP);
}
void apagarTodosLosSegmentos() {
for (int i = 0; i < 7; i++) {
digitalWrite(pinesSegmentos[i], HIGH); // Apagar (ánodo común)
}
}
void apagarTodosLosDigitos() {
for (int i = 0; i < 4; i++) {
digitalWrite(pinesDigitos[i], LOW); // Apagar (ánodo común)
}
}
void mostrarCaracterEnDigito(int digito, const bool caracter[7]) {
apagarTodosLosDigitos();
for (int i = 0; i < 7; i++) {
digitalWrite(pinesSegmentos[i], caracter[i] ? LOW : HIGH);
}
digitalWrite(pinesDigitos[digito], HIGH);
delay(2);
digitalWrite(pinesDigitos[digito], LOW);
}
void mostrarPalabraUnaVez() {
mostrarCaracterEnDigito(0, caracterGuion);
mostrarCaracterEnDigito(1, caracterL);
mostrarCaracterEnDigito(2, caracterJ);
mostrarCaracterEnDigito(3, caracterL);
}
void mostrarPalabraPorTiempo(int milisegundos) {
int ciclos = milisegundos / 40;
for (int i = 0; i < ciclos; i++) {
mostrarPalabraUnaVez();
}
}
void mostrarSegmento(int i) {
apagarTodosLosSegmentos();
apagarTodosLosDigitos();
digitalWrite(secuencia_segmentos[i], LOW);
digitalWrite(secuencia_digitos[i], HIGH);
}
void setup() {
configurarPines();
delay(1000);
// Parpadeo de "-LJL" 3 veces
for (int i = 0; i < 3; i++) {
mostrarPalabraPorTiempo(1500);
apagarTodosLosSegmentos();
apagarTodosLosDigitos();
delay(500);
}
// Iniciar con la secuencia personalizada
mostrarSegmento(indice);
}
void loop() {
int nuevo_boton1 = digitalRead(Boton_1);
int nuevo_boton2 = digitalRead(Boton_2);
unsigned long ahora = millis();
if (ahora - ultimoTiempoRebote > tiempoRebote) {
if (nuevo_boton1 == LOW && anterior_boton1 == HIGH) {
if (indice < 11) {
indice++;
mostrarSegmento(indice);
}
ultimoTiempoRebote = ahora;
}
if (nuevo_boton2 == LOW && anterior_boton2 == HIGH) {
if (indice > 0) {
indice--;
mostrarSegmento(indice);
}
ultimoTiempoRebote = ahora;
}
}
anterior_boton1 = nuevo_boton1;
anterior_boton2 = nuevo_boton2;
}