Files
AciduinoCV/UserInterface.ino

188 lines
4.5 KiB
C++

/*
[page select]: press button1 and button2 together
knobs: none, none, none, none
buttons: track 1, track 2, [live mode], [generative], [step edit], play/stop
*/
uint32_t _page_blink_timer = 0;
uint8_t _bpm_blink_timer = 1;
uint8_t _selected_page = 0;
void configureInterface()
{
// Buttons config
connectButton(GENERIC_BUTTON_1, GENERIC_BUTTON_1_PIN);
connectButton(GENERIC_BUTTON_2, GENERIC_BUTTON_2_PIN);
connectButton(GENERIC_BUTTON_3, GENERIC_BUTTON_3_PIN);
connectButton(GENERIC_BUTTON_4, GENERIC_BUTTON_4_PIN);
connectButton(GENERIC_BUTTON_5, GENERIC_BUTTON_5_PIN);
connectButton(GENERIC_BUTTON_6, GENERIC_BUTTON_6_PIN);
// Pots config
connectPot(GENERIC_POT_1, GENERIC_POT_1_PIN);
connectPot(GENERIC_POT_2, GENERIC_POT_2_PIN);
connectPot(GENERIC_POT_3, GENERIC_POT_3_PIN);
connectPot(GENERIC_POT_4, GENERIC_POT_4_PIN);
// Leds config
pinMode(GENERIC_LED_1, OUTPUT);
pinMode(GENERIC_LED_2, OUTPUT);
pinMode(GENERIC_LED_3, OUTPUT);
pinMode(GENERIC_LED_4, OUTPUT);
pinMode(GENERIC_LED_5, OUTPUT);
pinMode(GENERIC_LED_6, OUTPUT);
digitalWrite(GENERIC_LED_1, LOW);
digitalWrite(GENERIC_LED_2, LOW);
digitalWrite(GENERIC_LED_3, LOW);
digitalWrite(GENERIC_LED_4, LOW);
digitalWrite(GENERIC_LED_5, LOW);
digitalWrite(GENERIC_LED_6, LOW);
// first read to fill our registers
getPotChanges(GENERIC_POT_1, 0, ADC_RESOLUTION);
getPotChanges(GENERIC_POT_2, 0, ADC_RESOLUTION);
getPotChanges(GENERIC_POT_3, 0, ADC_RESOLUTION);
getPotChanges(GENERIC_POT_4, 0, ADC_RESOLUTION);
}
void processInterface()
{
static int16_t tempo;
// set external sync on/off
if ( holded(GENERIC_BUTTON_6, 2) ) {
if ( uClock.getMode() == uClock.INTERNAL_CLOCK ) {
setExternalSync(true);
} else {
setExternalSync(false);
}
}
// global controllers play and tempo
// play/stop
if ( pressed(GENERIC_BUTTON_6) ) {
if ( _playing == false ) {
// Starts the clock, tick-tac-tick-tac...
uClock.start();
} else {
// stop the clock
uClock.stop();
}
}
// internal/external led control
if ( uClock.getMode() == uClock.INTERNAL_CLOCK ) {
if ( _playing == false ) {
digitalWrite(GENERIC_LED_6 , LOW);
}
} else {
// external clock keeps the timer led always on
digitalWrite(GENERIC_LED_6 , HIGH);
}
// page select request
if ( doublePressed(GENERIC_BUTTON_1, GENERIC_BUTTON_2) ) {
lockPotsState(true);
_selected_page = 0;
}
switch ( _selected_page ) {
// Select Track/Page
case 0:
processPageButtons();
processPageLeds();
break;
// Midi controller
case 1:
processControllerButtons();
processControllerLeds();
processControllerPots();
break;
// Generative
case 2:
processGenerativeButtons();
processGenerativeLeds();
processGenerativePots();
break;
// Sequencer
case 3:
processSequencerButtons();
processSequencerLeds();
processSequencerPots();
break;
}
}
void processPageButtons()
{
if ( pressed(GENERIC_BUTTON_1) ) {
_selected_track = 0;
}
if ( pressed(GENERIC_BUTTON_2) ) {
_selected_track = 1;
}
if ( pressed(GENERIC_BUTTON_3) ) {
lockPotsState(true);
_selected_page = 1;
}
if ( pressed(GENERIC_BUTTON_4) ) {
lockPotsState(true);
_selected_page = 2;
}
if ( pressed(GENERIC_BUTTON_5) ) {
lockPotsState(true);
_selected_page = 3;
}
}
void processPageLeds()
{
static bool blink_state = true;
// blink interface here for button 3 to 5
if ( millis() - _page_blink_timer >= 300 ) {
blink_state = !blink_state;
_page_blink_timer = millis();
}
digitalWrite(GENERIC_LED_3, blink_state);
digitalWrite(GENERIC_LED_4, blink_state);
digitalWrite(GENERIC_LED_5, blink_state);
if ( _selected_track == 0 ) {
digitalWrite(GENERIC_LED_1, HIGH);
digitalWrite(GENERIC_LED_2, LOW);
} else if ( _selected_track == 1 ) {
digitalWrite(GENERIC_LED_1, LOW);
digitalWrite(GENERIC_LED_2, HIGH);
}
}
void tempoInterface(uint32_t * tick)
{
if (uClock.getMode() == uClock.INTERNAL_CLOCK) {
// BPM led indicator
if ( !(*tick % (96)) || (*tick == 0) ) { // first compass step will flash longer
_bpm_blink_timer = 8;
digitalWrite(GENERIC_LED_6 , HIGH);
} else if ( !(*tick % (24)) ) { // each quarter led on
digitalWrite(GENERIC_LED_6 , HIGH);
} else if ( !(*tick % _bpm_blink_timer) ) { // get led off
digitalWrite(GENERIC_LED_6 , LOW);
_bpm_blink_timer = 1;
}
}
}