//#include <MIDI.h>
#include <ArduinoJson.h>
#include <SD.h>
#include <SPI.h>
#include <ButtonGestures.h>
#include <LCD_I2C.h>
#define MIDI_CHANNEL_GLOBAL 1
#define BUTTON_A 2
#define BUTTON_B 3
#define BUTTON_C 4
#define BUTTON_D 5
#define BUTTON_E 6
#define BUTTON_F 7
#define BUTTON_CONFIG 8 // botão config
#define CS_PIN 10
#define pinFxPot A0 // potenciômetro do pedal de expressão
LCD_I2C lcd(0x27, 16, 2); // Default address of most PCF8574 modules, change according
#define MODE_CLICK 0
#define MODE_CONFIG 1
byte currentMode = MODE_CLICK;
// --- Variáveis Globais ---
int menuNumber = 1;
bool subMenu = 0;
int banks[10][6] {
{0,1,2,3,4,5},
{6,7,8,9,10,11},
// {12,13,14,15,16,17},
// {18,19,20,21,22,23},
// {24,25,26,27,28,29},
// {30,31,32,33,34,35},
// {36,37,38,39,40,41},
// {42,43,44,45,46,47},
// {48,49,50,51,52,53},
// {54,55,56,57,58,59},
};
int presets[10][6] {
{0,1,2,3,4,5},
{6,7,8,9,10,11},
{12,13,14,15,16,17},
{18,19,20,21,22,23},
{24,25,26,27,28,29},
{30,31,32,33,34,35},
{36,37,38,39,40,41},
{42,43,44,45,46,47},
{48,49,50,51,52,53},
{54,55,56,57,58,59},
};
int bank = 0;
int bankPosition = 0;
int lastStateFxPot;
// Arduino pin | Active HIGH/LOW | Input Mode
ButtonGestures buttonA(BUTTON_A, LOW, INPUT_PULLUP);
ButtonGestures buttonB(BUTTON_B, LOW, INPUT_PULLUP);
ButtonGestures buttonC(BUTTON_C, LOW, INPUT_PULLUP);
ButtonGestures buttonD(BUTTON_D, LOW, INPUT_PULLUP);
ButtonGestures buttonE(BUTTON_E, LOW, INPUT_PULLUP);
ButtonGestures buttonF(BUTTON_F, LOW, INPUT_PULLUP);
ButtonGestures buttonConfig(BUTTON_CONFIG, LOW, INPUT_PULLUP);
// Configuration that we'll store on disk
struct Config {
char hostname[64];
int port;
};
const char *filename = "/config.txt"; // <- SD library uses 8.3 filenames
Config config; // <- global configuration object
File dataFile;
void changeDisplay(int bankValue) {
lcd.setCursor(0, 0);
lcd.print(F(">"));
}
void report_button(const uint8_t state, const uint8_t button) {
switch (state) {
case SINGLE_PRESS_SHORT:
Serial.println(F("Single click"));
execClick(button, 1);
break;
case SINGLE_PRESS_LONG:
Serial.println(F("Single click and hold"));
execClick(button, 2);
break;
case DOUBLE_PRESS_SHORT:
execClick(button, 3);
Serial.println(F("Double click"));
break;
case DOUBLE_PRESS_LONG:
Serial.println(F("Double click and hold"));
execClick(button, 4);
break;
case TRIPLE_PRESS_SHORT:
Serial.println(F("Triple click"));
execClick(button, 5);
break;
case TRIPLE_PRESS_LONG:
Serial.println(F("Triple click and hold"));
execClick(button, 6);
break;
case NOT_PRESSED:
default:
return;
}
}
//executar o clique
void execClick(const uint8_t button, const uint8_t clickType) {
Serial.println(button);
Serial.println(clickType);
// 1 recuperar os dados do clique em questão para executar
// qual banco
// qual footswitch
// qual tipo de clique
// 2 executar
}
void setup(void) {
Serial.begin(9600);
//MIDI.begin(MIDI_CHANNEL_OMNI);
pinMode(pinFxPot,INPUT);
lastStateFxPot = constrain(map(analogRead(pinFxPot), 0, 1023, 0, 127), 0, 127);
Serial.println(F("123123123"));
while (!Serial) continue;
// Initialize SD library
while (!SD.begin()) {
Serial.println(F("Failed to initialize SD library"));
delay(1000);
}
// Should load default config if run for the first time
Serial.println(F("Loading configuration..."));
loadConfiguration(filename, config);
// Dump config file
Serial.println(F("Print config file..."));
printFile(filename);
// Create configuration file
Serial.println(F("Saving configuration..."));
saveConfiguration(filename, config);
// Dump config file
Serial.println(F("Print config file..."));
printFile(filename);
}
void loop(void) {
report_button(buttonA.check_button(), 1);
report_button(buttonB.check_button(), 2);
report_button(buttonC.check_button(), 3);
report_button(buttonD.check_button(), 4);
report_button(buttonE.check_button(), 5);
report_button(buttonF.check_button(), 6);
report_button(buttonConfig.check_button(), 7);
int mapPot = constrain(map(analogRead(pinFxPot), 0, 1023, 0, 127), 0, 127);
if (abs(mapPot - lastStateFxPot) > 1) {
Serial.print("Leitura = ");
Serial.print(mapPot);
Serial.print(" | Ultimo = ");
Serial.println(lastStateFxPot);
}
lastStateFxPot = constrain(map(analogRead(pinFxPot), 0, 1023, 0, 127), 0, 127);
}