Newer
Older
#include <Arduino.h>
#define tiltEnterPin 2
#define tiltLeavePin 3
#define greenPin 4
#define redPin 5
#define initCatsInside 1
bool tiltOneHigh, tiltTwoHigh;
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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") {
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
}else if(message == "status") {
String status = "{locked: " + String(locked) + ", catsInside: " + String(catsInside) + "}";
Serial.println(status);
}else {
Serial.println("Unknown event");
}
}