From 5109ff0e10e713fe33ca3345466c04a236f599ab Mon Sep 17 00:00:00 2001
From: Jan Grewe <jan@faked.org>
Date: Fri, 24 Jul 2020 19:29:46 +0200
Subject: [PATCH] initial commit (GPS working)

---
 .gitignore     |  5 ++++
 include/README | 39 +++++++++++++++++++++++++++
 lib/README     | 46 +++++++++++++++++++++++++++++++
 src/main.cpp   | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++
 test/README    | 11 ++++++++
 5 files changed, 174 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 include/README
 create mode 100644 lib/README
 create mode 100644 src/main.cpp
 create mode 100644 test/README

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a20dc5c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.pio
+.vscode
+.travis.yml
+platformio.ini
+BikeBeam.code-workspace
diff --git a/include/README b/include/README
new file mode 100644
index 0000000..194dcd4
--- /dev/null
+++ b/include/README
@@ -0,0 +1,39 @@
+
+This directory is intended for project header files.
+
+A header file is a file containing C declarations and macro definitions
+to be shared between several project source files. You request the use of a
+header file in your project source file (C, C++, etc) located in `src` folder
+by including it, with the C preprocessing directive `#include'.
+
+```src/main.c
+
+#include "header.h"
+
+int main (void)
+{
+ ...
+}
+```
+
+Including a header file produces the same results as copying the header file
+into each source file that needs it. Such copying would be time-consuming
+and error-prone. With a header file, the related declarations appear
+in only one place. If they need to be changed, they can be changed in one
+place, and programs that include the header file will automatically use the
+new version when next recompiled. The header file eliminates the labor of
+finding and changing all the copies as well as the risk that a failure to
+find one copy will result in inconsistencies within a program.
+
+In C, the usual convention is to give header files names that end with `.h'.
+It is most portable to use only letters, digits, dashes, and underscores in
+header file names, and at most one dot.
+
+Read more about using header files in official GCC documentation:
+
+* Include Syntax
+* Include Operation
+* Once-Only Headers
+* Computed Includes
+
+https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/lib/README b/lib/README
new file mode 100644
index 0000000..6debab1
--- /dev/null
+++ b/lib/README
@@ -0,0 +1,46 @@
+
+This directory is intended for project specific (private) libraries.
+PlatformIO will compile them to static libraries and link into executable file.
+
+The source code of each library should be placed in a an own separate directory
+("lib/your_library_name/[here are source files]").
+
+For example, see a structure of the following two libraries `Foo` and `Bar`:
+
+|--lib
+|  |
+|  |--Bar
+|  |  |--docs
+|  |  |--examples
+|  |  |--src
+|  |     |- Bar.c
+|  |     |- Bar.h
+|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
+|  |
+|  |--Foo
+|  |  |- Foo.c
+|  |  |- Foo.h
+|  |
+|  |- README --> THIS FILE
+|
+|- platformio.ini
+|--src
+   |- main.c
+
+and a contents of `src/main.c`:
+```
+#include <Foo.h>
+#include <Bar.h>
+
+int main (void)
+{
+  ...
+}
+
+```
+
+PlatformIO Library Dependency Finder will find automatically dependent
+libraries scanning project source files.
+
+More information about PlatformIO Library Dependency Finder
+- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..99f8578
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,73 @@
+#include <TinyGPS++.h>
+#include <axp20x.h>
+
+TinyGPSPlus gps;
+HardwareSerial GPS(1);
+AXP20X_Class axp;
+
+void setupPower() {
+  if (!axp.begin(Wire, AXP192_SLAVE_ADDRESS)) {
+    Serial.println("AXP192 Begin PASS");
+  } else {
+    Serial.println("AXP192 Begin FAIL");
+  }
+  axp.setPowerOutPut(AXP192_LDO2, AXP202_ON);
+  axp.setPowerOutPut(AXP192_LDO3, AXP202_ON);
+  axp.setPowerOutPut(AXP192_DCDC2, AXP202_ON);
+  axp.setPowerOutPut(AXP192_EXTEN, AXP202_ON);
+  axp.setPowerOutPut(AXP192_DCDC1, AXP202_ON);
+  axp.setChgLEDMode(AXP20X_LED_OFF);
+}
+
+void setupGps() {
+  GPS.begin(9600, SERIAL_8N1, 34, 12);   //17-TX 18-RX
+}
+
+static void smartDelay(unsigned long ms)
+{
+  unsigned long start = millis();
+  do
+  {
+    while (GPS.available())
+      gps.encode(GPS.read());
+  } while (millis() - start < ms);
+}
+
+void printGpsStatus() {
+  axp.setChgLEDMode(AXP20X_LED_LOW_LEVEL);
+  Serial.print("Latitude  : ");
+  Serial.println(gps.location.lat(), 5);
+  Serial.print("Longitude : ");
+  Serial.println(gps.location.lng(), 4);
+  Serial.print("Satellites: ");
+  Serial.println(gps.satellites.value());
+  Serial.print("Altitude  : ");
+  Serial.print(gps.altitude.feet() / 3.2808);
+  Serial.println("M");
+  Serial.print("Time      : ");
+  Serial.print(gps.time.hour());
+  Serial.print(":");
+  Serial.print(gps.time.minute());
+  Serial.print(":");
+  Serial.println(gps.time.second());
+  Serial.print("Speed     : ");
+  Serial.println(gps.speed.kmph()); 
+  Serial.println("**********************");
+  axp.setChgLEDMode(AXP20X_LED_OFF);
+  smartDelay(1000);
+  if (millis() > 5000 && gps.charsProcessed() < 10)
+    Serial.println(F("No GPS data received: check wiring"));
+}
+
+void setup()
+{
+  Serial.begin(115200);
+  Wire.begin(21, 22);
+  setupPower();
+  setupGps();
+}
+
+void loop()
+{
+  printGpsStatus();
+}
diff --git a/test/README b/test/README
new file mode 100644
index 0000000..df5066e
--- /dev/null
+++ b/test/README
@@ -0,0 +1,11 @@
+
+This directory is intended for PIO Unit Testing and project tests.
+
+Unit Testing is a software testing method by which individual units of
+source code, sets of one or more MCU program modules together with associated
+control data, usage procedures, and operating procedures, are tested to
+determine whether they are fit for use. Unit testing finds problems early
+in the development cycle.
+
+More information about PIO Unit Testing:
+- https://docs.platformio.org/page/plus/unit-testing.html
-- 
GitLab