Ajuda construção código

Boas,
Tenho um código feito para deteção de cães a ladrar e por sua vez ativar um relé, ao que parece está a trabalhar bem, mas preciso melhorar algo.
O microfone está sempre a fazer uma leitura de valor máximo e mínimo e criei uma variável "delta", diferença dos 2. (esse valor delta é ajustavel por potênciometro)
Caso delta seja maior que um determinado valor soma 1 num contador e quando chega a 30 e ativa relé.
O QUE É QUE PRETENDO? por exemplo se houver 1, 2 ou 3 picos apenas que esse contador faça RESET após 30s. Validando assim que eles estão mesmo a ladrar.
Podem Ajudar???

const int microphone = A0; //Ligação do pino AO do módulo microfone (CONST variável apenas de leitura)
int led = 10; //Ligação Led para sinalização de relé ligado (CONST variável apenas de leitura)
int relay = 11; // Ligação para fazer o set ao relé (CONST variável apenas de leitura)
int count = 0; //Contador para ciclos de latido
const int potenciometro = A1; //Ligação para o potênciometro 10K (CONST variável apenas de leitura)
int valorpot; //Variável para guardar valor do potênciometro 

void setup() {
  Serial.begin(9600); //Inicia Porta Serie com comunicação a uma velocidade de 9600 bps
  pinMode(led, OUTPUT); //Define o pino 10 com nome led como OUTPUT
  pinMode(relay, OUTPUT); //Define o pino 11 com o nome relay como OUTPUT
  digitalWrite(led, LOW); //Desliga o Led
  digitalWrite(relay, HIGH); //Seta o relé desligado inicio ciclo
  pinMode(potenciometro, INPUT); //Define o pino A5 com o nome potenciometro como INPUT
}

void loop() {
  int mn = 1024; //variável que ira guardar o valor mínimo lido pela entrada analógica do módulo microfone A0, o seu valor inicial é 1024
  int mx = 0; //variável que ira guardar o valor máximo lido pela entrada analógica do módulo microfone A0, o seu valor inicial é 0

  for (int i = 0; i < 100; ++i) {
    int val = analogRead(microphone); //Lê valor entrada analógica e atribui a “val”
    mn = min(mn, val); //Grava valor mínimo da entrada analógica
    mx = max(mx, val); //Grava valor máximo da entrada analógica
  }
  int delta = mx - mn; //Cálcula a diferênca entre valor máximo e mínimo

  int valorpot = analogRead(potenciometro); 
  int valorpot_mapeado = map(valorpot, 0, 1023, 0, 100);
  

  if (delta > valorpot_mapeado || delta > 200) { 
    count++;    
    if (count >= 30) {
     digitalWrite(led, HIGH); //Liga o led
     digitalWrite(relay, LOW); //Liga o relé
     delay (5000); //Tempo em que o relé está ativo, o programa estará também em STOP neste ponto 
     count = 0; //Reseta o contador
    }
  }

  else {
    digitalWrite(led, LOW); //Desliga o Led
    digitalWrite(relay, HIGH); //Desliga o relé
  }

Se este seu novo tópico for o mesmo assunto deste:

junte tudo em um só.

Fazendo vários tópicos sobre o mesmo assunto voce só duplica os esforços de quem ajuda e é
contra as normas do forum.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.