diff --git a/Code/devterm_keyboard/debouncer.h b/Code/devterm_keyboard/debouncer.h deleted file mode 100644 index dc36f17..0000000 --- a/Code/devterm_keyboard/debouncer.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef DEBOUNCER_H -#define DEBOUNCER_H - -#include - -typedef uint8_t millis_t; - -const millis_t DEBOUNCE_MS = 5; - -/** - @brief Asymmetric debouncer -*/ -class Debouncer { - public: - Debouncer(); - void updateTime(millis_t delta); - bool sample(bool value); - private: - millis_t timeout; -}; - -template -class Timeout { - public: - Timeout() { - timeout = 0; - } - - void updateTime(millis_t delta) { - if (timeout > delta) { - timeout -= delta; - } else { - timeout = 0; - } - } - - void expire() { - timeout = 0; - } - - bool get() const { - return timeout == 0; - } - - void reset() { - timeout = millis; - } - private: - uint16_t timeout; -}; - - -#endif diff --git a/Code/devterm_keyboard/debouncer.ino b/Code/devterm_keyboard/debouncer.ino deleted file mode 100644 index 93cd13d..0000000 --- a/Code/devterm_keyboard/debouncer.ino +++ /dev/null @@ -1,23 +0,0 @@ -#include "debouncer.h" - -Debouncer::Debouncer() - : timeout(0) -{ -} - -void Debouncer::updateTime(millis_t delta) { - if (timeout > delta) { - timeout -= delta; - } else { - timeout = 0; - } -} - -bool Debouncer::sample(bool value) { - if (value || timeout == 0) { - timeout = DEBOUNCE_MS; - return true; - } - - return false; -} diff --git a/Code/devterm_keyboard/glider.h b/Code/devterm_keyboard/glider.h deleted file mode 100644 index f4f9785..0000000 --- a/Code/devterm_keyboard/glider.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef GLIDER_H -#define GLIDER_H - -#include - - -class Glider { -public: - Glider(); - void setDirection(int8_t); - void update(float velocity, uint16_t sustain); - void updateSpeed(float velocity); - void stop(); - - struct GlideResult { - int8_t value; - bool stopped; - }; - GlideResult glide(uint8_t delta); - -public: - int8_t direction; - float speed; - uint16_t sustain; - uint16_t release; - float error; -}; - -#endif diff --git a/Code/devterm_keyboard/glider.ino b/Code/devterm_keyboard/glider.ino deleted file mode 100644 index 8ecb221..0000000 --- a/Code/devterm_keyboard/glider.ino +++ /dev/null @@ -1,60 +0,0 @@ -#include - -#include "glider.h" -#include "math.h" - -Glider::Glider() -: speed(0), - sustain(0), - release(0), - error(0) -{} - -void Glider::setDirection(int8_t direction) { - if (this->direction != direction) { - stop(); - } - this->direction = direction; -} - -void Glider::update(float speed, uint16_t sustain) { - this->speed = speed; - this->sustain = sustain; - this->release = sustain; -} - -void Glider::updateSpeed(float speed) { - this->speed = speed; -} - -void Glider::stop() { - this->speed = 0; - this->sustain = 0; - this->release = 0; - this->error = 0; -} - -Glider::GlideResult Glider::glide(millis_t delta) { - const auto alreadyStopped = speed == 0; - - error += speed * delta; - int8_t distance = 0; - if (error > 0) { - distance = clamp(std::ceil(error)); - } - error -= distance; - - if (sustain > 0) { - const auto sustained = min(sustain, (uint16_t)delta); - sustain -= sustained; - } else if (release > 0) { - const auto released = min(release, (uint16_t)delta); - speed = speed * (release - released) / release; - release -= released; - } else { - speed = 0; - } - - const int8_t result = direction * distance; - return GlideResult { result, !alreadyStopped && speed == 0 }; -} diff --git a/Code/devterm_keyboard/ratemeter.h b/Code/devterm_keyboard/ratemeter.h deleted file mode 100644 index 451b189..0000000 --- a/Code/devterm_keyboard/ratemeter.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef RATEMETER_H -#define RATEMETER_H - -#include - -#include "debouncer.h" - -class RateMeter { -public: - RateMeter(); - void onInterrupt(); - void tick(millis_t delta); - void expire(); - - uint16_t delta() const; - // Hall sensor edges per seconds. - // stopped: 0 - // really slow => ~3 - // medium => ~30 - // fast => < 300 - // max => 1000 - float rate() const; - -private: - uint32_t lastTime; - - // really Range, emperically: - // fast => < 5_000 us, - // medium => 20_000 - 40_000 us - // really slow => 250_000 us - uint32_t averageDelta; - - static const uint16_t CUTOFF_MS = 1000; - // Cut off after some seconds to prevent multiple timestamp overflow (~70 mins) - Timeout cutoff; -}; - -#endif diff --git a/Code/devterm_keyboard/ratemeter.ino b/Code/devterm_keyboard/ratemeter.ino deleted file mode 100644 index bcc3528..0000000 --- a/Code/devterm_keyboard/ratemeter.ino +++ /dev/null @@ -1,47 +0,0 @@ -#include -#include - -#include "ratemeter.h" -#include "math.h" - -RateMeter::RateMeter() -: lastTime(0) -{} - -void RateMeter::onInterrupt() { - const auto now = millis(); - if (cutoff.get()) { - averageDelta = CUTOFF_MS; - } else { - const auto delta = getDelta(lastTime, now, CUTOFF_MS); - averageDelta = (averageDelta + delta) / 2; - } - lastTime = now; - cutoff.reset(); -} - -void RateMeter::tick(millis_t delta) { - cutoff.updateTime(delta); - if (!cutoff.get()) { - averageDelta += delta; - } -} - -void RateMeter::expire() { - cutoff.expire(); -} - -uint16_t RateMeter::delta() const { - return averageDelta; -} - -float RateMeter::rate() const { - if (cutoff.get()) { - return 0.0f; - } else if (averageDelta == 0) { - // to ensure range 0 ~ 1000.0 - return 1000.0f; - } else { - return 1000.0f / (float)averageDelta; - } -}