Implement GPS & microSD card functionality, but it's not finished or tested yet.
This commit is contained in:
parent
ba8068be19
commit
0cdd8f5539
8 changed files with 80 additions and 26 deletions
|
@ -1,6 +0,0 @@
|
||||||
#include "gps.h"
|
|
||||||
#include "settings.h"
|
|
||||||
|
|
||||||
void gps_begin() {
|
|
||||||
serial_gps.begin(BAUD_GPS);
|
|
||||||
}
|
|
27
iot/main/gps.cpp
Normal file
27
iot/main/gps.cpp
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#include "gps.h"
|
||||||
|
#include "settings.h"
|
||||||
|
|
||||||
|
void gps_begin() {
|
||||||
|
serial_gps.begin(BAUD_GPS);
|
||||||
|
}
|
||||||
|
|
||||||
|
TinyGPSLocation gps_location() {
|
||||||
|
Serial.print("[gps] Getting location: ");
|
||||||
|
while(serial_gps.available() > 0) {
|
||||||
|
if(!gps.encode(serial_gps.read()))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(!gps.location.isValid() || gis.location.isUpdated()) {
|
||||||
|
Serial.print(".");
|
||||||
|
delay(100);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println("ok");
|
||||||
|
return gps.location;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void gps_end() {
|
||||||
|
Serial.println(F("[warning] Putting the GPS device to sleep isn't implemented yet."));
|
||||||
|
}
|
|
@ -22,4 +22,14 @@ void gps_begin();
|
||||||
* May take a moment, as the GPS device needs time to acquire a satellite fix.
|
* May take a moment, as the GPS device needs time to acquire a satellite fix.
|
||||||
* @return TinyGPSLocation The current location.
|
* @return TinyGPSLocation The current location.
|
||||||
*/
|
*/
|
||||||
TinyGPSLocation get_location();
|
TinyGPSLocation gps_location();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ends the connection to the GPS device and puts it to sleep in order to save
|
||||||
|
* power.
|
||||||
|
* Note that the GPS device is connected directly to the power management
|
||||||
|
* system and so doesn't get turned off after each measurement, as it takes
|
||||||
|
* ~30s to reacquire a lock when it first starts up - hence why we put it to
|
||||||
|
* sleep instead.
|
||||||
|
*/
|
||||||
|
void gps_end();
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
#include <TinyGPS++.h>
|
||||||
|
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "gps.h"
|
#include "gps.h"
|
||||||
|
@ -7,10 +8,13 @@ void setup() {
|
||||||
Serial.begin(BAUD_PC);
|
Serial.begin(BAUD_PC);
|
||||||
|
|
||||||
gps_begin();
|
gps_begin();
|
||||||
|
TinyGPSLocation loc = get_location();
|
||||||
|
gps_end();
|
||||||
|
|
||||||
|
Serial.print("[main] Location: ("); Serial.print(loc.longitude()); Serial.print(", "); Serial.print(loc.latitude()); Serial.println();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
get_location();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
|
1
iot/main/random.h
Normal file
1
iot/main/random.h
Normal file
|
@ -0,0 +1 @@
|
||||||
|
#pragma once
|
|
@ -29,5 +29,7 @@
|
||||||
////////// microSD Card //////////
|
////////// microSD Card //////////
|
||||||
//////////////////////////////////
|
//////////////////////////////////
|
||||||
|
|
||||||
//
|
// The chip select pin that activates the connection to the microSD card over SPI.
|
||||||
#define PIN_SD_SPI_CHIP_SELECT 3
|
#define PIN_SD_SPI_CHIP_SELECT 3
|
||||||
|
|
||||||
|
#define SD_FILENAME "data.tsv"
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
#include <Arduino.h>
|
|
||||||
#include <SD.h>
|
|
||||||
|
|
||||||
#include "settings.h"
|
|
||||||
|
|
||||||
void store_init() {
|
|
||||||
pinMode(PIN_SPI_CHIP_SELECT, OUTPUT);
|
|
||||||
|
|
||||||
if(!SD.begin(PIN_SPI_DATA)) {
|
|
||||||
Serial.println("Error: Failed to initialise connection to microSD card");
|
|
||||||
while(true) { delay(1); } // Pseudo-halt, but uses delay() to ensure we keep passing back control to allow easy re-programming
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void store_reading(uint32_t id, TinyGPSLocation location) {
|
|
||||||
File handle;
|
|
||||||
}
|
|
33
iot/main/storage.cpp
Normal file
33
iot/main/storage.cpp
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <SD.h>
|
||||||
|
|
||||||
|
#include "settings.h"
|
||||||
|
|
||||||
|
void store_init() {
|
||||||
|
// NOTE: If this doesn't work, then we need to use pinMode() & specify the data pin here instead.
|
||||||
|
if(!SD.begin(PIN_SD_SPI_CHIP_SELECT)) {
|
||||||
|
Serial.println(F("Error: Failed to initialise connection to microSD card"));
|
||||||
|
while(true) { delay(1); } // Pseudo-halt, but uses delay() to ensure we keep passing back control to allow easy re-programming
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void store_reading(uint32_t id, TinyGPSLocation location) {
|
||||||
|
// Open the file to write the data to. If it doesn't exist it will be created.
|
||||||
|
// Unlike elsewhere, FILE_WRITE opens the file with the cursor starting at the end, so it's basically actually equivalent to FILE_APPEND that we use in other environments. Confusing, I know.
|
||||||
|
File handle = SD.open(SD_FILENAME, FILE_WRITE);
|
||||||
|
|
||||||
|
handle.print(id);
|
||||||
|
handle.print("\t");
|
||||||
|
|
||||||
|
handle.print(location.longitude());
|
||||||
|
handle.print("\t");
|
||||||
|
|
||||||
|
handle.print(location.latitude());
|
||||||
|
handle.println();
|
||||||
|
|
||||||
|
handle.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void store_close() {
|
||||||
|
SD.end();
|
||||||
|
}
|
Loading…
Reference in a new issue