const int segPin[] = {4,5,18,19,21,22,23};
const int digPin[] = {27, 26, 25, 33};
// Pinagem dos botões
const int acrescenta_g = 15;
const int decrementa_y = 2;
// Variável para armazenar o número exibido
volatile int numero = 55;
void setup() {
// Configuração dos pinos de segmentação como saída
for (int i = 0; i < 7; i++) {
pinMode(segPin[i], OUTPUT);
}
// Configuração dos pinos de dígito como saída
for (int i = 0; i < 4; i++) {
pinMode(digPin[i], OUTPUT);
}
// Configuração dos pinos dos botões como entrada
pinMode(acrescenta_g, INPUT_PULLUP);
pinMode(decrementa_y, INPUT_PULLUP);
// Configuração das interrupções
attachInterrupt(digitalPinToInterrupt(acrescenta_g), incrementar, FALLING); //interrupção do incremento
attachInterrupt(digitalPinToInterrupt(decrementa_y), decrementar, FALLING); //interrupção do decremento
Serial.begin(9600);
}
void loop() {
// Loop para exibir cada dígito
for (int digit = 0; digit < 4; digit++) {
// Ativar o dígito atual
digitalWrite(digPin[digit], HIGH);
// Exibir o número no dígito atual
int digitoAtual = (numero / int(pow(10, 3 - digit))) % 10; //Obtém o dígito atual
displayNumber(digitoAtual, digit); //Função para escrever no display
//Serial.print("Digito: ");
//Serial.print(digit);
//Serial.print(" | Escrever: ");
//Serial.println(digitoAtual);
// Aguardar um curto período de tempo para criar a ilusão de todos os dígitos acesos
delay(10);
// Desativar o dígito atual
digitalWrite(digPin[digit], LOW);
}
}
// Função para exibir um número específico em um dígito
void displayNumber(int num, int digit) {
// Mapeamento dos segmentos para exibir números
const byte numbers[10] = {
B01000000, // 0
B01111001, // 1
B00100100, // 2
B00110000, // 3
B00011001, // 4
B00010010, // 5
B00000010, // 6
B01111000, // 7
B00000000, // 8
B00010000, // 9
};
// Configurar os segmentos com base no número a ser exibido
byte segments = numbers[num];
// Definir os segmentos apropriados
for (int segment = 0; segment < 7; segment++) {
digitalWrite(segPin[segment], bitRead(segments, segment));
}
for (int segment = 0; segment < 7; segment++) {
digitalWrite(segPin[segment], HIGH);
}
}
// Função para incrementar o número
void incrementar() {
if (numero < 9999) {
numero++;
Serial.println(numero);
}
}
// Função para decrementar o número
void decrementar() {
if (numero > 0) {
numero--;
Serial.println(numero);
}
}