Paso 2: El código
* //////////////////////////////////////////////////
* la salida de sentido //making del sensor PIR de Parallax
* //////////////////////////////////////////////////
*
* Interruptores LED según el estado de los sensores de salida pin.
* Determina el principio y el final de secuencias de movimiento continuo.
*
* Kristian Gohlke / krigo (_) web.de / http://filformat.net
* 3. Septiembre de 2006
*
* kr1 (hendidura) 2006
* lanzado bajo una creative commons "Reconocimiento-NoComercial-CompartirIgual 2.0" licencia
* http://creativecommons.org/licenses/by-nc-sa/2.0/de/
*
*
* El Sensor PIR de Parallax es un módulo de sensor de movimiento infrarrojo digital fácil de usar.
* (http://www.parallax.com/detail.asp?product_id=555-28027)
*
* El pin de salida sensor´s va al alta si el movimiento está presente.
* Sin embargo, incluso si hay movimiento va a la baja de vez en cuando,
* que no podría dar la impresión de movimiento está presente.
* Este programa se ocupa de este problema haciendo caso omiso de baja-fases más cortas que un momento dado,
* Suponiendo movimiento continuo está presente durante estas fases.
*
*/
/////////////////////////////
VARS
#include
#include
#include "util.h"
#include "wave.h"
Tarjeta de AF_Wave;
Archivo f;
Wavefile onda;
int calibrationTime = 30; el tiempo nos da el sensor a calibrar a sí mismo (10-60 segundos según la hoja de datos)
tiempo unsigned int lowIn; el momento cuando el sensor produce un impulso de baja
pausa larga unsigned int = 5000; la cantidad de milisegundos que el sensor tiene que ser baja antes de que asuma todo el movimiento se ha detenido
Boolean lockLow = true;
takeLowTime Boolean;
pirPin int = 6; el pin digital conectado a la salida del sensor PIR
int ledPin = 13;
/////////////////////////////
PROGRAMA DE INSTALACIÓN
void setup() {}
Serial.Begin(9600);
pinMode (pirPin, entrada);
pinMode (ledPin, salida);
pinMode (2, salida);
pinMode (3, salida);
pinMode (4, salida);
pinMode (5, salida);
digitalWrite (pirPin, LOW);
dar el sensor de tiempo para calibrar
Serial.Print ("calibración sensor");
para (int i = 0; i < calibrationTime; i ++) {}
Serial.Print(".");
Delay(1000);
}
Serial.println ("hecho");
Serial.println ("SENSOR activo");
Delay(50);
Si (! {card.init_card())}
retorno;
}
Si (! {card.open_partition())}
retorno;
}
Si (! {card.open_filesys())}
retorno;
}
Si (! {card.open_rootdir())}
retorno;
}
}
////////////////////////////
LAZO
void loop() {}
if(digitalRead(pirPin) == HIGH) {}
digitalWrite (ledPin, HIGH); el led visualiza el estado de pin de salida de sensores
{if(lockLow)}
lockLow = false; Asegúrese de que esperamos una transición a la baja antes de cualquier salida más
Serial.println("---");
Serial.Print ("movimiento detectado en");
Serial.Print(Millis()/1000);
Serial.println ("sec");
Delay(50);
}
takeLowTime = true;
}
if(digitalRead(pirPin) == LOW) {}
digitalWrite (ledPin, LOW); el led visualiza el estado de pin de salida de sensores
{if(takeLowTime)}
lowIn = millis(); ahorrar el tiempo de la transición de alto a bajo
takeLowTime = false; Asegúrese de que esto sólo se hace en el inicio de una fase
}
Si (! lockLow & & millis() - lowIn > pausa) {//if el sensor es baja por más de la pausa dada, suponemos que no hay movimiento más va a pasar
lockLow = true; se asegura de que este bloque de código sólo se ejecuta otra vez después de que se ha detectado una nueva secuencia de movimiento
Serial.Print ("movimiento terminada en"); salida
Serial.Print((Millis() - pausa) / 1000);
Serial.println ("sec");
Delay(50);
}
Switch(digitalRead(pirPin) == HIGH) {}
caso 1:
playcomplete("03SURF~1.wav");
}
}}
void playcomplete(char *name) {}
playfile(Name);
mientras (wave.isplaying);
Card.close_file(f);
}
void playfile(char *name) {}
detener cualquier archivo ya jugar
Si (wave.isplaying) {}
Wave.STOP();
Card.close_file(f);
}
f = card.open_file(name);
Si (f & & {wave.create(f))}
Wave.Play();
}
}