Skip to content

Commit

Permalink
✨ (animation): Add Waiting (by breathing) animation
Browse files Browse the repository at this point in the history
  • Loading branch information
HPezz committed Mar 8, 2022
1 parent 633575a commit 0001d1d
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 0 deletions.
1 change: 1 addition & 0 deletions libs/LedKit/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ target_include_directories(LedKit
target_sources(LedKit
PRIVATE
source/LedKit.cpp
source/Waiting.cpp
)

target_link_libraries(LedKit
Expand Down
60 changes: 60 additions & 0 deletions libs/LedKit/include/internal/Waiting.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// Leka - LekaOS
// Copyright 2022 APF France handicap
// SPDX-License-Identifier: Apache-2.0

// + + + + +
// | Stage 1 | Stage 2 | Stage 3 | Stage 4 |
// | | | | |
// | |-\ | |-\ | --- White
// | -/| -\ | -/| -\ |
// | -/ | -\ | -/ | -\ |
// | -/ | -\ | -/ | -\ |
// | -/ | -\ | -/ | -\ |
// | -/ | -\ | -/ | -\ |
// | -/ | -\ | -/ | -\ |
// | -/ | -\| -/ | -\ |
// | -/ | |/ | -\ |
// | -/ | | | -\ |
// | -/ | | | -\ |
// | -/ | | | -\ |
// | -/ | | | -\ |
// | -/ | | | -\| --- Black
// |/ | | | |
// | | | | |

#pragma once

// ? LCOV_EXCL_START - Exclude from coverage report

#include "LEDAnimation.h"

namespace leka::led::animation {

class Waiting : public interface::LEDAnimation
{
public:
explicit Waiting(interface::LED &ears, interface::LED &belt) : _ears(ears), _belt(belt) {};

void start() final;
void run() final;
void stop() final;

private:
interface::LED &_ears;
interface::LED &_belt;
uint8_t _step = 0;
uint8_t _stage = 1;

[[nodiscard]] auto mapStep(uint8_t step, uint8_t max_input_value) const -> float;

void stage1();
void stage2();
void stage3();
void stage4();

void turnLedBlack();
};

} // namespace leka::led::animation

// ? LCOV_EXCL_STOP - Exclude from coverage report
112 changes: 112 additions & 0 deletions libs/LedKit/source/Waiting.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
// Leka - LekaOS
// Copyright 2022 APF France handicap
// SPDX-License-Identifier: Apache-2.0

// ? LCOV_EXCL_START - Exclude from coverage report

#include "Waiting.h"

#include "MathUtils.h"

namespace leka::led::animation {

void Waiting::start()
{
turnLedBlack();
}

void Waiting::stop()
{
turnLedBlack();
}

void Waiting::run()
{
switch (_stage) {
case 1:
stage1();
break;
case 2:
stage2();
break;
case 3:
stage3();
break;
case 4:
stage4();
break;
default:
break;
}
_belt.show();
}

auto Waiting::mapStep(uint8_t step, uint8_t max_input_value) const -> float
{
return utils::math::map(step, uint8_t {0}, max_input_value, 0.F, 1.F);
}

void Waiting::stage1()
{
static constexpr auto kMaxInputValue1 = uint8_t {70};
static constexpr auto kMaxInputValue2 = uint8_t {50};
if (auto pos = mapStep(_step, kMaxInputValue1); pos != 1.F) {
RGB color = ColorKit::colorGradient(RGB::black, RGB::white, pos);
_belt.setColor(color);
_step++;
} else {
_step = kMaxInputValue2;
_stage++;
}
}

void Waiting::stage2()
{
static constexpr auto tresholdDown = 0.3F;
static constexpr auto kMaxInputValue2 = uint8_t {50};
if (auto pos = mapStep(_step, kMaxInputValue2); pos >= tresholdDown) {
RGB color = ColorKit::colorGradient(RGB::black, RGB::white, pos);
_belt.setColor(color);
_step--;
} else {
_stage++;
}
}

void Waiting::stage3()
{
static constexpr auto kMaxInputValue1 = uint8_t {70};
static constexpr auto kMaxInputValue2 = uint8_t {50};
if (auto pos = mapStep(_step, kMaxInputValue2); pos != 1.F) {
RGB color = ColorKit::colorGradient(RGB::black, RGB::white, pos);
_belt.setColor(color);
_step++;
} else {
_step = kMaxInputValue1;
_stage++;
}
}

void Waiting::stage4()
{
static constexpr auto kMaxInputValue1 = uint8_t {70};
if (auto pos = mapStep(_step, kMaxInputValue1); pos != 0.F) {
RGB color = ColorKit::colorGradient(RGB::black, RGB::white, pos);
_belt.setColor(color);
_step--;
} else {
_stage++;
}
}

void Waiting::turnLedBlack()
{
_ears.setColor(RGB::black);
_belt.setColor(RGB::black);
_ears.show();
_belt.show();
}

} // namespace leka::led::animation

// ? LCOV_EXCL_STOP - Exclude from coverage report

0 comments on commit 0001d1d

Please sign in to comment.