Skip to content

Commit 632f423

Browse files
uplift logic from WaterPumpController to AdjustedWaterPump
1 parent 68fe43a commit 632f423

File tree

9 files changed

+61
-15
lines changed

9 files changed

+61
-15
lines changed

controller/tea_poor/lib/Arduino/WaterPumpController.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ void WaterPumpController::setup() {
2020
stop();
2121
}
2222

23-
void WaterPumpController::start(int powerInPercents) {
24-
const int power = map(powerInPercents, 0, 100, 0, _maxPower);
23+
void WaterPumpController::start(int power) {
2524
_isRunning = true;
2625
digitalWrite(_brakePin, LOW); // release breaks
2726
analogWrite(_powerPin, power);

controller/tea_poor/lib/Arduino/WaterPumpController.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@ class WaterPumpController: public IWaterPump {
77
const int _directionPin;
88
const int _brakePin;
99
const int _powerPin;
10-
const int _maxPower = 255;
1110
bool _isRunning = false;
1211
public:
1312
WaterPumpController(int directionPin, int brakePin, int powerPin);
1413
virtual ~WaterPumpController() override;
1514

1615
virtual void setup() override;
17-
virtual void start(int powerInPercents) override;
16+
virtual void start(int power) override;
1817
virtual void stop() override;
1918

2019
virtual bool isRunning() const override { return _isRunning; }
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#ifndef ADJUSTEDWATERPUMP_H
2+
#define ADJUSTEDWATERPUMP_H
3+
#include <IWaterPump.h>
4+
#include <math.h>
5+
6+
// lightweight wrapper around IWaterPump
7+
// its purpose is to adjust power value to the range of 0..255, for now
8+
class AdjustedWaterPump: public IWaterPump {
9+
private:
10+
const IWaterPumpPtr _pump;
11+
public:
12+
AdjustedWaterPump(IWaterPumpPtr pump) : _pump(pump) {}
13+
virtual ~AdjustedWaterPump() override {}
14+
15+
virtual void setup() override { _pump->setup(); }
16+
virtual void stop() override { _pump->stop(); }
17+
virtual bool isRunning() const override { return _pump->isRunning(); }
18+
19+
virtual void start(int powerInPercents) override {
20+
// convert percents to 0..255 range, using float
21+
const float power = (255.0f / 100.0f) * (float)powerInPercents;
22+
_pump->start(floor(power));
23+
}
24+
};
25+
26+
#endif

controller/tea_poor/lib/interfaces/IWaterPump.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class IWaterPump {
88
virtual ~IWaterPump() {}
99

1010
virtual void setup() = 0;
11-
virtual void start(int powerInPercents) = 0;
11+
virtual void start(int power) = 0;
1212
virtual void stop() = 0;
1313

1414
virtual bool isRunning() const = 0;

controller/tea_poor/src/main.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <Arduino.h>
22
#include <memory>
33
#include <WaterPumpController.h>
4+
#include <AdjustedWaterPump.h>
45
#include <WaterPumpScheduler.h>
56
#include <RemoteControl.h>
67
#include <CommandProcessor.h>
@@ -9,12 +10,14 @@
910
#include <sstream>
1011
#include <ArduinoEnvironment.h>
1112

12-
const IEnvironmentPtr env = std::make_shared<ArduinoEnvironment>();
13+
const auto env = std::make_shared<ArduinoEnvironment>();
1314

1415
// Setting up water pump
1516
const auto waterPump = std::make_shared<WaterPumpScheduler>(
16-
std::make_shared<WaterPumpController>(
17-
WATER_PUMP_DIRECTION_PIN, WATER_PUMP_BRAKE_PIN, WATER_PUMP_POWER_PIN
17+
std::make_shared<AdjustedWaterPump>(
18+
std::make_shared<WaterPumpController>(
19+
WATER_PUMP_DIRECTION_PIN, WATER_PUMP_BRAKE_PIN, WATER_PUMP_POWER_PIN
20+
)
1821
), env
1922
);
2023

controller/tea_poor/test/test_native/main.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// include tests
44
#include "tests/WaterPumpScheduler_test.h"
55
#include "tests/CommandProcessor_test.h"
6+
#include "tests/AdjustedWaterPump_test.h"
67

78
int main(int argc, char **argv) {
89
::testing::InitGoogleTest(&argc, argv);
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#include <gtest/gtest.h>
2+
#include "mocks/FakeWaterPump.h"
3+
#include <AdjustedWaterPump.h>
4+
5+
// test that pumps power passed as percents is converted to 0..255 range
6+
TEST(AdjustedWaterPump, test_pumps_power_passed_as_percents_is_converted_to_0_255_range) {
7+
const auto fakeWaterPump = std::make_shared<FakeWaterPump>();
8+
AdjustedWaterPump adjustedWaterPump(fakeWaterPump);
9+
// list of pairs: (powerInPercents, expectedPower)
10+
const std::vector<std::pair<int, int>> tests = {
11+
{0, 0}, {1, 2}, {2, 5},
12+
{50, 127}, {100, 255}
13+
};
14+
for(const auto& test: tests) {
15+
adjustedWaterPump.start(test.first);
16+
ASSERT_EQ(fakeWaterPump->power(), test.second);
17+
}
18+
}

controller/tea_poor/test/test_native/tests/WaterPumpScheduler_test.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ TEST(WaterPumpScheduler, test_pump_stops_after_given_time) {
1414
// start water pump
1515
fakeEnvironment->time(0);
1616
waterPumpScheduler.start(runTimeMs, 1);
17-
ASSERT_EQ(fakeWaterPump->powerInPercents(), 1);
17+
ASSERT_EQ(fakeWaterPump->power(), 1);
1818
// check status
1919
auto status = waterPumpScheduler.status();
2020
ASSERT_TRUE(status.isRunning);
@@ -48,7 +48,7 @@ TEST(WaterPumpScheduler, test_pump_is_periodically_forced_to_stop_after_given_ti
4848
for(int i = 0; i < 10; i++) {
4949
// emulate that pump was started again
5050
fakeWaterPump->start(1);
51-
ASSERT_EQ(fakeWaterPump->powerInPercents(), 1);
51+
ASSERT_EQ(fakeWaterPump->power(), 1);
5252
fakeEnvironment->time(fakeEnvironment->time() + T);
5353
waterPumpScheduler.tick();
5454
ASSERT_FALSE(fakeWaterPump->isRunning()); // pump should be stopped
@@ -63,5 +63,5 @@ TEST(WaterPumpScheduler, test_pumps_power_is_set_to_specified_value) {
6363
waterPumpScheduler.setup();
6464
const int power = 23;
6565
waterPumpScheduler.start(1, power);
66-
ASSERT_EQ(fakeWaterPump->powerInPercents(), power);
66+
ASSERT_EQ(fakeWaterPump->power(), power);
6767
}

controller/tea_poor/test/test_native/tests/mocks/FakeWaterPump.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77
class FakeWaterPump : public IWaterPump {
88
private:
99
bool _isRunning = false;
10-
int _powerInPercents = 0;
10+
int _power = 0;
1111
public:
1212
void setup() override { _isRunning = false; }
1313
void stop() override { _isRunning = false; }
14-
void start(int powerInPercents) override {
14+
void start(int power) override {
1515
_isRunning = true;
16-
_powerInPercents = powerInPercents;
16+
_power = power;
1717
}
1818

1919
bool isRunning() const override { return _isRunning; }
20-
int powerInPercents() const { return _powerInPercents; }
20+
int power() const { return _power; }
2121
};
2222

2323
#endif // FAKE_WATER_PUMP_H

0 commit comments

Comments
 (0)