From 4ce8cfd32b499b8ee48f50cb9604afe7640a5115 Mon Sep 17 00:00:00 2001 From: rvbnsk <58656716+rvbnsk@users.noreply.github.com> Date: Sun, 19 Feb 2023 10:13:47 +0100 Subject: [PATCH 1/5] added handle_mode() --- include/utils.hpp | 10 ++++++++++ src/main.cpp | 17 ++++++++--------- src/utils.cpp | 29 +++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 src/utils.cpp diff --git a/include/utils.hpp b/include/utils.hpp index b0d4566..4485033 100644 --- a/include/utils.hpp +++ b/include/utils.hpp @@ -1,18 +1,28 @@ #ifndef OBC_UTILS_HPP #define OBC_UTILS_HPP +#include + #include namespace utl { enum class Logger { Debug, Flight }; +enum class Modes { Idle, Measurements, Experiment, Uplink }; + template constexpr auto to_underlying(Enum e) { return static_cast>(e); } +void handle_mode(Modes mode); +void handle_idle(); +void handle_measurements(); +void handle_experiment(); +void handle_uplink(); + } // namespace utl #endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 73aa548..45650f5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,19 +2,18 @@ #include "accelerometer.hpp" #include "barometer.hpp" +#include "devices.hpp" #include "gps.hpp" #include "logger.hpp" +#include "utils.hpp" -HardwareSerial Serial2{PA3, PA2}; +auto current_mode = utl::Modes::Idle; +HardwareSerial Serial2{PA3, PA2}; Adafruit_GPS gps{&Serial2}; +MMA8452Q accelerometer; +BMP280 bmp; -void setup() -{ - // put your setup code here, to run once: -} +void setup() { obc::init(); } -void loop() -{ - // put your main code here, to run repeatedly: -} \ No newline at end of file +void loop() { utl::handle_mode(current_mode); } \ No newline at end of file diff --git a/src/utils.cpp b/src/utils.cpp new file mode 100644 index 0000000..e977611 --- /dev/null +++ b/src/utils.cpp @@ -0,0 +1,29 @@ +#include "utils.hpp" + +namespace utl { + +void handle_mode(Modes mode) +{ + switch (mode) { + case Modes::Idle: + return handle_idle(); + case Modes::Measurements: + return handle_measurements(); + case Modes::Experiment: + return handle_experiment(); + case Modes::Uplink: + return handle_uplink(); + default: + break; + } +} + +void handle_idle() {} + +void handle_measurements() {} + +void handle_experiment() {} + +void handle_uplink() {} + +} // namespace utl \ No newline at end of file From 3e88d3fccc0a96707005cb2ca36c0c8b71d60dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Rybi=C5=84ski?= <58656716+rvbnsk@users.noreply.github.com> Date: Thu, 2 Mar 2023 13:16:01 +0100 Subject: [PATCH 2/5] Added custom I2C, test void loop() (#9) * changed I2C ports from defaults to custom * changed buzzer pin * added functions to main loop * changed buzzer pin to LED_BUILTIN --------- Co-authored-by: Kamil Dziedzic --- src/buzzer.cpp | 6 ++++-- src/devices.cpp | 9 +++++++- src/lora.cpp | 2 +- src/main.cpp | 26 +++++++++++++---------- src/utils.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 83 insertions(+), 16 deletions(-) diff --git a/src/buzzer.cpp b/src/buzzer.cpp index c6d4aca..35419cf 100644 --- a/src/buzzer.cpp +++ b/src/buzzer.cpp @@ -2,14 +2,16 @@ #include +constexpr auto buzzer_pin = LED_BUILTIN; // PC13 + namespace obc { void buzzer(std::size_t quantity) { for (std::size_t i = 0; i < quantity; ++i) { - digitalWrite(D6, 255); + digitalWrite(buzzer_pin, HIGH); delay(100); - digitalWrite(D6, LOW); + digitalWrite(buzzer_pin, LOW); delay(200); } } diff --git a/src/devices.cpp b/src/devices.cpp index a512fd8..3a2f147 100644 --- a/src/devices.cpp +++ b/src/devices.cpp @@ -6,11 +6,18 @@ extern MMA8452Q accelerometer; extern BMP280 bmp; extern Adafruit_GPS gps; +constexpr auto custom_sda = PB9; +constexpr auto custom_scl = PB8; +constexpr auto custom_buzzer_pin = LED_BUILTIN; // PC13 + namespace obc { void init() { - pinMode(D6, OUTPUT); + Wire.setSDA(custom_sda); + Wire.setSCL(custom_scl); + + pinMode(custom_buzzer_pin, OUTPUT); sd_init().expect("SD init failure"); if (auto result = init(accelerometer); result.is_err()) { diff --git a/src/lora.cpp b/src/lora.cpp index 3510479..aead319 100644 --- a/src/lora.cpp +++ b/src/lora.cpp @@ -71,7 +71,7 @@ void send_packet(const String &packet) { auto encoded_logs = encode(packet); String encoded = String("AT+MSG=") + "\"" + encoded_logs + "\""; - Serial5.print(encoded); + Serial5.println(encoded); } } // namespace obc \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 45650f5..3b1e921 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,19 +1,23 @@ #include +#include -#include "accelerometer.hpp" -#include "barometer.hpp" #include "devices.hpp" -#include "gps.hpp" -#include "logger.hpp" #include "utils.hpp" -auto current_mode = utl::Modes::Idle; +constexpr auto baud_rate = 9600l; +constexpr auto watchdog_interval = 10000000; -HardwareSerial Serial2{PA3, PA2}; -Adafruit_GPS gps{&Serial2}; -MMA8452Q accelerometer; -BMP280 bmp; +auto current_mode = utl::Modes::Measurements; -void setup() { obc::init(); } +void setup() +{ + Serial.begin(baud_rate); + IWatchdog.begin(watchdog_interval); + obc::init(); +} -void loop() { utl::handle_mode(current_mode); } \ No newline at end of file +void loop() +{ + utl::handle_mode(current_mode); + IWatchdog.reload(); +} \ No newline at end of file diff --git a/src/utils.cpp b/src/utils.cpp index e977611..edc8785 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -1,7 +1,31 @@ #include "utils.hpp" +#include "accelerometer.hpp" +#include "barometer.hpp" +#include "buzzer.hpp" +#include "devices.hpp" +#include "gps.hpp" +#include "logger.hpp" +#include "lora.hpp" + +extern Adafruit_GPS gps; +extern MMA8452Q accelerometer; +extern BMP280 bmp; + namespace utl { +namespace { +constexpr auto logs_interval = 2000; +constexpr auto lora_interval = 60000; +constexpr std::size_t buzzer_ind_fix_not_fetched = 1; + +uint32_t timer = millis(); +uint32_t lora_timer = millis(); + +bool is_date_appended = false; + +} // namespace + void handle_mode(Modes mode) { switch (mode) { @@ -20,7 +44,37 @@ void handle_mode(Modes mode) void handle_idle() {} -void handle_measurements() {} +void handle_measurements() +{ + if (obc::measure(gps).is_ok() and millis() - timer > logs_interval) { + obc::Packet logs = {{}, {}, {}, {}, {}}; + const auto acclr = obc::measure(accelerometer); + const auto bmp_measurements = obc::measure(bmp); + logs.time = obc::read_time(gps); + logs.position = obc::read_position(gps); + + if (acclr.is_ok()) { logs.acclr_measurements = acclr.unwrap(); } + if (bmp_measurements.is_ok()) { + logs.bmp_measurements = bmp_measurements.unwrap(); + } + + if (not is_date_appended) { + obc::log_boot(obc::serialize(obc::read_date(gps))); + is_date_appended = true; + } + + obc::log_data(obc::serialize(logs)); + + if (millis() - lora_timer > lora_interval) { + obc::send_packet(obc::lora_packet(logs)); + lora_timer = millis(); + } + + if (not logs.position.fix) { obc::buzzer(buzzer_ind_fix_not_fetched); } + + timer = millis(); + } +} void handle_experiment() {} From 63ec5df6fa99f5b06e49824836e140013a5e5cd0 Mon Sep 17 00:00:00 2001 From: rvbnsk <58656716+rvbnsk@users.noreply.github.com> Date: Sun, 19 Feb 2023 10:13:47 +0100 Subject: [PATCH 3/5] added handle_mode() --- src/main.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 3b1e921..a11ca90 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,7 +7,25 @@ constexpr auto baud_rate = 9600l; constexpr auto watchdog_interval = 10000000; +<<<<<<< HEAD auto current_mode = utl::Modes::Measurements; +======= +bool is_date_appended = false; +#include "devices.hpp" +#include "gps.hpp" +#include "logger.hpp" +#include "utils.hpp" + +auto current_mode = utl::Modes::Idle; + +HardwareSerial Serial2{PA3, PA2}; +Adafruit_GPS gps{&Serial2}; +MMA8452Q accelerometer; +BMP280 bmp; + +uint32_t timer = millis(); +uint32_t lora_timer = millis(); +>>>>>>> 64afdd0 (added handle_mode()) void setup() { @@ -18,6 +36,43 @@ void setup() void loop() { +<<<<<<< HEAD utl::handle_mode(current_mode); IWatchdog.reload(); -} \ No newline at end of file +} +======= + if (obc::measure(gps).is_ok() and millis() - timer > logs_interval) { + obc::Packet logs = {{}, {}, {}, {}, {}}; + const auto acclr = obc::measure(accelerometer); + const auto bmp_measurements = obc::measure(bmp); + logs.time = obc::read_time(gps); + logs.position = obc::read_position(gps); + + if (acclr.is_ok()) { logs.acclr_measurements = acclr.unwrap(); } + if (bmp_measurements.is_ok()) { + logs.bmp_measurements = bmp_measurements.unwrap(); + } + + if (not is_date_appended) { + obc::log_boot(obc::serialize(obc::read_date(gps))); + is_date_appended = true; + } + + obc::log_data(obc::serialize(logs)); + + if (millis() - lora_timer > lora_interval) { + obc::send_packet(obc::lora_packet(logs)); + lora_timer = millis(); + } + + if (not logs.position.fix) { obc::buzzer(buzzer_ind_fix_not_fetched); } + + timer = millis(); + IWatchdog.reload(); + } +} + +void setup() { obc::init(); } + +void loop() { utl::handle_mode(current_mode); } +>>>>>>> 64afdd0 (added handle_mode()) From a8921d5d71f94e4a6775fd9f1b078b434b703350 Mon Sep 17 00:00:00 2001 From: rvbnsk <58656716+rvbnsk@users.noreply.github.com> Date: Thu, 2 Mar 2023 13:19:32 +0100 Subject: [PATCH 4/5] changed clang tidy config file --- .clang-tidy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index e6f8d5b..196f4fb 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,13 +1,14 @@ Checks: ' -*, bugprone-*, +-bugprone-easily-swappable-parameters cert-*, -cert-err58-cpp, -cert-dcl16-c, cppcoreguidelines-*, -cppcoreguidelines-avoid-magic-numbers, -modernize-*, -cppcoreguidelines-avoid-non-const-global-variables, +modernize-*, -modernize-use-nodiscard, -modernize-avoid-c-arrays, -modernize-use-trailing-return-type, @@ -24,5 +25,4 @@ hicpp-*,-hicpp-special-member-functions, -hicpp-no-array-decay, -hicpp-noexcept-move, -hicpp-uppercase-literal-suffix, --bugprone-easily-swappable-parameters ' \ No newline at end of file From ceae1cf0c19b942d7c2f9052f1bac809a791612e Mon Sep 17 00:00:00 2001 From: rvbnsk <58656716+rvbnsk@users.noreply.github.com> Date: Sun, 12 Mar 2023 12:03:16 +0100 Subject: [PATCH 5/5] moved main mode from main to new function --- src/devices.cpp | 8 ++++--- src/main.cpp | 57 +------------------------------------------------ 2 files changed, 6 insertions(+), 59 deletions(-) diff --git a/src/devices.cpp b/src/devices.cpp index 3a2f147..174f265 100644 --- a/src/devices.cpp +++ b/src/devices.cpp @@ -2,9 +2,10 @@ #include -extern MMA8452Q accelerometer; -extern BMP280 bmp; -extern Adafruit_GPS gps; +HardwareSerial Serial2{PA3, PA2}; +Adafruit_GPS gps{&Serial2}; +MMA8452Q accelerometer; +BMP280 bmp; constexpr auto custom_sda = PB9; constexpr auto custom_scl = PB8; @@ -45,6 +46,7 @@ void init() } log_boot("Devices initialized properly."); + obc::buzzer(5); } } // namespace obc \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index a11ca90..3b1e921 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,25 +7,7 @@ constexpr auto baud_rate = 9600l; constexpr auto watchdog_interval = 10000000; -<<<<<<< HEAD auto current_mode = utl::Modes::Measurements; -======= -bool is_date_appended = false; -#include "devices.hpp" -#include "gps.hpp" -#include "logger.hpp" -#include "utils.hpp" - -auto current_mode = utl::Modes::Idle; - -HardwareSerial Serial2{PA3, PA2}; -Adafruit_GPS gps{&Serial2}; -MMA8452Q accelerometer; -BMP280 bmp; - -uint32_t timer = millis(); -uint32_t lora_timer = millis(); ->>>>>>> 64afdd0 (added handle_mode()) void setup() { @@ -36,43 +18,6 @@ void setup() void loop() { -<<<<<<< HEAD utl::handle_mode(current_mode); IWatchdog.reload(); -} -======= - if (obc::measure(gps).is_ok() and millis() - timer > logs_interval) { - obc::Packet logs = {{}, {}, {}, {}, {}}; - const auto acclr = obc::measure(accelerometer); - const auto bmp_measurements = obc::measure(bmp); - logs.time = obc::read_time(gps); - logs.position = obc::read_position(gps); - - if (acclr.is_ok()) { logs.acclr_measurements = acclr.unwrap(); } - if (bmp_measurements.is_ok()) { - logs.bmp_measurements = bmp_measurements.unwrap(); - } - - if (not is_date_appended) { - obc::log_boot(obc::serialize(obc::read_date(gps))); - is_date_appended = true; - } - - obc::log_data(obc::serialize(logs)); - - if (millis() - lora_timer > lora_interval) { - obc::send_packet(obc::lora_packet(logs)); - lora_timer = millis(); - } - - if (not logs.position.fix) { obc::buzzer(buzzer_ind_fix_not_fetched); } - - timer = millis(); - IWatchdog.reload(); - } -} - -void setup() { obc::init(); } - -void loop() { utl::handle_mode(current_mode); } ->>>>>>> 64afdd0 (added handle_mode()) +} \ No newline at end of file