// Definição de pinos
const int sensorSom = 2; // Pino do sensor de som (digital)
const int led1 = 3; // LED 1 palma
const int led2 = 4; // LED 2 palmas
const int led3 = 12; // LED 3 palmas
const int led4 = 13; // LED 4 palmas
// Variáveis de controle
int palmas = 0;
unsigned long tempoUltimaPalma = 0;
const unsigned long intervalo = 1500; // tempo limite entre palmas (ms)
void setup() {
pinMode(sensorSom, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
Serial.begin(9600);
//pinos dos motores
pinMode(5,OUTPUT);//direita
pinMode(6,OUTPUT);
pinMode(9,OUTPUT);//esquerda
pinMode(10,OUTPUT);
}
void loop() {
int somDetectado = digitalRead(sensorSom);
// Se o sensor detectar uma "palma"
if (somDetectado == HIGH) {
if (millis() - tempoUltimaPalma > 100) { // debounce simples
palmas++;
tempoUltimaPalma = millis();
Serial.print("Palmas detectadas: ");
Serial.println(palmas);
}
}
// Se passou tempo demais desde a última palma -> executar ação
if (millis() - tempoUltimaPalma > intervalo && palmas > 0) {
// Apaga todos os LEDs antes
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
parar();
// Aciona conforme a quantidade de palmas
switch (palmas) {
case 1:
digitalWrite(led1, HIGH);
direita();
delay(200);
digitalWrite(led1, LOW);
parar();
break;
case 2:
digitalWrite(led2, HIGH);
frente();
delay(1000);
digitalWrite(led2, 0);
parar();
break;
case 3:
digitalWrite(led3, HIGH);
esquerda();
delay(200);
digitalWrite(led3, 0);
parar();
break;
case 4:
digitalWrite(led4, HIGH);
re();
delay(1000);
digitalWrite(led4, 0);
parar();
break;
default:
Serial.println("Mais de 4 palmas ignoradas");
break;
}
// Reseta contador
palmas = 0;
}
}
void re(){
analogWrite(5,255);
analogWrite(6,0);
analogWrite(9,0);
analogWrite(10,255);
}
void parar(){
analogWrite(5,0);
analogWrite(6,0);
analogWrite(9,0);
analogWrite(10,0);
}
void esquerda(){
analogWrite(5,0);
analogWrite(6,180);
analogWrite(9,0);
analogWrite(10,0);
}
void direita(){
analogWrite(5,0);
analogWrite(6,0);
analogWrite(9,180);
analogWrite(10,0);
}
void frente(){
analogWrite(5,0);
analogWrite(6,255-15);
analogWrite(9,255);
analogWrite(10,0);
}