6677

Untitled

Apr 24th, 2014
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.82 KB | None | 0 0
  1. #include <Servo.h>
  2.  
  3. #define piezo P1_5
  4. #define servo RED_LED
  5. #define green_led GREEN_LED
  6. #define button PUSH2
  7.  
  8. #define sleepTime 7500
  9. #define closeSleepTime 500
  10. #define debounceTime 120
  11.  
  12. #define openTime 5000
  13.  
  14. boolean open = false;
  15.  
  16. boolean buttonWakeMode = true;
  17.  
  18. int val = 0;
  19. int threshold = 10;
  20. unsigned long lastWake = 0;
  21. unsigned long nextSleep = 0;
  22. unsigned long currentTime = 0;
  23. unsigned long lastPress = 0;
  24.  
  25. Servo myservo;
  26. #define openPos 30
  27. #define closePos 150
  28. void setup()
  29. {
  30.   // put your setup code here, to run once:
  31.   myservo.attach(servo);
  32.   pinMode(green_led, OUTPUT);
  33.   pinMode(piezo, OUTPUT);
  34.   digitalWrite(green_led, HIGH);
  35.   pinMode(button, INPUT_PULLUP);
  36.   attachInterrupt(button, wakeUp, FALLING);
  37.   lastWake = millis();
  38.   nextSleep = lastWake + sleepTime;
  39. }
  40.  
  41. void loop()
  42. {
  43.   currentTime = millis();
  44.   if ((currentTime > nextSleep) && (!open)) {
  45.     gotoSleep();
  46.   }
  47.   else {
  48.     knockKnock();
  49.   }
  50. }
  51.  
  52. void knockKnock() {
  53.   val = analogRead(piezo);
  54.   if (val >= threshold) {
  55.     myservo.write(openPos);
  56.     open = true;
  57.   }
  58. }
  59.  
  60. void wakeUp() {
  61.   if (buttonWakeMode) {
  62.     digitalWrite(green_led, HIGH);
  63.     myservo.attach(servo);
  64.     buttonWakeMode = false;
  65.     lastWake = millis();
  66.     lastPress = lastWake;
  67.     nextSleep = lastWake + sleepTime;
  68.   }
  69.   else if (currentTime > (lastPress + debounceTime)) {
  70.     //button hit while already awake
  71.     if (open) {
  72.       myservo.write(closePos);
  73.       open = false;
  74.       nextSleep = currentTime + closeSleepTime;
  75.     }
  76.     else {
  77.       //nextSleep = currentTime + sleepTime;
  78.     }
  79.     lastPress = currentTime;
  80.   }
  81.   else {
  82.     //debounce limit
  83.   }
  84. }
  85. void gotoSleep() {
  86.   myservo.write(closePos);
  87.   myservo.detach();
  88.   buttonWakeMode = true;
  89.   digitalWrite(green_led, LOW);
  90.   digitalWrite(servo, LOW);
  91.   LPM4;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment