Quellcode durchsuchen

Implemented RTC alarm sleep and wake up

tags/v1.2.0
Bertrand Lemasle vor 7 Jahren
Ursprung
Commit
d21ba43394
15 geänderte Dateien mit 167 neuen und 65 gelöschten Zeilen
  1. +5
    -1
      GpsTracker/Gps.cpp
  2. +6
    -4
      GpsTracker/Gps.h
  3. +8
    -14
      GpsTracker/GpsTracker.h
  4. +9
    -1
      GpsTracker/GpsTracker.ino
  5. +26
    -0
      GpsTracker/MainUnit.cpp
  6. +9
    -0
      GpsTracker/MainUnit.h
  7. +13
    -0
      GpsTracker/Pins.h
  8. +22
    -0
      GpsTracker/Positions.cpp
  9. +8
    -0
      GpsTracker/Positions.h
  10. +52
    -18
      GpsTracker/Rtc.cpp
  11. +8
    -2
      GpsTracker/Rtc.h
  12. +1
    -0
      GpsTracker/Storage.cpp
  13. +0
    -10
      GpsTracker/Time.h
  14. +0
    -8
      GpsTracker/Utils.cpp
  15. +0
    -7
      GpsTracker/Utils.h

+ 5
- 1
GpsTracker/Gps.cpp Datei anzeigen

@@ -1,9 +1,13 @@
#include "Gps.h"
#include "Debug.h"

#define LOGGER_NAME "Gps"

