/***************************************************
Created By [email protected]
Midi Controller for sending CC and codes to synths and pedals
****************************************************/
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
//#include "MIDI.h" < find library
// MIDI Serial Connections
//#define MIDI_IN 0 // labled RX
//#define MIDI_OUT 1 // labled TX
// Encoder Pins
#define Encoder_CLK 2
#define Encoder_DT 3
#define Encoder_Button 4
// Footswitch Pin
#define Foot_Switch 5
// TFT TOUCH Pins
//#define TFT_TOUCH_CS 6
//#define TFT_TOUCH_IRQ 7
#define TFT_DC 9
#define TFT_CS 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); //for Arduino Uno
//#define TFT_MOSI 16
//#define TFT_CLK 15
//#define TFT_RST 8 //important!!
//#define TFT_MISO 14
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
// TFT LED Pin for Brightness control
//#define TFT_LED 18 // Labeled A0
// Toogle Switch
//#define Toggle_Switch 19 // labeled A1 for Pro Micro
#define Toggle_Switch A1 // for Wowki
// Piezo Buzzer
#define PiezoBuzzer 21 // labled A3
bool commandChanged;
bool debugMode;
bool stateChanged;
int commandMargins = 8;
int lastClk = LOW;
int lastButtonState = HIGH;
int lastFSState = HIGH;
int lastTSState = HIGH;
int guiState; // 0=Menu 1=Page_1_Preset 2=Page_2_Preset 3=Page_3_Preset 4=Page_4_Preset 5=CC_and_Controls
//char commandString[15]; // doesnt work!!
unsigned long lastDebounceTime = 0; // the last time the output pin was toggled
unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers
void setup() {
Serial.begin(9600);
Serial.println("MIDI Controller Init");
Serial.println("Set Variables");
pinMode(Encoder_CLK, INPUT);
pinMode(Encoder_DT, INPUT);
pinMode(Encoder_Button, INPUT_PULLUP);
pinMode(Foot_Switch, INPUT_PULLUP);
pinMode(Toggle_Switch, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(Encoder_CLK), readEncoder, FALLING);
Serial.println("Screen Setup");
tft.begin();
tft.setRotation(0);
Serial.println("Sending Startup Logo");
drawLogo();
stateChanged = true;
guiState = 1;
Serial.println("Checking for startup mods");
checkDebugState();
int lastTSState = digitalRead(Toggle_Switch);
toggleMode();
Serial.println("Moving to Main Menu");
}
void loop(void) {
buttonRead();
if (stateChanged == true) {
Serial.println("Refreshing Display");
drawMain();
buttonRead();
stateChanged = false;
}
}
void checkDebugState() {
int newFSState = digitalRead(Foot_Switch);
if (newFSState != HIGH) {
Serial.println("FootSwitch press detected during boot.");
delay(3000);
if (newFSState != HIGH) {
debugMode = true;
Serial.println("FootSwitch held for 3 seconds.");
Serial.println("Entering Debug Mode.");
}
}
}