// Pinos do display de 7 segmentos (A-G)
const int segments[] = {2, 3, 4, 5, 6, 7, 8}; // Pinos conectados aos segmentos A, B, C, D, E, F, G
// Pinos dos LEDs e buzzer
const int led1 = 10;
const int led2 = 11;
const int buzzer = 12;
// Pino do sensor de luz (LDR)
const int ldrPin = A0;
// Tabela para números no display de 7 segmentos (cátodo comum)
const byte numbers[10][7] = {
{ 1, 1, 1, 1, 1, 1, 0 }, // 0
{ 0, 1, 1, 0, 0, 0, 0 }, // 1
{ 1, 1, 0, 1, 1, 0, 1 }, // 2
{ 1, 1, 1, 1, 0, 0, 1 }, // 3
{ 0, 1, 1, 0, 0, 1, 1 }, // 4
{ 1, 0, 1, 1, 0, 1, 1 }, // 5
{ 1, 0, 1, 1, 1, 1, 1 }, // 6
{ 1, 1, 1, 0, 0, 0, 0 }, // 7
{ 1, 1, 1, 1, 1, 1, 1 }, // 8
{ 1, 1, 1, 0, 0, 1, 1 } // 9
};
void setup() {
// Configuração dos pinos do display como saída
for (int i = 0; i < 7; i++) {
pinMode(segments[i], OUTPUT);
}
// Configuração dos LEDs e do buzzer como saída
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(buzzer, OUTPUT);
}
void loop() {
// Lê o valor do sensor de luz
int lightValue = analogRead(ldrPin);
// Mapeia o valor para um número de 0 a 9
int lightLevel = map(lightValue, 0, 1023, 9, -1);
// Mostra o número no display de 7 segmentos
displayNumber(lightLevel);
// Ativa o alerta somente se a luz estiver muito baixa (menor que 3)
if (lightLevel < 3) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(buzzer, HIGH);
} else {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(buzzer, LOW);
}
delay(100); // Pausa para estabilidade
}
// Função para mostrar um número no display de 7 segmentos
void displayNumber(int num) {
for (int i = 0; i < 7; i++) {
digitalWrite(segments[i], !numbers[num][i]); // Para displays de cátodo comum
}
}