Tengo un arduino Mega2560 y estoy tratando de controlar el encendido y apagado del sensor por el mado a distancia, pero solo me deja activarlo, y se empieza a ejecutar ,pero no he podido lograr desactivarlo con algun o con el mismo boton. Ya utilice una recomedacion pero sigue igual. Gracias y disculpen las molestias.
#include <IRremote.h>
#define trigPin 9
#define echoPin 10
const int RECV_PIN = 7;
const int ledPinR = 4 ;
const int ledPinY = 5 ;
const int buzzer = 11;
bool alarmaActivada = false;
long duration;
int distance;
//const int ledPinG = 6 ;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long key_value = 0;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
pinMode(ledPinR, OUTPUT);
pinMode(ledPinY, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzer, OUTPUT);
}
void loop(){
// Lees el resultado del decoder.
if (irrecv.decode(&results)) {
if (results.value == 0xFFC23D) {
// Activamos/Desactivamos la alarma.
if ( alarmaActivada==false ) alarmaActivada=true;
else alarmaActivada=false;
}
}
if ( alarmaActivada ) {// a partir de aqui el se empieza a ejecutar sin parar y no me lee si aprieto otro boton
digitalWrite(trigPin, LOW);
delay(90);
// Trigger the sensor by setting the trigPin high for 10 microseconds:
digitalWrite(trigPin, HIGH);
delay(100);
digitalWrite(trigPin, LOW);
// Read the echoPin, pulseIn() returns the duration (length of the pulse) in microseconds:
duration = pulseIn(echoPin, HIGH);
// Calculo la distancia
distance= duration*0.034/2;
if (distance< 60){
alarma(buzzer);
parpadeoLed(ledPinR);
delay(10);
parpadeoLed(ledPinY);
//digitalWrite(ledPinY, LOW);
Serial.print("PELIGRO ");
digitalWrite(ledPinR, HIGH);
}
else{
//digitalWrite(ledPinR, LOW);
digitalWrite(ledPinY, HIGH);
digitalWrite(buzzer, LOW);
}
Serial.print("Alarma activa ");
Serial.print("distancia = ");
Serial.print(distance);
Serial.println(" cm");
}}
void alarma(int buzzer){
digitalWrite(buzzer, HIGH);
delay(10);
digitalWrite(buzzer, LOW);
delay(10);
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
delay(50);
digitalWrite(buzzer, HIGH);
delay(10);
digitalWrite(buzzer, LOW);
delay(10);
digitalWrite(buzzer, HIGH);
delay(30);
}
void parpadeoLed(int ledPinR){
digitalWrite(ledPinR, HIGH);
delay(10);
digitalWrite(ledPinR, LOW);
delay(10);
digitalWrite(ledPinR, HIGH);
delay(20);
digitalWrite(ledPinR, LOW);
delay(20);
digitalWrite(ledPinR, HIGH);
delay(20);
digitalWrite(ledPinR, LOW);
delay(20);
digitalWrite(ledPinR, HIGH);
delay(20);
digitalWrite(ledPinR, LOW);
delay(20);
digitalWrite(ledPinR, HIGH);
delay(20);
digitalWrite(ledPinR, LOW);
delay(20);
digitalWrite(ledPinR, HIGH);
delay(20);
digitalWrite(ledPinR, LOW);
delay(20);
digitalWrite(ledPinR, HIGH);
delay(20);
digitalWrite(ledPinR, LOW);
delay(20);
}