Boa noite a todos, estou fazendo um projeto com arduino e um receptor infravermelho. A idéia do projeto é fazer com que um motor gire quando o botão especifico no controle for pressionado.

  Só que tem um problema: o objetivo seria que o motor girasse apenas quando o botão for pressionado. Tipo assim: Enquanto eu estiver segurando o botão, o motor gira, e quando não aperto o botão, o motor desligar. O que está acontecendo é o seguinte: O botão é pressionado, e o valor é lido pelo receptor, e o motor liga, porém ele permanece LIGADO após a leitura. Como fazer para que ele só fique ligado enquanto o botão for pressionado?

O código que estou usando é o seguinte :

#include <IRremote.h>
#include <IRremoteInt.h>

int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
int motorPin = 3;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(motorPin,OUTPUT);
}

void loop()
{
if (irrecv.decode(&results))
{
long int decCode = results.value;
switch (results.value)
{
case 691090:
digitalWrite(motorPin,HIGH);
break;
case 2704:
digitalWrite(motorPin,LOW);
break;
}
irrecv.resume();
}
}

Exibições: 1475

Responder esta

Respostas a este tópico

Tenta colocar um laço "while"

Exemplo:

 

while(value == 691090) {

digitalWrite(motorPin, HIGH);

break;

}

while(value == 2704) {

digitalWrite(motorPin,LOW);

break;

}

Estou com uma dúvida: Quando receber o sinal = 691090, coloca o pino do motor em High e,quando receber o sinal = 2704, coloca o pino em low. E quando não recebe nenhum deles ou outro sinal diferente?

Não Pude testar aqui no trabalho. Testa ai e diz se funciona.

Pecklauros, obrigado pela resposta. Esclarecendo sua dúvida: Quando o valor lido for diferente de 691090, ou quando não estiver sendo lido nenhum valor, o motor deve estar em LOW. Estando em HIGH apenas enquanto recebe o sinal 691090. 

Assim que chegar em casa testarei o seu exemplo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço