diff --git a/purrChestrion-arduino/purrChestrion-arduino.ino b/purrChestrion-arduino/purrChestrion-arduino.ino index 136a407..7f33b54 100644 --- a/purrChestrion-arduino/purrChestrion-arduino.ino +++ b/purrChestrion-arduino/purrChestrion-arduino.ino @@ -1,6 +1,6 @@ #define FW_VER 1.0 -#define USE_OLED true // LEDC68 (Gotek alphanumeric displays) -#define USE_ENCODER false +#define USE_OLED true // OLED displays +#define USE_ENCODER true // include libraries #include @@ -18,7 +18,9 @@ #endif #if USE_ENCODER - + #define ENCODER_CLK 2 + #define ENCODER_DT 3 + int lastClk = HIGH; #endif // Instantiate libraries @@ -93,10 +95,9 @@ MCPOutput noteToMCP[32] = { void updateOLED() { #if USE_OLED oled.clearDisplay(); - oled.drawBitmap(0, 0, midich, MIDICH_WIDTH, MIDICH_HEIGHT, 1); - oled.setCursor(88, 18); + oled.drawBitmap(0, 13, midich, MIDICH_WIDTH, MIDICH_HEIGHT, 1); + oled.setCursor(86, 32); oled.setTextColor(SSD1306_WHITE); - oled.setTextSize(1); if (currentMidiChannel == MIDI_CHANNEL_OMNI) { oled.print("ALL"); } else { @@ -106,6 +107,26 @@ void updateOLED() { #endif } +void checkEncoder() { + #if USE_ENCODER + int newClk = digitalRead(ENCODER_CLK); + if (newClk != lastClk && newClk == LOW) { + if (digitalRead(ENCODER_DT) == LOW) { + currentMidiChannel++; + } else { + currentMidiChannel--; + } + + // Wraparound: OMNI = 0, channels 1–16 + if (currentMidiChannel > 16) currentMidiChannel = 0; + if (currentMidiChannel < 0) currentMidiChannel = 16; + + updateOLED(); + } + lastClk = newClk; + #endif +} + void setup() { #if USE_OLED if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // I2C addr 0x3C @@ -122,6 +143,10 @@ void setup() { } #endif + #if USE_ENCODER + pinMode(ENCODER_CLK, INPUT_PULLUP); + pinMode(ENCODER_DT, INPUT_PULLUP); + #endif // Midi Activity LED on Pin 13 (aka LED_BUILTIN) pinMode(LED_BUILTIN, OUTPUT); @@ -146,6 +171,10 @@ void setup() { void loop() { MIDI.read(); + #if USE_ENCODER + checkEncoder(); + #endif + // LED feedback if (ledActive && millis() - ledOnTime >= ledDuration) { digitalWrite(LED_BUILTIN, LOW);