#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define SWITCH_PIN1 2 // Mute
#define SWITCH_PIN2 4 // Seletor A (lado 1 do switch 3 pinos)
#define SWITCH_PIN3 5 // Seletor B (lado 2 do switch 3 pinos)
#define POT_PIN A0
#define led1 10 // LED fone A
#define led2 9 // LED fone B
int lastVolume = -1;
bool lastMuteState = false;
bool lastEstado = false; // Último estado do seletor
void setup() {
Serial.begin(9600);
pinMode(POT_PIN, INPUT);
pinMode(SWITCH_PIN1, INPUT_PULLUP); // botão mute
pinMode(SWITCH_PIN2, INPUT_PULLUP); // seletor lado A
pinMode(SWITCH_PIN3, INPUT_PULLUP); // seletor lado B
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
lcd.init();
lcd.backlight();
Serial.println("Simulador de Controle de Volume iniciado!");
}
void loop() {
int potValue = analogRead(POT_PIN);
int volume = map(potValue, 0, 1023, 0, 100);
bool muteState = digitalRead(SWITCH_PIN1) == HIGH; // LOW = ligado
bool posA = digitalRead(SWITCH_PIN2) == LOW; // switch lado A
bool posB = digitalRead(SWITCH_PIN3) == LOW; // switch lado B
bool seletor = posB;
// posA = fone A
// posB = fone B
// 🔇 MUTE
if (muteState != lastMuteState) {
lcd.clear();
if (muteState) {
lcd.setCursor(0, 0);
lcd.print("MUTADO");
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
} else {
lcd.setCursor(0, 0);
lcd.print("Som ativo");
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Volume:");
lcd.setCursor(0, 1);
lcd.print(volume);
lcd.print("%");
}
lastMuteState = muteState;
}
// 🎧 Seletor de fone (A / B), somente se som não estiver mutado
if (seletor != lastEstado && !muteState) {
lcd.clear();
if (seletor) {
lcd.setCursor(0, 0);
lcd.print("Fone B");
Serial.println("Fone B Selecionado");
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
} else {
lcd.setCursor(0, 0);
lcd.print("Fone A");
Serial.println("Fone A Selecionado");
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
}
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Volume:");
lcd.setCursor(0, 1);
lcd.print(volume);
lcd.print("%");
lastEstado = seletor;
}
// 🔊 Atualiza volume (se não estiver mutado)
if (!muteState) {
if (abs(volume - lastVolume) > 3) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Volume:");
lcd.setCursor(0, 1);
lcd.print(volume);
lcd.print("%");
lastVolume = volume;
}
}
delay(100);
}