#include <ezButton.h>
#include <ezLED.h>
#include <LiquidCrystal_I2C.h>
#include "Arduino.h"
#include <AnalogMultiButton.h>
#ifdef EXTENDED_PIN_MODE
// Platforms who want to declare more than 256 pins need to define EXTENDED_PIN_MODE globally
typedef uint32_t pin_size_t;
#else
typedef uint8_t pin_size_t;
#endif
const unsigned long DEBOUNCE_DELAY = 50;
const unsigned int BANK_UP = 0;
const unsigned int BANK_DOWN = 1;
const pin_size_t LED_PIN_PRESET1 = 10;
const pin_size_t LED_PIN_PRESET2 = 11;
const pin_size_t LED_PIN_PRESET3 = 12;
const pin_size_t LED_PIN_PRESET4 = 13;
const pin_size_t BTN_PIN_PRESET1 = 2;
const pin_size_t BTN_PIN_PRESET2 = 3;
const pin_size_t BTN_PIN_PRESET3 = 4;
const pin_size_t BTN_PIN_PRESET4 = 5;
const pin_size_t BTN_PIN_BANK_UP = 6;
const pin_size_t BTN_PIN_BANK_DOWN = 7;
ezButton btnBankArray[2] =
{
ezButton(BTN_PIN_BANK_UP),
ezButton(BTN_PIN_BANK_DOWN)
};
/*
ezButton btnEffectsArray[4] =
{
ezButton(BTN_PIN_FX_DELAY),
ezButton(BTN_PIN_FX_MOD),
ezButton(BTN_PIN_FX_REVERB),
ezButton(BTN_PIN_FX_BOOST)
};
*/
ezButton presetBtnArray[4] =
{
ezButton(BTN_PIN_PRESET1),
ezButton(BTN_PIN_PRESET2),
ezButton(BTN_PIN_PRESET3),
ezButton(BTN_PIN_PRESET4)
};
ezLED presetLedArray[4] =
{
ezLED(LED_PIN_PRESET1),
ezLED(LED_PIN_PRESET2),
ezLED(LED_PIN_PRESET3),
ezLED(LED_PIN_PRESET4)
};
// FX-Buttons
const int BUTTONS_PIN = A3;
const int BUTTONS_TOTAL = 4;
const int BUTTONS_VALUES[BUTTONS_TOTAL] = {0, 350, 700, 1023};
const int BTN_PIN_FX_DELAY = 0;
const int BTN_PIN_FX_MOD = 1;
const int BTN_PIN_FX_REVERB = 2;
const int BTN_PIN_FX_BOOST = 3;
AnalogMultiButton buttons(BUTTONS_PIN, BUTTONS_TOTAL, BUTTONS_VALUES);
int bankState;
int presetInBankState;
LiquidCrystal_I2C lcdDisplay(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
String preset = "Preset: ";
String bank = "Bank: ";
void setup()
{
Serial.begin(115200);
lcdDisplay.init();
lcdDisplay.backlight();
lcdDisplay.setCursor(0,0);
lcdDisplay.print("Initializing...");
bankState = 1;
presetInBankState = 1;
for( int i = 0; i < 2; i++ )
btnBankArray[i].setDebounceTime(DEBOUNCE_DELAY);
presetStateChange(presetInBankState);
}
void bankStateChange(int upDown)
{
switch(upDown)
{
case BANK_UP:
bankState += 1;
if( bankState == 128 )
bankState = 1;
break;
case BANK_DOWN:
bankState -= 1;
if( bankState == -1 )
bankState = 127;
break;
}
updateDisplay();
}
void presetStateChange(int selectedPreset)
{
for( int i = 0; i < 4; i++ )
presetLedArray[i].turnOFF();
presetLedArray[selectedPreset - 1].turnON();
presetInBankState = selectedPreset;
updateDisplay();
}
void updateDisplay()
{
lcdDisplay.clear();
lcdDisplay.setCursor(0,0);
lcdDisplay.print(bank + bankState);
lcdDisplay.setCursor(0,1);
lcdDisplay.print(preset + presetInBankState);
}
void loop()
{
for( int i = 0; i < 4; i++ )
{
presetBtnArray[i].loop();
presetLedArray[i].loop();
// btnEffectsArray[i].loop();
}
btnBankArray[0].loop();
btnBankArray[1].loop();
buttons.update();
Serial.println(analogRead(BTN_PIN_FX_DELAY));
Serial.println(analogRead(BTN_PIN_FX_MOD));
Serial.println(analogRead(BTN_PIN_FX_REVERB));
Serial.println(analogRead(BTN_PIN_FX_BOOST));
delay(250);
handlePresetChange();
handleBankChange();
handleFxChange();
}
void handlePresetChange()
{
for( int i = 0; i < 4; i++ )
{
if( presetBtnArray[i].isPressed() )
{
presetStateChange( i + 1 );
}
}
}
void handleBankChange()
{
for( unsigned int i = 0; i < 2; i++ )
{
if( btnBankArray[i].isPressed() )
bankStateChange(i);
}
}
void handleFxChange()
{
// check if BUTTON_RED is pressed
if(buttons.onRelease(BTN_PIN_FX_DELAY))
{
Serial.println("BTN_PIN_FX_DELAY is pressed");
}
if(buttons.onRelease(BTN_PIN_FX_MOD))
{
Serial.println("BTN_PIN_FX_MOD is pressed");
}
if(buttons.onRelease(BTN_PIN_FX_REVERB))
{
Serial.println("BTN_PIN_FX_REVERB is pressed");
}
if(buttons.onRelease(BTN_PIN_FX_BOOST))
{
Serial.println("BTN_PIN_FX_BOOST is pressed");
}
}