hola me gustaria que me ayudarais si es posible
tengo este codigo en arduino uno y su funcion es que cuando el sensor detecta movimiento se enciende el led y suena el altavoz
pero me dado cuenta que desconecto el sensor pir y cada 5 o 6 segundos se enciende el led y suena el altavoz que tengo que cambiar para que solo
funcione el led y altavoz cuando los detecte el sensor ?
el codigo no es mio ya lo aclaro para que no haya malos entendidos
salu2
int ledPin = 13; // choose the pin for the LED
int inputPin = 2; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status
int pinSpeaker = 10; //Set up a speaker on a PWM pin (digital 9, 10, or 11)
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
pinMode(pinSpeaker, OUTPUT);
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
playTone(300, 160);
delay(150);
// playTone(300, 120);
// delay(150);
if (pirState == LOW) {
// we have just turned on
Serial.println("Motion detected!");
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
playTone(0, 0);
delay(300);
if (pirState == HIGH){
// we have just turned off
Serial.println("Motion ended!");
// We only want to print on the output change, not state
pirState = LOW;
}
}
}
// duration in mSecs, frequency in hertz
void playTone(long duration, int freq) {
duration *= 1000;
int period = (1.0 / freq) * 1000000;
long elapsed_time = 0;
while (elapsed_time < duration) {
digitalWrite(pinSpeaker,HIGH);
delayMicroseconds(period / 2);
digitalWrite(pinSpeaker, LOW);
delayMicroseconds(period / 2);
elapsed_time += (period);
}
}
Hola creo que podrías simplificar el programa (lo malo que será un poco coñazo).
Es decir:
int ledPin = 13; // choose the pin for the LED
int inputPin = 2; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status
int pinSpeaker = 10; //Set up a speaker on a PWM pin (digital 9, 10, or 11)
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
pinMode(pinSpeaker, OUTPUT);
Serial.begin(9600);
}
void loop()
{
val = digitalRead(inputPin); // read input value
if (val == HIGH) // check if the input is HIGH
{
digitalWrite(ledPin, HIGH); // turn LED ON
playTone(300, 160);
Serial.println("Detectado movimiento!");
delay(150);
}
else
{
digitalWrite(ledPin, LOW); // turn LED OFF
}
}
// duration in mSecs, frequency in hertz
void playTone(long duration, int freq)
{
duration *= 1000;
int period = (1.0 / freq) * 1000000;
long elapsed_time = 0;
while (elapsed_time < duration)
{
digitalWrite(pinSpeaker,HIGH);
delayMicroseconds(period / 2);
digitalWrite(pinSpeaker, LOW);
delayMicroseconds(period / 2);
elapsed_time += (period);
}
}
hola pues el sensor lo e probado de varias maneras
desconectando gnd sigue activandose cada 5 segundos si desactivo out tambien cada 5 s
si desactivo los 5v del sensor no hace nada
pero yo creo que desactvando cualquier cable del sensor ya no tendria que hacer nada no ?
Bueno como no soy un experto, y nunca he utilizado ese sensor mejor que te resuelva la duda otra persona.
De todos modos te aconsejo que te leas este documento http://arduino.cc/es/Tutorial/DigitalPins
Si desconectas un sensor, arduino te va a dar cualquier valor en esa entrada. Si desconectas un sensor, tendrás que quitar del código esa entrada y modificar allí donde te hacía algo en función de la entrada.
Yo modificaría el código al revés, coges un código pequeño, lo compruebas, y lo vas haciendo crecer, añadiendo funcionalidad.