From 8eeb829a9198c94036c744c7f15363dd93b55f83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Sun, 24 Nov 2024 23:09:46 +0100 Subject: [PATCH] Add existing code: Power consumption test cases and Semaphore power scheduler skeleton --- .../Power_Measurements/Display/Display.ino | 26 ++++ .../ESP32_baseline/ESP32_baseline.ino | 136 ++++++++++++++++++ .../advanced/Power_Measurements/IMU/IMU.ino | 43 ++++++ .../Power_Measurements/IR_LED/IR_LED.ino | 23 +++ .../LightSensorsDaylight.ino | 34 +++++ .../LightSensorsDaylightBottom.ino | 34 +++++ .../LightSensorsInfrared.ino | 34 +++++ .../Power_Measurements/Motors/Motors.ino | 22 +++ .../Motors_Full/Motors_Full.ino | 24 ++++ .../Power_Measurements/RGB_LED/RGB_LED.ino | 44 ++++++ .../Power_Measurements/Template/Template.ino | 32 +++++ .../Power_Measurements/VEML6040/VEML6040.ino | 34 +++++ .../advanced/Power_Measurements/WLAN/WLAN.ino | 36 +++++ src/power/Power.cpp | 40 ++++++ src/power/Power.h | 35 +++++ 15 files changed, 597 insertions(+) create mode 100644 example/advanced/Power_Measurements/Display/Display.ino create mode 100644 example/advanced/Power_Measurements/ESP32_baseline/ESP32_baseline.ino create mode 100644 example/advanced/Power_Measurements/IMU/IMU.ino create mode 100644 example/advanced/Power_Measurements/IR_LED/IR_LED.ino create mode 100644 example/advanced/Power_Measurements/LightSensorsDaylight/LightSensorsDaylight.ino create mode 100644 example/advanced/Power_Measurements/LightSensorsDaylightBottom/LightSensorsDaylightBottom.ino create mode 100644 example/advanced/Power_Measurements/LightSensorsInfrared/LightSensorsInfrared.ino create mode 100644 example/advanced/Power_Measurements/Motors/Motors.ino create mode 100644 example/advanced/Power_Measurements/Motors_Full/Motors_Full.ino create mode 100644 example/advanced/Power_Measurements/RGB_LED/RGB_LED.ino create mode 100644 example/advanced/Power_Measurements/Template/Template.ino create mode 100644 example/advanced/Power_Measurements/VEML6040/VEML6040.ino create mode 100644 example/advanced/Power_Measurements/WLAN/WLAN.ino create mode 100644 src/power/Power.cpp create mode 100644 src/power/Power.h diff --git a/example/advanced/Power_Measurements/Display/Display.ino b/example/advanced/Power_Measurements/Display/Display.ino new file mode 100644 index 0000000..c455fc4 --- /dev/null +++ b/example/advanced/Power_Measurements/Display/Display.ino @@ -0,0 +1,26 @@ +#include "Dezibot.h" + +Dezibot dezibot = Dezibot(); + +// How many times to run a command on the display consecutively; +const uint16_t iterations = 5000; + +void setup() { + dezibot.begin(); +} + +void loop() { + //Typical output + dezibot.display.println("Typical output"); + for(uint16_t iter=0; iterfree_power_budget = this->total_power_budget; +} + +bool Power::tryAccquirePowerAllowance(uint16_t neededPower) +{ + if (this->free_power_budget >= neededPower) + { + this->free_power_budget -= neededPower; + return true; + } + else + { + return false; + } +} + +void Power::releasePower(uint16_t power) +{ + if (this->free_power_budget + power <= this->total_power_budget) + { + this->free_power_budget += power; + } + else // TODO: Maybe we should actually throw an error here, since obviouslsy someone used us wrong. + { + this->free_power_budget = this->total_power_budget; + } +} diff --git a/src/power/Power.h b/src/power/Power.h new file mode 100644 index 0000000..b4b64f9 --- /dev/null +++ b/src/power/Power.h @@ -0,0 +1,35 @@ +/** + * @file Power.h + * @author Phillip Kühne + * @brief This component provides utilities for keeping track of power usage + * consumption. + * @version 0.1 + * @date 2024-11-23 + */ + +#include + +#ifndef Power_h +#define Power_h + +#define TOTAL_POWER_MILLIWATTS 700 + +class Power { + protected: + static const uint16_t total_power_budget = TOTAL_POWER_MILLIWATTS; + uint16_t free_power_budget; + + public: + Power(); + uint16_t getFreePowerBudget(void); + /// @brief Request an allowance of a certain number of milliwatts from the power scheduler + /// @param neededPower the amount of power we want to be accounted for (in mW) + /// @return whether the power could be successfully allocated + bool tryAccquirePowerAllowance(uint16_t neededPower); + /// @brief "Return" a certain amount of power when it is no longer needed + /// @param power the amount of power to return (in mW) + /// @return whether the power + void releasePower(uint16_t power); +}; + +#endif //Power \ No newline at end of file