namespace gps {

char lastPosition[GPS_POSITION_SIZE];
SIM808_GPS_STATUS lastStatus;

void powerOn() {

}
@@ -23,7 +27,7 @@ namespace gps {
return currentStatus;
}

Time getTime() {
time_t getTime() {
}
}

+ 6
- 4
GpsTracker/Gps.h Datei anzeigen

@@ -1,18 +1,20 @@
#pragma once

#include "Time.h"
#include <TimeLib.h>
#include <Time.h>
#include <SIM808.h>

#define GPS_POSITION_SIZE 128

namespace gps {

char lastPosition[GPS_POSITION_SIZE];
SIM808_GPS_STATUS lastStatus;
extern char lastPosition[GPS_POSITION_SIZE];
extern SIM808_GPS_STATUS lastStatus;

void powerOn();
void powerOff();

SIM808_GPS_STATUS acquireCurrentPosition();
Time getTime();
time_t getTime();

}

+ 8
- 14
GpsTracker/GpsTracker.h Datei anzeigen

@@ -3,26 +3,20 @@
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <SIM808.h>
#include <TimeLib.h>
#include <Time.h>

#include "Debug.h"
#include "Core.h"

#include "posmgr.h"
#include "Gps.h"
#include "posmgr.h"
#include "MainUnit.h"
#include "Network.h"
#include "Rtc.h"
#include "Storage.h"
#include "Utils.h"
#include "Pins.h"
#include "Positions.h"

#define LOGGER_NAME "GpsTracker"

#define SIM_RX 5
#define SIM_TX 6
#define SIM_PWR 9
#define SIM_STATUS 8

#define RTC_PWR A0
#define EEPROM_PWR A0
#define SD_SS SS

#define SIM_RI 2
#define RTC_WAKE 3
#define LOGGER_NAME "GpsTracker"

+ 9
- 1
GpsTracker/GpsTracker.ino Datei anzeigen

@@ -21,9 +21,17 @@ void loop() {
gps::powerOff();

if (gpsStatus > SIM808_GPS_STATUS::NO_FIX) {
Time time = utils::parseTime();
time_t time = gps::getTime();
rtc::powerOn();
rtc::setTime(time);
rtc::powerOff();

positions::appendLast();
}

if (positions::needsToSend()) {
positions::send();
}

mainunit::deepSleep(10);
}

+ 26
- 0
GpsTracker/MainUnit.cpp Datei anzeigen

@@ -0,0 +1,26 @@
#include "MainUnit.h"
#include "Rtc.h"
#include "Pins.h"

namespace mainunit {

void interrupt() {
detachInterrupt(digitalPinToInterrupt(RTC_WAKE));
}

void interruptIn(uint16_t seconds) {
rtc::setAlarm(seconds);

pinMode(RTC_WAKE, INPUT);
attachInterrupt(digitalPinToInterrupt(RTC_WAKE), interrupt, FALLING);
}

void sleep(period_t period) {
LowPower.powerDown(period, ADC_OFF, BOD_OFF);
}

void deepSleep(uint16_t seconds) {
interruptIn(seconds);
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
}
}

+ 9
- 0
GpsTracker/MainUnit.h Datei anzeigen

@@ -0,0 +1,9 @@
#pragma once

#include <Arduino.h>
#include <LowPower.h>

namespace mainunit {
void sleep(period_t period);
void deepSleep(uint16_t seconds);
}

+ 13
- 0
GpsTracker/Pins.h Datei anzeigen

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

#define SIM_RX 5
#define SIM_TX 6
#define SIM_PWR 9
#define SIM_STATUS 8

#define RTC_PWR A0
#define EEPROM_PWR A0
#define SD_SS SS

#define SIM_RI 2
#define RTC_WAKE 3

+ 22
- 0
GpsTracker/Positions.cpp Datei anzeigen

@@ -0,0 +1,22 @@
#include "Positions.h"

#include "Gps.h"
#include "Network.h"
#include "Storage.h"

#define LOGGER_NAME "Positions"

namespace positions {

void appendLast() {
//write gps::lastPosition to eeprom and eventually to sd card
}

bool needsToSend() {
return false;
}

void send() {

}
}

+ 8
- 0
GpsTracker/Positions.h Datei anzeigen

@@ -0,0 +1,8 @@
#pragma once

namespace positions {
void appendLast();

bool needsToSend();
void send();
}

+ 52
- 18
GpsTracker/Rtc.cpp Datei anzeigen

@@ -1,4 +1,5 @@
#include "Rtc.h"
#include "Pins.h"

#include <Wire.h>
#include <MD_DS3231.h>
@@ -7,6 +8,38 @@

namespace rtc {

namespace details {

time_t readTimeFromRegisters() {
tmElements_t tmElements = {
RTC.s,
RTC.m,
RTC.h,
RTC.dow,
RTC.dd,
RTC.mm,
CalendarYrToTm(RTC.yyyy)
};

return makeTime(tmElements);
}

void writeTimeToRegisters(time_t &time) {
tmElements_t tmElements;
breakTime(time, tmElements);

RTC.s = tmElements.Second;
RTC.m = tmElements.Minute;
RTC.h = tmElements.Hour;
RTC.dow = tmElements.Wday;
RTC.dd = tmElements.Day;
RTC.mm = tmElements.Month;
RTC.yyyy = tmYearToCalendar(tmElements.Year);
}

}

void powerOn() {
digitalWrite(RTC_PWR, HIGH);
pinMode(RTC_PWR, OUTPUT);
@@ -28,31 +61,32 @@ namespace rtc {

void setup() {
RTC.control(DS3231_12H, DS3231_OFF); //24 hours clock
RTC.control(DS3231_INT_ENABLE, DS3231_ON); //INTCN ON
RTC.control(DS3231_INT_ENABLE, DS3231_OFF); //INTCN OFF
}

Time getTime() {
time_t getTime() {
RTC.readTime();
return details::readTimeFromRegisters();
}

return {
RTC.yyyy,
RTC.mm,
RTC.dd,
RTC.h,
RTC.m,
RTC.s
};
void setTime(time_t &time) {
details::writeTimeToRegisters(time);
RTC.writeTime();
}

void setTime(Time time) {
RTC.yyyy = time.yyyy;
RTC.mm = time.mm;
RTC.dd = time.dd;
RTC.h = time.h;
RTC.m = time.m;
RTC.s = time.s;
void setAlarm(uint16_t seconds) {
time_t t = getTime();
t = t + seconds;
setAlarm(t);
}

RTC.writeTime();
void setAlarm(time_t &time) {
details::writeTimeToRegisters(time);
RTC.writeAlarm1(DS3231_ALM_S);

RTC.control(DS3231_A1_FLAG, DS3231_OFF);
RTC.control(DS3231_A1_INT_ENABLE, DS3231_ON); //Alarm 1 ON
RTC.control(DS3231_INT_ENABLE, DS3231_ON); //INTCN ON
}

}

+ 8
- 2
GpsTracker/Rtc.h Datei anzeigen

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

#include <TimeLib.h>
#include <Time.h>

namespace rtc {
void powerOn();
void powerOff();

void setup();

Time getTime();
void setTime(Time time);
time_t getTime();
void setTime(time_t &time);

void setAlarm(uint16_t seconds);
void setAlarm(time_t &time);
}

+ 1
- 0
GpsTracker/Storage.cpp Datei anzeigen

@@ -1,4 +1,5 @@
#include "Storage.h"
#include "Gps.h"

#define LOGGER_NAME "Storage"



+ 0
- 10
GpsTracker/Time.h Datei anzeigen

@@ -1,10 +0,0 @@
#pragma once

struct Time {
uint16_t yyyy;
uint8_t mm;
uint8_t dd;
uint8_t h;
uint8_t m;
uint8_t s;
};

+ 0
- 8
GpsTracker/Utils.cpp Datei anzeigen

@@ -1,8 +0,0 @@
#include "Utils.h"
#include "Gps.h"

namespace utils {

Time parseTime();

}

+ 0
- 7
GpsTracker/Utils.h Datei anzeigen

@@ -1,7 +0,0 @@
#pragma once

#include "Time.h"

namespace utils {
Time parseTime();
}

Laden…
Abbrechen
Speichern