Surfin ' fågel (Arduino stil) (2 / 4 steg)
Steg 2: Koden
* //////////////////////////////////////////////////
* //making känsla av Parallax PIR-sensorn produktion
* //////////////////////////////////////////////////
*
* Växlar en LED beroende på vilket av sensorerna produktionen stift.
* Anger början och slutet av kontinuerlig rörelsesekvenser.
*
* Kristian Gohlke / krigo (_) web.de / http://filformat.net
* 3. September 2006
*
* kr1 (kluven) 2006
* släppt under en licens creative commons "Attribution-NonCommercial-ShareAlike 2.0"
* http://creativecommons.org/licenses/by-nc-sa/2.0/de/
*
*
* Parallax PIR-sensorn är en lättanvänd digital infraröd rörelse Sensormodul.
* (http://www.parallax.com/detail.asp?product_id=555-28027)
*
* Det sensor´s produktionen stiftet går till hög om motion är närvarande.
* Även om motion finns det går dock till låg från tid till annan,
* som kan ge intryck av ingen motion är närvarande.
* Detta program behandlar denna fråga genom att ignorera låg-arrangerar gradvis kortare än en viss tid,
* under förutsättning att kontinuerlig rörelse är närvarande under dessa faser.
*
*/
/////////////////////////////
VARS
#include
#include
#include "util.h"
#include "wave.h"
AF_Wave kort;
Fil f;
Wavefile våg;
int calibrationTime = 30. den tid som vi ger sensorn för att kalibrera sig (10-60 SEK enligt databladet)
länge osignerade int lowIn; tiden när sensorn utgångar en låga impuls
länge osignerade int paus = 5000; mängden millisekunder sensorn har vara låg innan vi antar all rörelse har slutat
booleska lockLow = sant;
booleska takeLowTime;
int pirPin = 6; den digital pin ansluten till PIR-sensorns utgång
int ledPin = 13.
/////////////////////////////
SETUP
void setup() {
Serial.BEGIN(9600);
pinMode (pirPin, ingång);
pinMode (ledPin, produktionen);
pinMode (2, utgång);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
digitalWrite (pirPin, låg);
ge sensorn lite tid att kalibrera
Serial.Print ("kalibrera sensorn");
för (int jag = 0; jag < calibrationTime; i ++) {
Serial.Print(".");
Delay(1000);
}
Serial.println ("gjort");
Serial.println ("sensorn aktiv");
Delay(50);
om (! card.init_card()) {
hemkomst.
}
om (! card.open_partition()) {
hemkomst.
}
om (! card.open_filesys()) {
hemkomst.
}
om (! card.open_rootdir()) {
hemkomst.
}
}
////////////////////////////
LOOP
void loop() {
IF(digitalRead(pirPin) == hög) {
digitalWrite (ledPin, hög); den ledde visualiserar sensorer utdata pin staten
IF(lockLow) {
lockLow = false; se till att vi väntar på en övergång till låg innan någon ytterligare utgång görs
Serial.println("---");
Serial.Print ("rörelse upptäckts på");
Serial.Print(Millis()/1000);
Serial.println ("sec");
Delay(50);
}
takeLowTime = sant;
}
IF(digitalRead(pirPin) == låg) {
digitalWrite (ledPin, låg); den ledde visualiserar sensorer utdata pin staten
IF(takeLowTime) {
lowIn = millis(); Spara tiden för övergången från hög till låg
takeLowTime = false; se till att detta görs endast i början av en låg fas
}
om (! lockLow & & millis() - lowIn > pausa) {//if sensorn är låg för mer än given paus, antar vi att inga fler förslag som kommer att hända
lockLow = sant; säkerställer detta block av kod körs endast igen efter en ny förslag sekvens har upptäckts
Serial.Print ("motion slutade på"); utgång
Serial.Print((Millis() - paus) / 1000);
Serial.println ("sec");
Delay(50);
}
Switch(digitalRead(pirPin) == hög) {
fall 1:
playcomplete("03SURF~1.wav");
}
}}
void playcomplete(char *name) {
playfile(Name);
samtidigt (wave.isplaying);
Card.close_file(f);
}
void playfile(char *name) {
stoppa alla filer som redan spelar
om (wave.isplaying) {
Wave.stop();
Card.close_file(f);
}
f = card.open_file(name);
om (f & & wave.create(f)) {
Wave.Play();
}
}