Neste sketch faremos uma demonstração básica de um circuito com um Display 7 segmentos - Anodo comum, a ideia é mostrar um contador da 0 à 10 e intercalar com o ponto DP, a partir deste ponto é só usar a criatividade para fazer a lógica inversa para um contador regressivo, disparar algo quando o contador chegar a 0, etc.
CURIOSIDADE
Ele funciona com lógica invertida: o pino comum é ligado ao positivo (VCC), e para acender um segmento, você deve enviar um nível lógico baixo (0V) para o pino correspondente, enquanto o cátodo comum exige nível alto (5V) para ligar. Ele é ótimo para relógios e contadores, sendo uma forma econômica e legível de mostrar números, mas a inversão exige atenção ao programar.
// =====================================
// DISPLAY 7 SEGMENTOS - ÂNODO COMUM
// =====================================
// Pinos dos segmentos A a G
const int segmentos[7] = {2, 3, 4, 5, 6, 7, 8};
// Pino do ponto decimal (DP)
const int pinoDP = 9;
// Matriz de números
// 0 = LIGADO | 1 = DESLIGADO (ânodo comum)
byte numeros[11][7] = {
{0,0,0,0,0,0,1}, // 0
{1,0,0,1,1,1,1}, // 1
{0,0,1,0,0,1,0}, // 2
{0,0,0,0,1,1,0}, // 3
{1,0,0,1,1,0,0}, // 4
{0,1,0,0,1,0,0}, // 5
{0,1,0,0,0,0,0}, // 6
{0,0,0,1,1,1,1}, // 7
{0,0,0,0,0,0,0}, // 8
{0,0,0,1,1,0,0}, // 9
{1,1,1,1,1,1,1} // display apagado
};
void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segmentos[i], OUTPUT);
digitalWrite(segmentos[i], HIGH);
}
pinMode(pinoDP, OUTPUT);
digitalWrite(pinoDP, HIGH);
}
void loop() {
for (int n = 0; n <= 9; n++) {
// Apaga display
mostrarNumero(10);
// Acende ponto IMEDIATAMENTE
digitalWrite(pinoDP, LOW);
delay(300);
// Apaga ponto e mostra número IMEDIATAMENTE
digitalWrite(pinoDP, HIGH);
mostrarNumero(n);
delay(1000);
}
}
// ===============================
// FUNÇÃO PARA MOSTRAR NÚMEROS
// ===============================
void mostrarNumero(int n) {
for (int i = 0; i < 7; i++) {
digitalWrite(segmentos[i], numeros[n][i]);
}
}