Pārlūkot izejas kodu

Fixed main unit being woke up by SoftwareSerial interrupts

tags/v1.2.0
Bertrand Lemasle pirms 7 gadiem
vecāks
revīzija
c7c7652d1f
4 mainītis faili ar 26 papildinājumiem un 5 dzēšanām
  1. +2
    -0
      GpsTracker/Config.h
  2. +1
    -1
      GpsTracker/Hardware.cpp
  3. +2
    -0
      GpsTracker/Hardware.h
  4. +21
    -4
      GpsTracker/MainUnit.cpp

+ 2
- 0
GpsTracker/Config.h Parādīt failu

@@ -14,6 +14,8 @@
#define CONFIG_SEED 13
#define VERSION "1.00"

#define SIM808_BAUDRATE 4800

#define SLEEP_DEFAULT_TIME_SECONDS 1800

#define GPS_DEFAULT_INTERMEDIATE_TIMEOUT_MS 10000


+ 1
- 1
GpsTracker/Hardware.cpp Parādīt failu

@@ -43,7 +43,7 @@ namespace hardware {

void setup() {
VERBOSE("setup");
simSerial.begin(4800);
simSerial.begin(SIM808_BAUDRATE);
device.begin(simSerial);
}



+ 2
- 0
GpsTracker/Hardware.h Parādīt failu

@@ -1,11 +1,13 @@
#pragma once

#include <SoftwareSerial.h>
#include <SIM808.h>
#include <E24.h>

namespace hardware {

namespace sim808 {
extern SoftwareSerial simSerial;
extern SIM808 device;

void powerOn();


+ 21
- 4
GpsTracker/MainUnit.cpp Parādīt failu

@@ -7,6 +7,23 @@

namespace mainunit {

namespace details {

void prepareSleep() {
hardware::sim808::simSerial.end(); //avoid woke up by SoftwareSerial interrupt
delay(5); //ensure message have been printed out
}

void wokeUp() {
tmElements_t wokeUpTime;
rtc::getTime(wokeUpTime);
NOTICE_FORMAT("wokeUp", "%d:%d:%d", wokeUpTime.Hour, wokeUpTime.Minute, wokeUpTime.Second);

hardware::sim808::simSerial.listen();
}

}

void interrupt() {
detachInterrupt(digitalPinToInterrupt(RTC_WAKE));
}
@@ -20,17 +37,17 @@ namespace mainunit {

void sleep(period_t period) {
NOTICE_FORMAT("sleep", "Sleeping for period : %d", period);
delay(5);
details::prepareSleep();
LowPower.powerDown(period, ADC_OFF, BOD_OFF);
NOTICE_MSG("sleep", "Woke up");
details::wokeUp();

}

void deepSleep(uint16_t seconds) {
NOTICE_FORMAT("deepSleep", "Deep sleeping for %d seconds", seconds);
interruptIn(seconds);
delay(5);
details::prepareSleep();
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
NOTICE_MSG("deepSleep", "Woke up");
details::wokeUp();
}
}

Notiek ielāde…
Atcelt
Saglabāt