Untitled

 avatar
unknown
plain_text
a year ago
2.0 kB
5
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...