pina-maomen-arduino.ino 2,09 ko
Newer Older
Quentin Vauthier's avatar
Quentin Vauthier a validé
#include <Arduino.h>
#define tiltEnterPin 2
#define tiltLeavePin 3
#define greenPin 4
#define redPin 5

#define initCatsInside 1

bool tiltOneHigh, tiltTwoHigh;
Quentin Vauthier's avatar
Quentin Vauthier a validé
bool locked;
Quentin Vauthier's avatar
Quentin Vauthier a validé

int catsInside;
long lastEnteredAt, lastLeftAt;

void setup() {
  Serial.begin(9600);
  pinMode(tiltEnterPin, INPUT);
  pinMode(tiltLeavePin, INPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  digitalWrite(greenPin, HIGH);
  digitalWrite(redPin, LOW);
  attachInterrupt(digitalPinToInterrupt( tiltEnterPin ), catEntered, FALLING );
  attachInterrupt(digitalPinToInterrupt( tiltLeavePin ), catLeft, FALLING );
  catsInside = initCatsInside;
}

void loop() {
  //Serial.print("Entering : ");
  //Serial.print(digitalRead(tiltEnterPin));
  //Serial.print(" | Leaving : ");
  //Serial.println(digitalRead(tiltLeavePin));
  //delay(100);
}

void catEntered() {
  Serial.println("CAT ENTERED");
  long now = millis();
  if(now - lastEnteredAt < 1000) return;
  ++catsInside;
  lastEnteredAt = now;
  Serial.println(catsInside);
}

void catLeft() {
  Serial.println("CAT LEFT");
  long now = millis();
  if(now - lastEnteredAt < 1000) return;
  if(catsInside > 0) --catsInside;
  lastEnteredAt = now;
  Serial.println(catsInside);
}

/*
  SerialEvent occurs whenever a new data comes in the hardware serial RX. This
  routine is run between each time loop() runs, so using delay inside loop can
  delay response. Multiple bytes of data may be available.
*/
String message = "";
void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    message += inChar;
    if(inChar == '\n') {
      handleMessage(message);
      message = "";
    }
  }
}

void handleMessage(String message) {
  message.trim();
  if(message == "lock") {
    digitalWrite(greenPin, LOW);
    digitalWrite(redPin, HIGH);
  }else if(message == "unlock") {
Quentin Vauthier's avatar
Quentin Vauthier a validé
    locked = false;
Quentin Vauthier's avatar
Quentin Vauthier a validé
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, HIGH);
Quentin Vauthier's avatar
Quentin Vauthier a validé
  }else if(message == "status") {
    String status = "{locked: " + String(locked) + ", catsInside: " + String(catsInside) + "}";
    Serial.println(status);
Quentin Vauthier's avatar
Quentin Vauthier a validé
  }else {
    Serial.println("Unknown event");
  }
}