#include <Console.h>
#include <Servo.h>
 
#define SERVO_PIN    6
#define DETECTOR_PIN 2
#define BUZZER_PIN   12
#define BUZZER_GND   8
 
#define SHOOT_DELAY  3000
 
Servo srv;
 
void setup()
{
  Bridge.begin();
  Console.begin();
 
  pinMode(BUZZER_GND, OUTPUT);
  digitalWrite(BUZZER_GND, LOW);
 
  while(!Console) {}
  Console.println("Hello!");
  tone(BUZZER_PIN, 1000, 1000);
 
  srv.attach(SERVO_PIN);
 
  pinMode(DETECTOR_PIN, INPUT);
}
 
void shoot(void)
{
  Process p;
 
  p.begin("sh");
  p.addParameter("/root/fb-test/post.sh");
  p.run();
 
  while(p.available() > 0) {
    char c = p.read();
 
    Console.print(c);
  }
 
  Console.println("Shooted!");
}
 
bool wait_cat(void)
{
  unsigned long tm = millis();
  bool detected = false;
  unsigned long start_detected = millis();
 
  while(millis()-tm < 60000) {
    int i = 10;
 
    while(i--) {
      srv.write(0);
      delay(200);
      if(!digitalRead(DETECTOR_PIN)) {
        if(!detected) {
          start_detected = millis();
          detected = true;
        } else {
          if(millis()-start_detected > 500) {
            tone(BUZZER_PIN, 500, 500);
            shoot();
 
            return true;
          }
        }
      } else if(detected) {
        detected = false;
      }
      srv.write(90);
      delay(200);
 
    }
 
    detected = false;
    delay(3000);
  }
 
  return false;
}
 
void loop()
{
  wait_cat();
 
  delay(3*60000);
}