Skip to content

Instantly share code, notes, and snippets.

@falsycat
Last active July 20, 2022 16:17
Show Gist options
  • Save falsycat/d288809b773e01530f39dc74c11effbb to your computer and use it in GitHub Desktop.
Save falsycat/d288809b773e01530f39dc74c11effbb to your computer and use it in GitHub Desktop.
全周(180度)展望完全監視システム - パノプティコンアイ
#include <Servo.h>
#define ACTION_DELAY 700
#define ANGLE_UNIT 15
#define TEST_COUNT (180/ANGLE_UNIT+1)
#define DIST_ERROR 20
#define PIN_BEEP 12
#define PIN_LED 2
#define PIN_BUTTON_INIT 3
#define PIN_SERVO 9
#define PIN_USONIC_TRIG 10
#define PIN_USONIC_VALU 11
double dists[TEST_COUNT];
Servo servo;
void look_at(int angle) { servo.write(angle); }
void reset() {
for (size_t i = 0; i < TEST_COUNT; ++i) dists[i] = 0;
}
void setup() {
Serial.begin(115200);
Serial.println("helloworld");
pinMode(PIN_BEEP, OUTPUT);
pinMode(PIN_BUTTON_INIT, INPUT_PULLUP);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_USONIC_TRIG, OUTPUT);
pinMode(PIN_USONIC_VALU, INPUT);
servo.attach(PIN_SERVO);
reset();
Serial.println("setup done");
}
void warn() {
Serial.println("I SEE YOU");
digitalWrite(PIN_LED, 1);
for (int i = 0; i < 200; ++i) {
digitalWrite(PIN_BEEP, HIGH);
delay(2);
digitalWrite(PIN_BEEP, LOW);
delay(2);
}
while (LOW != digitalRead(PIN_BUTTON_INIT));
digitalWrite(PIN_LED, 0);
reset();
}
void loop() {
for (int i = 0; i < TEST_COUNT*2; ++i) {
const int a = abs(i*ANGLE_UNIT-180);
look_at(a);
Serial.println(a);
delay(ACTION_DELAY);
digitalWrite(PIN_USONIC_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_USONIC_TRIG, LOW);
const double dist = 0.017*pulseIn(PIN_USONIC_VALU, HIGH);
const int idx = abs(i-TEST_COUNT+1);
Serial.print("dist ");
Serial.print(dists[idx]);
Serial.print(" -> ");
Serial.println(dist);
if (dists[idx] < dist) {
dists[idx] = dist;
} else if (dists[idx] > dist+DIST_ERROR) {
warn();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment