本文是转自国外网站之三:编程
当前步做好之后就可做下一步了。就是编程,读者可把作者的程序,贴到Arduino IDE上然后更新运行
- // Uses a PIR sensor to detect movement, buzzes a buzzer
- // more info here: http://blog.makezine.com/projects/pir-sensor-arduino-alarm/
- // email me, John Park, at jp@jpixl.net
- // based upon:
- // PIR sensor tester by Limor Fried of Adafruit
- // tone code by michael@thegrebs.com
-
- 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);
-
- 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 of
- 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);
- }
- }
|