diff --git a/src/comm.cpp b/src/comm.cpp index 99d63b8..ae5d287 100644 --- a/src/comm.cpp +++ b/src/comm.cpp @@ -1,21 +1,18 @@ #include "comm.h" -#include -#include - -void setup_ota() { +void CommunicationsController::initota() { ArduinoOTA.setHostname(WIFI_SSID); ArduinoOTA.setPassword(WIFI_PASSWORD); ArduinoOTA.begin(); } -void setup_wifi() { +void CommunicationsController::init_wifi() { WiFiSettings.hostname = WIFI_SSID; WiFiSettings.password = WIFI_PASSWORD; WiFiSettings.onPortal = []() { - setup_ota(); + ota(); }; WiFiSettings.onPortalWaitLoop = []() { ArduinoOTA.handle(); @@ -24,13 +21,50 @@ void setup_wifi() { WiFiSettings.connect(); } -void setup_comm() { - setup_wifi(); - setup_ota(); +void CommunicationsController::init() { + ota(); + wifi(); WebMonitor.begin(); } -void comms_loop() { +void CommunicationsController::process() { ArduinoOTA.handle(); + + if (!l4s) { + return; + } + + if (l4s.connected()) { + handle_client(); + } else { + create_connection(); + } +} + +void CommunicationsController::handle_client() { + l4s.flush(); + recv = recv(); + Serial.println(recv); +} + +void CommunicationsController::parseLook4Sat(float* azimuth, float* altitude) { + azimuth = recv.substring(); + altitude = recv.substring(); //TODO +} + +void CommunicationsController::create_connection() { + l4s = l4sServer.accept(); } +String CommunicationsController::recv() { + String rec = ""; + + while (l4s.available()) { + rec += (char)(l4s.read()); + } + + if (rec.length() == 0) { + rec = "Ç"; + } + return rec; +} diff --git a/src/comm.h b/src/comm.h index 27df294..94c4461 100644 --- a/src/comm.h +++ b/src/comm.h @@ -1,10 +1,33 @@ +#include #include +#include +#include + +#define L4S_PORT 4533 #define WIFI_SSID "VynTracker" #define WIFI_PASSWORD "senha1234" -void setup_ota(); -void setup_wifi(); -void setup_comm(); -void comms_loop(); +#ifndef COMM_H +#define COMM_H + +class CommunicationsController { + private: + String recv; + WifiClient l4s; + WifiServer l4sServer(L4S_PORT); + + void recv(); + void init_ota(); + void init_wifi(); + void handle_client(); + void create_connection(); + + public: + void init(); + void process(); + void parseLook4Sat(float* azimuth, float* altitude); +} + +#endif diff --git a/src/main.cpp b/src/main.cpp index a5dd5ef..1b5c370 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,12 +5,14 @@ #include ServoController controller; +CommunicationsController comms; void setup() { + LittleFS.begin(); + comms.init(); + controller.initServos(); controller.initMag(); - LittleFS.begin(); - setup_comm(); pinMode(15, OUTPUT); pinMode(12, OUTPUT); @@ -20,14 +22,6 @@ void setup() { } void loop() { - comms_loop(); - + comms.process(); controller.updateHeading(); - - digitalWrite(15, 1); - WebMonitor.printf("ON!"); - delay(1000); - digitalWrite(15, 0); - WebMonitor.printf("OFF!"); - delay(1000); } diff --git a/src/servo.cpp b/src/servo.cpp index 5bba9e5..9b3b365 100644 --- a/src/servo.cpp +++ b/src/servo.cpp @@ -1,5 +1,4 @@ #include "servo.h" -#include void ServoController::initServos() { @@ -34,7 +33,7 @@ void ServoController::initMag() { WebMonitor.print("Sample: "); WebMonitor.println(mag.getSamples()); - mag.setDeclination(DECLINATION); + mag.setDeclinationAngle(DECLINATION); WebMonitor.print("Declinação: "); WebMonitor.println(DECLINATION); } else { @@ -45,7 +44,20 @@ void ServoController::initMag() { } void ServoController::updateHeading() { + mag.getHeadingDegrees(); + sVector_t raw = mag.readRaw(); + float tmp = raw.HeadingDegress; + headingBuffer[bufferPos++] = tmp; + if (bufferPos > HEADING_BUFFER_LENGTH) { + bufferPos = 0; + } + + headingDegrees = 0; + for (byte i = 0; i < HEADING_BUFFER_LENGTH; i++) { + headingDegrees += headingBuffer[i]; + } + headingDegrees /= HEADING_BUFFER_LENGTH; } void ServoController::moveToAzAlt() { diff --git a/src/servo.h b/src/servo.h index 244e9d1..406eded 100644 --- a/src/servo.h +++ b/src/servo.h @@ -1,14 +1,18 @@ -#include -#include +#include +#include +#include #define DECLINATION -0.353429173528852 +#define HEADING_BUFFER_LENGTH 16 #ifndef SERVO_H #define SERVO_H class ServoController { private: - float headingDegress; + int headingDegrees; + byte bufferPos = 0; + float headingBuffer[HEADING_BUFFER_LENGTH]; Servo HrzSrv; Servo VrtSrv;