Temporizador com KY-038

Saudações, estou tentando criar uma temporização com sensor ky-038 e ESP32 e a lógica é: Se a leitura analógica se mantiver abaixo de 1000 durante 2 segundos, uma tarefa é executada.
Tentei inserir o seguinte código, mas o programa não espera o tempo de 2s para executar a tarefa

int analog = 34; // O pino 34 contem o sensor de som
unsigned long ultimo_evento = 0;
int ledpin = 12;

void setup() {
pinMode(analog, INPUT); // Define o pino 34 como entrada
pinMode(ledpin, OUTPUT);

  Serial.begin(115200);
}

void loop() {
int valor_A0 = analogRead(analog);// A variavel  valor_A0 recebe a leitura digital do pino 34 onde o sensor esta
  Serial.print("\nSaida A0: "); // Imprime no serial monitor "\nSaida A0: "
  Serial.print(valor_A0); // Imprime no serial monitor o valor que a variável valor_A0 recebeu

if (valor_A0 < 1000) {
    if ((millis() - ultimo_evento) > 2000) {
      digitalWrite(ledpin, HIGH);
      delay(2000);
      digitalWrite(ledpin, LOW);
    }
    ultimo_evento = millis();
  }
}

Olá! Fiz aqui uma gambiarra que funcionou, criando uma flag. Veja se atende:

int analog = 34; // O pino 34 contem o sensor de som
unsigned long ultimo_evento = 0;
int ledpin = 12;
int flag = 0;

void setup() {
pinMode(analog, INPUT); // Define o pino 34 como entrada
pinMode(ledpin, OUTPUT);

  Serial.begin(115200);
}

void loop() {
int valor_A0 = analogRead(analog);// A variavel  valor_A0 recebe a leitura digital do pino 34 onde o sensor esta
  Serial.print("\nSaida A0: "); // Imprime no serial monitor "\nSaida A0: "
  Serial.print(valor_A0); // Imprime no serial monitor o valor que a variável valor_A0 recebeu

if (valor_A0 < 1000) {
   flag = 1;
}
else {
  flag = 0;
  ultimo_evento = millis();
}

if (((millis() - ultimo_evento) > 2000) && flag==1)
    {
      digitalWrite(ledpin, HIGH);
      delay(2000);
      digitalWrite(ledpin, LOW);
      flag=0;
      ultimo_evento = millis();
    }
}

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