Created
March 17, 2016 20:07
-
-
Save ViliusKraujutis/2bf2e7d2ba1f91b50dcb to your computer and use it in GitHub Desktop.
Test script to try PIR sensor and Ultrasonic distance measure. Here distance measure method uses precalculated constant 29.1 which is 1 divided by sound speed. Would be good to update this formula to use actual air temperature to measure distance more precisely.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const int pirLedPin = 31; | |
const int distanceLedPin = 32; | |
const int pirPin = 33; | |
const int echoPin = 22; | |
const int trigPin = 24; | |
const int distanceMeasureTimeout = 1000; | |
long lastDistanceMeasureTimestamp = 0; | |
void setup() { | |
Serial.begin(9600); | |
pinMode(pirLedPin, OUTPUT); | |
pinMode(distanceLedPin, OUTPUT); | |
pinMode(pirPin, INPUT); | |
pinMode(trigPin, OUTPUT); | |
pinMode(echoPin, INPUT); | |
Serial.println("Started"); | |
} | |
void loop() { | |
if (digitalRead(pirPin) == HIGH) { | |
digitalWrite(pirLedPin, HIGH); | |
} else { | |
digitalWrite(pirLedPin, LOW); | |
} | |
int distance = measureDistance(trigPin, echoPin); | |
if (distance == -1) { | |
// timeout - do nothing | |
} else if (distance <= 0 || distance > 200) { | |
Serial.print("Out of range: "); | |
Serial.println(distance); | |
digitalWrite(distanceLedPin, LOW); | |
} else { | |
Serial.print("Distance: "); | |
Serial.println(distance); | |
if (distance < 100) { | |
digitalWrite(distanceLedPin, HIGH); | |
} else { | |
digitalWrite(distanceLedPin, LOW); | |
} | |
} | |
} | |
float measureDistance(const int trigPin, const int echoPin) { | |
long duration; | |
digitalWrite(trigPin, LOW); | |
if (millis() - lastDistanceMeasureTimestamp < distanceMeasureTimeout) { | |
return -1; // can't measure right now; | |
} | |
lastDistanceMeasureTimestamp = millis(); | |
digitalWrite(trigPin, HIGH); | |
delayMicroseconds(10); | |
digitalWrite(trigPin, LOW); | |
duration = pulseIn(echoPin, HIGH); | |
return duration / 2 / 29.1; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment