You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
- #include "Clock.hpp"
-
- namespace SynthDevKit {
- Clock::Clock (uint16_t count, float threshold) {
- if (count > CLOCK_LIMIT) {
- throw CLK_ERROR_TOO_MANY;
- }
-
- triggerThreshold = threshold;
- triggerCount = count;
- current = 0;
- ready = false;
- step = 0;
-
- cv = new CV(threshold);
-
- for (uint16_t i = 0; i < CLOCK_LIMIT; i++) {
- states[i] = false;
- }
- }
-
- bool *Clock::update (float input) {
- cv->update(input);
-
- // only become ready after the first trigger has occurred. this allows for
- // an interval to be set up
- if (!ready) {
- if (cv->newTrigger()) {
- ready = true;
- }
-
- return states;
- }
-
- current++;
-
- if (cv->newTrigger()) {
- step++;
- current = 0;
-
- for (uint16_t i = 0; i < triggerCount; i++) {
- states[i] = ((step % (i + 1)) == 0) ? true : false;
- }
- } else if (current >= cv->triggerInterval() / 2) {
- for (uint16_t i = 0; i < triggerCount; i++) {
- states[i] = false;
- }
- }
-
- if (step >= triggerCount) {
- step = 0;
- }
-
- return states;
- }
-
- void Clock::reset ( ) {
- current = 0;
- ready = false;
- step = 0;
-
- for (uint16_t i = 0; i < CLOCK_LIMIT; i++) {
- states[i] = false;
- }
-
- cv->reset();
- }
- }
|