#include <Keypad.h>
#include <LiquidCrystal.h>
// ================== LCD ==================
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
// ================== TECLADO MATRICIAL ==================
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, A0, A1};
byte colPins[COLS] = {A2, A3, A4, A5};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// ================== SAÍDAS ==================
int ledPin = 12;
int buzzerPin = 11;
// ================== SETUP ==================
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
lcd.begin(16, 2);
lcd.print("Sistema Pronto");
delay(1500);
lcd.clear();
lcd.print("1:Ligar 2:Off");
lcd.setCursor(0,1);
lcd.print("3:Tempo");
}
// ================== LOOP ==================
void loop() {
char tecla = keypad.getKey();
if (tecla) {
// -------- LIGAR LED --------
if (tecla == '1') {
digitalWrite(ledPin, HIGH);
lcd.clear();
lcd.print("LED LIGADO");
delay(1000);
}
// -------- DESLIGAR LED --------
if (tecla == '2') {
digitalWrite(ledPin, LOW);
lcd.clear();
lcd.print("LED DESLIGADO");
delay(1000);
}
// -------- TEMPORIZADOR --------
if (tecla == '3') {
lcd.clear();
lcd.print("Tempo (seg):");
lcd.setCursor(0,1);
String tempoStr = "";
// Leitura do tempo
while (true) {
char t = keypad.getKey();
if (t) {
if (t == '#') break;
tempoStr += t;
lcd.print(t);
}
}
int tempo = tempoStr.toInt();
digitalWrite(ledPin, HIGH);
// Contagem regressiva
for (int i = tempo; i > 0; i--) {
lcd.clear();
lcd.print("LED LIGADO");
lcd.setCursor(0,1);
lcd.print("Tempo: ");
lcd.print(i);
lcd.print("s");
// BUZZER nos últimos 5 segundos
if (i <= 5) {
tone(buzzerPin, 1000); // 1 kHz
delay(200);
noTone(buzzerPin);
}
delay(800); // completa 1 segundo
}
digitalWrite(ledPin, LOW);
lcd.clear();
lcd.print("TEMPO ESGOTADO");
delay(1500);
}
// -------- MENU --------
lcd.clear();
lcd.print("1:Ligar 2:Off");
lcd.setCursor(0,1);
lcd.print("3:Tempo");
}
}