Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Servo.h>
- #define piezo P1_5
- #define servo RED_LED
- #define green_led GREEN_LED
- #define button PUSH2
- #define sleepTime 7500
- #define closeSleepTime 500
- #define debounceTime 120
- #define openTime 5000
- boolean open = false;
- boolean buttonWakeMode = true;
- int val = 0;
- int threshold = 10;
- unsigned long lastWake = 0;
- unsigned long nextSleep = 0;
- unsigned long currentTime = 0;
- unsigned long lastPress = 0;
- Servo myservo;
- #define openPos 30
- #define closePos 150
- void setup()
- {
- // put your setup code here, to run once:
- myservo.attach(servo);
- pinMode(green_led, OUTPUT);
- pinMode(piezo, OUTPUT);
- digitalWrite(green_led, HIGH);
- pinMode(button, INPUT_PULLUP);
- attachInterrupt(button, wakeUp, FALLING);
- lastWake = millis();
- nextSleep = lastWake + sleepTime;
- }
- void loop()
- {
- currentTime = millis();
- if ((currentTime > nextSleep) && (!open)) {
- gotoSleep();
- }
- else {
- knockKnock();
- }
- }
- void knockKnock() {
- val = analogRead(piezo);
- if (val >= threshold) {
- myservo.write(openPos);
- open = true;
- }
- }
- void wakeUp() {
- if (buttonWakeMode) {
- digitalWrite(green_led, HIGH);
- myservo.attach(servo);
- buttonWakeMode = false;
- lastWake = millis();
- lastPress = lastWake;
- nextSleep = lastWake + sleepTime;
- }
- else if (currentTime > (lastPress + debounceTime)) {
- //button hit while already awake
- if (open) {
- myservo.write(closePos);
- open = false;
- nextSleep = currentTime + closeSleepTime;
- }
- else {
- //nextSleep = currentTime + sleepTime;
- }
- lastPress = currentTime;
- }
- else {
- //debounce limit
- }
- }
- void gotoSleep() {
- myservo.write(closePos);
- myservo.detach();
- buttonWakeMode = true;
- digitalWrite(green_led, LOW);
- digitalWrite(servo, LOW);
- LPM4;
- }
Advertisement
Add Comment
Please, Sign In to add comment