Skip to content

Commit

Permalink
🔀 Merge branch 'hugo/feature/Add-Angry-short-animation' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
ladislas committed Mar 9, 2022
2 parents fcfacd6 + e915dc2 commit 2414c9a
Show file tree
Hide file tree
Showing 4 changed files with 196 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 @@ -14,6 +14,7 @@ target_sources(LedKit
PRIVATE
source/AfraidBlue.cpp
source/AfraidRed.cpp
source/AngryShort.cpp
source/Bubbles.cpp
source/Disgusted.cpp
source/Fly.cpp
Expand Down
70 changes: 70 additions & 0 deletions libs/LedKit/include/internal/AngryShort.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// Leka - LekaOS
// Copyright 2022 APF France handicap
// SPDX-License-Identifier: Apache-2.0

// + Stage 1 + Stage 2 + Stage 3 + Stage 4+ Stage 5 + Stage 6 +
// | | | | | | |
// | |\ | -| | -| | --- Red
// | /| \ | / |\ | / |\ |
// | / | \ | / | \ | / | \ |
// | / | \ | / | \ | / | \ |
// | / | \ | / | \ | / | \ |
// | / | \ | / | \ | / | \ |
// | / | \ | / | \ | / | \ |
// | / | \ | / | \ | / | \ |
// | / | \| / | \| / | \ |
// | / | |/ | |/ | \ |
// | / | | | | | \ |
// | / | | | | | \ |
// | / | | | | | \ |
// | / | | | | | \ |
// | / | | | | | \ |
// | / | | | | | \ |
// | / | | | | | \ |
// | / | | | | | \ |
// | / | | | | | \ |
// |/ | | | | | \| --- Black
// | | | | | | |
// | | | | | | |

#pragma once

// ? LCOV_EXCL_START - Exclude from coverage report

#include "LEDAnimation.h"

namespace leka::led::animation {

class AngryShort : public interface::LEDAnimation
{
public:
explicit AngryShort(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) const -> float;

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

void increaseBrightness(float treshold);
void decreaseBrightness(float treshold);

void turnLedBlack();
};

} // namespace leka::led::animation

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

// ? LCOV_EXCL_START - Exclude from coverage report

#include "AngryShort.h"

#include "MathUtils.h"

namespace leka::led::animation {

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

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

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

auto AngryShort::mapStep(uint8_t step) const -> float
{
constexpr auto kMaxInputValue = uint8_t {40};
return utils::math::map(step, uint8_t {0}, kMaxInputValue, 0.F, 1.F);
}

void AngryShort::stage1()
{
increaseBrightness(1.F);
}

void AngryShort::stage2()
{
static constexpr auto kTreshold = 0.7F;
decreaseBrightness(kTreshold);
}

void AngryShort::stage3()
{
increaseBrightness(1.F);
}

void AngryShort::stage4()
{
static constexpr auto kTreshold = 0.7F;
decreaseBrightness(kTreshold);
}

void AngryShort::stage5()
{
increaseBrightness(1.F);
}

void AngryShort::stage6()
{
decreaseBrightness(0.F);
}

void AngryShort::increaseBrightness(float treshold)
{
if (auto pos = mapStep(_step); pos != treshold) {
RGB color = ColorKit::colorGradient(RGB::black, RGB::pure_red, pos);
_belt.setColor(color);
_step++;
} else {
_stage++;
}
}

void AngryShort::decreaseBrightness(float treshold)
{
if (auto pos = mapStep(_step); pos != treshold) {
RGB color = ColorKit::colorGradient(RGB::black, RGB::pure_red, pos);
_belt.setColor(color);
_step--;
} else {
_stage++;
}
}

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

} // namespace leka::led::animation

// ? LCOV_EXCL_STOP - Exclude from coverage report
5 changes: 5 additions & 0 deletions spikes/lk_led_kit/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

#include "AfraidBlue.h"
#include "AfraidRed.h"
#include "AngryShort.h"
#include "Bubbles.h"
#include "CoreLED.h"
#include "CoreSPI.h"
Expand Down Expand Up @@ -38,6 +39,7 @@ auto ledkit = LedKit {animation_thread, animation_event_queue, ears, belt};

led::animation::AfraidBlue animation_afraid_blue(ears, belt);
led::animation::AfraidRed animation_afraid_red(ears, belt);
led::animation::AngryShort animation_angry_short(ears, belt);
led::animation::Bubbles animation_bubbles(ears, belt);
led::animation::Disgusted animation_disgusted(ears, belt);
led::animation::Fly animation_fly {ears, belt};
Expand Down Expand Up @@ -78,6 +80,9 @@ auto main() -> int
ledkit.start(animation_afraid_blue);
rtos::ThisThread::sleep_for(10s);

ledkit.start(animation_angry_short);
rtos::ThisThread::sleep_for(10s);

ledkit.stop();
rtos::ThisThread::sleep_for(1s);
}
Expand Down

0 comments on commit 2414c9a

Please sign in to comment.