preciso de um ajuda no programa !

Dúvidas, críticas ou sugestões sobre o Fórum FernandoK.
Para demais questões utilize o fórum correto.
Jeferson Tamono
Novato
Mensagens: 1
Registrado em: 19/Abr/2019, 16:43

preciso de um ajuda no programa !

Mensagem por Jeferson Tamono » 19/Abr/2019, 17:03

estou tentando faze um loop, no swit mais n estou conseguindo.

**n consegui mandar uma foto do meu projeto. mais estou usando um sensor de som , para acender os LEDS conforme a quantidades de palmas
_________________________________________________________________________
#define pinLedG 5
#define pinLedGII 6
#define pinLedB 7
#define pinLedBII 8
#define pinLedW 9
#define pinLedWII 10
#define pinSom 4
#define tempoMaximoDeUmaPalma 150 //milisegundos
#define tempoMaximoEntrePalmas 500 //milisegundos

int espera = 100;
int Pinos[] = {5, 6, 7, 8, 9, 10};
int ContaPino = 6;

int contaPalmas = 0;
int palmas = 0;
long tempoEspera = 0;
long tempoEsperaEntrePalmas = 0;

void detectarPalmas();
void tempoPalmas();
void executarAcao();

void setup() {
Serial.begin(9600);
Serial.println("foit");
pinMode(pinSom, INPUT);
pinMode(pinLedG, OUTPUT);
pinMode(pinLedGII, OUTPUT);
pinMode(pinLedB, OUTPUT);
pinMode(pinLedBII, OUTPUT);
pinMode(pinLedW, OUTPUT);
pinMode(pinLedWII, OUTPUT);
for (int PinoArdu = 0; PinoArdu < ContaPino; PinoArdu++) {
pinMode(Pinos[PinoArdu], OUTPUT);
}
}
void loop() {

detectarPalmas();

tempoPalmas();
}

void detectarPalmas()
{
//verifica o estado do sensor de som (ele fica normalmente com a porta ligada. Quando ouver uma palma, ele desliga momentaneamente a porta)
int sensorSom = digitalRead(pinSom);
//se o sensor detectou palmas
if (sensorSom == LOW) {
//espera um tempo para nao detectar a mesma palma mais de uma vez
if (tempoEspera == 0) {
tempoEspera = tempoEsperaEntrePalmas = millis();
contaPalmas++;
} else if ((millis() - tempoEspera) >= tempoMaximoDeUmaPalma) {
tempoEspera = 0;
}
}
}

void tempoPalmas()
{
//caso exceda o tempo maximo entre palmas, zera o contador de palmas
if ( (contaPalmas != 0) && ((millis() - tempoEsperaEntrePalmas) > 500) ) {

executarAcao();
//palmas = 0;
contaPalmas = 0;
tempoEsperaEntrePalmas = millis();
}
}

void executarAcao()
{


switch (contaPalmas) {
case 2:
Serial.println("Led 11 RESPONDIDO");
digitalWrite(pinLedG, !digitalRead(pinLedG));
digitalWrite(pinLedGII, !digitalRead(pinLedGII));
digitalWrite(pinLedB, !digitalRead(pinLedB));
digitalWrite(pinLedBII, !digitalRead(pinLedBII));
digitalWrite(pinLedW, !digitalRead(pinLedW));
digitalWrite(pinLedWII, !digitalRead(pinLedWII));
palmas = 0;
break;
case 3:
Serial.println("Led 10 RESPONDIDO");
// Pisca Leds na ordem crescente
for (int PinoArdu = 0; PinoArdu < ContaPino; PinoArdu++) {
// liga Led
digitalWrite(Pinos[PinoArdu], HIGH);
delay(espera);
// desliga Led
digitalWrite(Pinos[PinoArdu], LOW);
}
// Pisca Leds em ordem descrescente
for (int PinoArdu = ContaPino - 1; PinoArdu >= 0; PinoArdu--) {
// liga Led
digitalWrite(Pinos[PinoArdu], HIGH);
delay(espera);
// desliga Led
digitalWrite(Pinos[PinoArdu], LOW);
}
break;

}
}
_________________________________________________________________________
este e o programa, no case 3, estou tentando fazer ele só para de fazer o for , quando eu bater a mesma quantias de palmas q são 3 vezes,
mais o programa só e efetuado uma vez, como eu fala para, melhorá-lo.

Responder