Untitled
unknown
plain_text
2 years ago
2.0 kB
8
Indexable
#define THRESHOLD 35
#define ALARM_AFTER_LAST_SEEN 3000
const int buzzer = 0;
const int ledRed = 1;
const int ledBlue = 4;
const int ultraSoundSensorTrigger = 2;
const int ultraSoundSensorEcho = 3;
long lastSeen = -10000;
void setup() {
pinMode(buzzer, OUTPUT);
pinMode(ledRed, OUTPUT);
pinMode(ledBlue, OUTPUT);
pinMode(ultraSoundSensorTrigger, OUTPUT);
pinMode(ultraSoundSensorEcho, INPUT);
}
void loop() {
long distanceCm = pingCm();
long curTime = millis();
if (distanceCm < THRESHOLD) {
lastSeen = curTime;
}
long diff = (curTime - lastSeen) - ALARM_AFTER_LAST_SEEN;
if ((diff > 0) and (diff < 5000)) {
playAlarm(diff);
} else {
setLedBuzzer(0);
}
delay(100);
}
void playAlarm(long diff) {
int curStage = diff / 250;
if (curStage % 2 == 0) {
setLedBuzzer(1);
} else {
setLedBuzzer(2);
}
}
void setLedBuzzer(int v) {
switch(v) {
case 0: // disable
noTone(buzzer);
digitalWrite(ledRed, LOW);
digitalWrite(ledBlue, LOW);
break;
case 1: // alarm 1
tone(buzzer, 850);
digitalWrite(ledRed, HIGH);
digitalWrite(ledBlue, LOW);
break;
case 2: // alarm 2
tone(buzzer, 1280);
digitalWrite(ledRed, LOW);
digitalWrite(ledBlue, HIGH);
break;
}
}
long pingCm() {
long duration, inches, cm;
digitalWrite(ultraSoundSensorTrigger, LOW);
delayMicroseconds(2);
digitalWrite(ultraSoundSensorTrigger, HIGH);
delayMicroseconds(5);
digitalWrite(ultraSoundSensorTrigger, LOW);
duration = pulseIn(ultraSoundSensorEcho, HIGH);
return microsecondsToCentimeters(duration);
}
long microsecondsToCentimeters(long microseconds) {
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the object we
// take half of the distance travelled.
return microseconds / 29 / 2;
}Editor is loading...