add route import and export

This commit is contained in:
2023-01-02 13:36:18 +01:00
parent 4d19068d37
commit 4a6e1845f9
3 changed files with 132 additions and 0 deletions
+1
View File
@@ -24,6 +24,7 @@ lib_deps =
br3ttb/PID@^1.2.1 br3ttb/PID@^1.2.1
marcoschwartz/LiquidCrystal_I2C@^1.1.4 marcoschwartz/LiquidCrystal_I2C@^1.1.4
marian-craciunescu/ESP32Ping@^1.7 marian-craciunescu/ESP32Ping@^1.7
bblanchon/ArduinoJson@^6.20.0
upload_port = COM3 upload_port = COM3
[platformio] [platformio]
+120
View File
@@ -31,18 +31,22 @@ void MenuRoute::printMenu() {
void MenuRoute::down() { void MenuRoute::down() {
if (blockInput) return;
this->mainMenu->down(); this->mainMenu->down();
} }
void MenuRoute::up() { void MenuRoute::up() {
if (blockInput) return;
this->mainMenu->up(); this->mainMenu->up();
} }
void MenuRoute::right() { void MenuRoute::right() {
if (blockInput) return;
this->mainMenu->right(); this->mainMenu->right();
} }
void MenuRoute::left() { void MenuRoute::left() {
if (blockInput) return;
if (this->mainMenu->isInSubmenu()) if (this->mainMenu->isInSubmenu())
this->mainMenu->left(); this->mainMenu->left();
else else
@@ -50,10 +54,12 @@ void MenuRoute::left() {
} }
void MenuRoute::yes() { void MenuRoute::yes() {
if (blockInput) return;
this->mainMenu->yes(); this->mainMenu->yes();
} }
void MenuRoute::no() { void MenuRoute::no() {
if (blockInput) return;
if (this->mainMenu->isInSubmenu()) if (this->mainMenu->isInSubmenu())
this->mainMenu->no(); this->mainMenu->no();
else else
@@ -85,3 +91,117 @@ void MenuRoute::init() {
this->mainMenu->addEntry(exportAction); this->mainMenu->addEntry(exportAction);
} }
void MenuRoute::importRoute() {
this->blockInput = true;
// ask user for route number!
uint8_t routeNumber = 1;
String lineOne = "";
String lineTwo = "";
if (WiFi.status() != WL_CONNECTED) {
lineOne = "Not connected to";
lineTwo = "the WiFi.";
this->print(lineOne, lineTwo);
this->blockInput = false;
return;
}
if (ESP.getMaxAllocHeap() < JSON_DOCUMENT_SIZE_ROUTE) {
lineOne = "Not enough mem";
lineTwo = "for Json obj";
this->print(lineOne, lineTwo);
this->blockInput = false;
return;
}
WiFiClient client;
HTTPClient http;
DynamicJsonDocument doc(JSON_DOCUMENT_SIZE_ROUTE);
http.begin(client, "rover.kleiax.de");
int httpResponseCode = http.GET();
lineOne = "HTTP Response";
lineTwo = "Code: ";
if (httpResponseCode > 0)
deserializeJson(doc, http.getStream());
else
lineOne = "HTTP Error";
lineTwo.concat(httpResponseCode);
this->print(lineOne, lineTwo);
if (httpResponseCode <= 0)
return;
uint16_t totalPoints = doc["amountPoints"];
this->route->clear();
for (uint16_t i = 0; i < totalPoints; i++) {
Point::Coordinates coords;
coords.lat = doc["points"][i][0].as<double>();
coords.lon = doc["points"][i][1].as<double>();
this->route->addPointToRoute(Point(coords));
}
this->blockInput = false;
http.end();
}
void MenuRoute::exportRoute() {
this->blockInput = true;
// ask user for route number!
uint8_t routeNumber = 1;
uint16_t totalPoints = this->route->getRouteInfo().totalPoints;
String lineOne = "";
String lineTwo = "";
if (WiFi.status() != WL_CONNECTED) {
lineOne = "Not connected to";
lineTwo = "the WiFi.";
this->print(lineOne, lineTwo);
this->blockInput = false;
return;
}
if (ESP.getMaxAllocHeap() < JSON_DOCUMENT_SIZE_ROUTE) {
lineOne = "Not enough mem";
lineTwo = "for Json obj";
this->print(lineOne, lineTwo);
this->blockInput = false;
return;
}
DynamicJsonDocument doc(JSON_DOCUMENT_SIZE_ROUTE);
doc["number"] = routeNumber;
doc["amountPoints"] = totalPoints;
Point::Coordinates coords = this->route->startRoute().getCoordinates();
doc["points"][0][0] = coords.lat;
doc["points"][0][1] = coords.lon;
for (uint16_t i = 1; i < totalPoints; i++) {
coords = this->route->getNextPoint().getCoordinates();
doc["points"][i][0] = coords.lat;
doc["points"][i][1] = coords.lon;
}
String jsonData;
serializeJson(doc, jsonData);
WiFiClient client;
HTTPClient http;
http.begin(client, "rover.kleiax.de");
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.POST(jsonData);
lineOne = "HTTP Response";
lineTwo = "Code: ";
lineTwo.concat(httpResponseCode);
this->print(lineOne, lineTwo);
this->blockInput = false;
http.end();
}
+11
View File
@@ -12,11 +12,18 @@
#ifndef MENU_ROUTE_H #ifndef MENU_ROUTE_H
#define MENU_ROUTE_H #define MENU_ROUTE_H
#include <Arduino.h>
#include <ArduinoJson.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include "route.h" #include "route.h"
#include "menu.h" #include "menu.h"
#include "menuControl.h" #include "menuControl.h"
#include "menuRoutePoints.h" #include "menuRoutePoints.h"
#define JSON_DOCUMENT_SIZE_ROUTE 4096
class MenuRoute : public MenuControl { class MenuRoute : public MenuControl {
public: public:
MenuRoute(Route* route); MenuRoute(Route* route);
@@ -33,10 +40,14 @@ class MenuRoute : public MenuControl {
private: private:
void init(); void init();
void importRoute();
void exportRoute();
Route* route; Route* route;
Menu* mainMenu; Menu* mainMenu;
bool isInit = false; bool isInit = false;
bool blockInput = false;
}; };
#endif // MENU_ROUTE_H #endif // MENU_ROUTE_H