OLED + rotary encoder
This commit is contained in:
@@ -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 <Adafruit_MCP23X17.h>
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user