Olá amigos, 

Sou novo aqui, comecei recentemente a utilizar arduino para um projeto, mas tem algo que quero fazer ainda, já tentei de várias formas e não consigo e gostaria da ajuda de vcs pra isso.

Quero que um buzzer ligue por causa de dois potenciômetros, quando um deles estiverem registrando a leitura no pino analógico maior que 500 por um tempo de 2,5 segundos, começa a tocar de forma alternada a cada 1 segundo, até que o pino do potenciômetro registre menos de 500. Caso, o pino analogico registre 500 por menos de 2,5 segundos, nada acontece. Mas não consigo fazer isso.

Já tentei com as funções delay, millis(), atachInterrupt, etc.

Neste momento a programação está assim:

int buzzer = 2;
int sensorEsquerda = A0;
int sensorDireita = A1;

unsigned int valorPotDireita;
unsigned int valorPotEsquerda;

int frequencia = 500;

void setup() {

  pinMode (buzzer, OUTPUT);
  pinMode (sensorEsquerda, INPUT);
  pinMode (sensorDireita, INPUT);

  digitalWrite (buzzer, LOW);
}

void loop (){

valorPotDireita = analogRead(sensorDireita);
Serial.println(valorPotDireita);
  if (valorPotDireita > 500){
       delay (2500);
       tone(buzzer, frequencia);
       delay (1000);
       digitalWrite (buzzer, HIGH);
  }

  else {
       digitalWrite (buzzer, LOW);
       noTone (buzzer);
   }

valorPotEsquerda = analogRead(sensorEsquerda);
Serial.println(valorPotEsquerda);
  if (valorPotEsquerda > 500){
      delay (2500);
      tone(buzzer, frequencia);
      delay (1000);
      digitalWrite (buzzer, HIGH);
  }

  else {
      digitalWrite (buzzer, LOW);
      noTone (buzzer);
  }
}

Poderiam me ajudar a concertar isso? Muito obrigado pela atenção.

Exibições: 395

Respostas a este tópico

Olá Gustavo

Não testei, mas acho que a dica abaixo possa funcionar

if (valorPotDireita > 500 && (tempoMillis >= 2500)){
       tone(buzzer, frequencia);
       delay (1000);
       digitalWrite (buzzer, HIGH); 
  }

No if está testando se as duas condições são válidas para entrar e executar o buzzer.

Terá que criar uma rotina que ao sair o tempoMillis  seja zerado (tempoMillis = 0;)

Gustavo, um dos problemas é que depois do deley(2500) vc não verifica se o valor do pot continua maior que 500.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço