diff --git a/jackalope/jackalope.ino b/jackalope/jackalope.ino index 2139a92feec12f0c4a5e878c0c30897176d73983..283640a29b31156494b3af8970166e0d86c953db 100644 --- a/jackalope/jackalope.ino +++ b/jackalope/jackalope.ino @@ -1,5 +1,5 @@ #include <math.h> -#include <Wire.h> +#include <twi.h> #include <hexbright.h> // Modes @@ -16,10 +16,15 @@ #define MODE_TAPS_RECORD 10 #define MODE_TAPS_PLAYBACK 11 +#define BUFSIZE 128 + // State byte mode; hexbright hb; char fade_direction = -1; +unsigned int loops; +unsigned int recording[BUFSIZE]; +int nTaps, curTap; /*** * @@ -219,9 +224,14 @@ void loop() break; case MODE_TAPS_RECORD: Serial.println("Mode = taps_record"); + recording[BUFSIZE] = 0; break; case MODE_TAPS_PLAYBACK: Serial.println("Mode = taps_playback"); + recording[0] = 0; + recording[nTaps] = loops; + loops = 0; + curTap = 0; break; } mode = newMode; @@ -275,20 +285,40 @@ void loop() if (hb.get_led_state(GLED) == LED_OFF) { hb.set_led(GLED, 50, 100, 255); } + hb.set_light(CURRENT_LEVEL, brightness[0], NOW); } if (mode == MODE_TAPS_RECORD) { if (hb.get_led_state(RLED) == LED_OFF) { hb.set_led(RLED, 50, 250, 255); } + if (nTaps<BUFSIZE-1) { + if(hb.tapped() && loops>5 && !button_pressed && !button_just_pressed && !button_just_released) { + Serial.println("Tap!"); + recording[nTaps++] = loops; // how many loops passed before a tap? + loops = 0; // reset our counter + hb.set_light(MAX_LEVEL, 200, 150); + } + } } if (mode == MODE_TAPS_PLAYBACK) { if (hb.get_led_state(GLED) == LED_OFF) { hb.set_led(GLED, 50, 250, 255); } + if (loops > recording[curTap]) { + if (curTap < nTaps) { + hb.set_light(MAX_LEVEL, 200, 150); + curTap++; + } else { + curTap = 0; + } + loops = 0; + } } + loops++; + } void cycleBrightness() {