Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

53 Zeilen
1.2 KiB

  1. #include "MainUnit.h"
  2. #include "Rtc.h"
  3. #include "Pins.h"
  4. #include "Debug.h"
  5. #define LOGGER_NAME "MainUnit"
  6. namespace mainunit {
  7. namespace details {
  8. void prepareSleep() {
  9. hardware::sim808::simSerial.end(); //avoid woke up by SoftwareSerial interrupt
  10. delay(5); //ensure message have been printed out
  11. }
  12. void wokeUp() {
  13. tmElements_t wokeUpTime;
  14. rtc::getTime(wokeUpTime);
  15. NOTICE_FORMAT("wokeUp", "%d:%d:%d", wokeUpTime.Hour, wokeUpTime.Minute, wokeUpTime.Second);
  16. hardware::sim808::simSerial.listen();
  17. }
  18. }
  19. void interrupt() {
  20. detachInterrupt(digitalPinToInterrupt(RTC_WAKE));
  21. }
  22. void interruptIn(uint16_t seconds) {
  23. rtc::setAlarm(seconds);
  24. pinMode(RTC_WAKE, INPUT);
  25. attachInterrupt(digitalPinToInterrupt(RTC_WAKE), interrupt, FALLING);
  26. }
  27. void sleep(period_t period) {
  28. NOTICE_FORMAT("sleep", "Sleeping for period : %d", period);
  29. details::prepareSleep();
  30. LowPower.powerDown(period, ADC_OFF, BOD_OFF);
  31. details::wokeUp();
  32. }
  33. void deepSleep(uint16_t seconds) {
  34. NOTICE_FORMAT("deepSleep", "Deep sleeping for %d seconds", seconds);
  35. interruptIn(seconds);
  36. details::prepareSleep();
  37. LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
  38. details::wokeUp();
  39. }
  40. }