const int pinRed = 9;
const int pinGreen = 10;
const int pinBlue = 11;
const int buttonPin = 2;
const int buzzerPin = 3;
int currentColor = 1; // 1 = vermelho, 2 = verde, 3 = azul
bool ledOn = true;
unsigned long buttonPressTime = 0;
bool buttonPressed = false;
bool longPressHandled = false;
const unsigned long debounceDelay = 50; // debounce de 50ms
unsigned long lastDebounceTime = 0;
void updateLed();
void setup() {
pinMode(pinRed, OUTPUT);
pinMode(pinGreen, OUTPUT);
pinMode(pinBlue, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600); // inicializa comunicação serial
updateLed();
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW && !buttonPressed) {
if (millis() - lastDebounceTime > debounceDelay) {
buttonPressed = true;
buttonPressTime = millis();
longPressHandled = false;
lastDebounceTime = millis();
}
}
if (buttonState == LOW && buttonPressed) {
if (!longPressHandled && millis() - buttonPressTime > 1000) { // clique longo 1s
ledOn = !ledOn;
updateLed();
longPressHandled = true;
}
}
if (buttonState == HIGH && buttonPressed) {
if (millis() - lastDebounceTime > debounceDelay) {
buttonPressed = false;
lastDebounceTime = millis();
if (!longPressHandled && ledOn) {
currentColor++;
if (currentColor > 7) currentColor = 1;
updateLed();
}
}
}
}
void updateLed() {
if (!ledOn) {
analogWrite(pinRed, 0);
analogWrite(pinGreen, 0);
analogWrite(pinBlue, 0);
noTone(buzzerPin);
Serial.println("LED desligado");
return;
}
switch (currentColor) {
case 1: // vermelho
analogWrite(pinRed, 255);
analogWrite(pinGreen, 0);
analogWrite(pinBlue, 0);
tone(buzzerPin, 500); // som vermelho
Serial.println("Problema Mecânico");
break;
case 2: // verde
analogWrite(pinRed, 0);
analogWrite(pinGreen, 255);
analogWrite(pinBlue, 0);
tone(buzzerPin, 1000); // som verde
Serial.println("Documentação Pendente");
break;
case 3: // azul
analogWrite(pinRed, 0);
analogWrite(pinGreen, 0);
analogWrite(pinBlue, 255);
tone(buzzerPin, 1500); // som azul
Serial.println("Problema Elétrico");
break;
case 4: // amarelo
analogWrite(pinRed, 255);
analogWrite(pinGreen, 255);
analogWrite(pinBlue, 0);
tone(buzzerPin, 2000); // som amarelo
Serial.println("Problema Estético");
break;
case 5: // laranja
analogWrite(pinRed, 255);
analogWrite(pinGreen, 50);
analogWrite(pinBlue, 0);
tone(buzzerPin, 2500); // som laranja
Serial.println("Problema Segurança");
break;
case 6: // rosa
analogWrite(pinRed, 150);
analogWrite(pinGreen, 0);
analogWrite(pinBlue, 0);
tone(buzzerPin, 3000); // som rosa
Serial.println("Problemas Múltiplos");
break;
case 7: // roxo
analogWrite(pinRed, 130);
analogWrite(pinGreen, 0);
analogWrite(pinBlue, 255);
tone(buzzerPin, 3500); // som roxo
Serial.println("Motocicleta Pronta para Uso");
break;
}
}