Stap 2: De Code
* //////////////////////////////////////////////////
* //making zin van de Parallax PIR sensor de uitgang
* //////////////////////////////////////////////////
*
* Switches een LED overeenkomstig de stand van de sensoren uitgang pin.
* Bepaalt het begin en einde van de ononderbroken motie sequenties.
*
* Kristian Gohlke / krigo (_) Web.de / http://filformat.net
* 3. September 2006
*
* kr1 (gespleten) 2006
* vrijgegeven onder een creative commons-licentie "Attribution-NonCommercial-ShareAlike 2.0"
* http://creativecommons.org/licenses/by-nc-sa/2.0/de/
*
*
* De Parallax PIR-Sensor is een makkelijk te gebruiken digitale infrarood beweging Sensormodule.
* (http://www.parallax.com/detail.asp?product_id=555-28027)
*
* De sensor´s uitgang pins gaat naar hoge als beweging aanwezig is.
* Zelfs als beweging aanwezig is echter te laag van tijd tot tijd,
* die misschien de indruk geven geen beweging is aanwezig.
* Dit programma behandelt deze kwestie door het negeren van LOW-fasen korter is dan een bepaalde tijd,
* uitgaande ononderbroken motie is aanwezig tijdens deze fasen.
*
*/
/////////////////////////////
VARS
#include
#include
#include "util.h"
#include "wave.h"
Kaart van de AF_Wave;
Bestand f;
WAVEFILE Golf;
int calibrationTime = 30; de tijd die we geven de sensor kalibreren zelf (10-60 sec volgens het gegevensblad)
lang unsigned int lowIn; het tijdstip wanneer de sensor een lage impuls uitgangen
lang unsigned int pauze = 5000; het aantal milliseconden die de sensor worden lage moet voordat we aannemen alle beweging dat is gestopt
Boole lockLow = waar;
Booleaanse takeLowTime;
int pirPin = 6; de digitale pin aangesloten op uitgang van de PIR-sensor
int ledPin = 13;
/////////////////////////////
SETUP
VOID Setup {}
Serial.begin(9600);
pinMode (pirPin, INPUT);
pinMode (ledPin, OUTPUT);
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
digitalWrite (pirPin, laag);
de sensor enige tijd te geven om te kalibreren
Serial.Print ("kalibreren sensor");
for (int i = 0; ik < calibrationTime; i ++) {}
Serial.Print(".");
delay(1000);
}
Serial.println ("done");
Serial.println ("SENSOR actief");
delay(50);
Als (! card.init_card()) {}
terugkeer;
}
Als (! card.open_partition()) {}
terugkeer;
}
Als (! card.open_filesys()) {}
terugkeer;
}
Als (! card.open_rootdir()) {}
terugkeer;
}
}
////////////////////////////
LOOP
void loop {}
if(digitalRead(pirPin) == HIGH) {}
digitalWrite (ledPin, hoge); de led visualiseert de sensoren uitvoer pin staat
if(lockLow) {}
lockLow = false; Zorg ervoor dat we wachten op een overgang naar lage voordat verdere uitvoer plaatsvindt
Serial.println("---");
Serial.Print ("bewegingsdetectie op");
Serial.Print(Millis()/1000);
Serial.println ("sec");
delay(50);
}
takeLowTime = true;
}
if(digitalRead(pirPin) == LOW) {}
digitalWrite (ledPin, laag); de led visualiseert de sensoren uitvoer pin staat
if(takeLowTime) {}
lowIn = millis(); opslaan van het tijdstip van de overgang van hoog naar laag
takeLowTime = false; Zorg ervoor dat dit gebeurt alleen bij het begin van een lage fase
}
Als (! lockLow & & millis() - lowIn > onderbreken) {//if de sensor wordt laag voor meer dan de gegeven pauze, we gaan ervan uit dat geen meer beweging gaat gebeuren
lockLow = true; zorgt ervoor dat dit blok code wordt alleen opnieuw uitgevoerd nadat een nieuwe reeks van beweging is gedetecteerd
Serial.Print ("motion eindigde op"); uitgang
Serial.Print((Millis() - onderbreken) / 1000);
Serial.println ("sec");
delay(50);
}
switch(digitalRead(pirPin) == HIGH) {}
Case 1:
playcomplete("03SURF~1.wav");
}
}}
ongeldig playcomplete(char *name) {}
playfile(name);
terwijl (wave.isplaying);
Card.close_file(f);
}
ongeldig playfile(char *name) {}
elk bestand al spelen stoppen
Als (wave.isplaying) {}
Wave.stop();
Card.close_file(f);
}
f = card.open_file(name);
Als (f & & wave.create(f)) {}
Wave.Play();
}
}