OLED + rotary encoder
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
#define FW_VER 1.0
|
#define FW_VER 1.0
|
||||||
#define USE_OLED true // LEDC68 (Gotek alphanumeric displays)
|
#define USE_OLED true // OLED displays
|
||||||
#define USE_ENCODER false
|
#define USE_ENCODER true
|
||||||
|
|
||||||
// include libraries
|
// include libraries
|
||||||
#include <Adafruit_MCP23X17.h>
|
#include <Adafruit_MCP23X17.h>
|
||||||
@@ -18,7 +18,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if USE_ENCODER
|
#if USE_ENCODER
|
||||||
|
#define ENCODER_CLK 2
|
||||||
|
#define ENCODER_DT 3
|
||||||
|
int lastClk = HIGH;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Instantiate libraries
|
// Instantiate libraries
|
||||||
@@ -93,10 +95,9 @@ MCPOutput noteToMCP[32] = {
|
|||||||
void updateOLED() {
|
void updateOLED() {
|
||||||
#if USE_OLED
|
#if USE_OLED
|
||||||
oled.clearDisplay();
|
oled.clearDisplay();
|
||||||
oled.drawBitmap(0, 0, midich, MIDICH_WIDTH, MIDICH_HEIGHT, 1);
|
oled.drawBitmap(0, 13, midich, MIDICH_WIDTH, MIDICH_HEIGHT, 1);
|
||||||
oled.setCursor(88, 18);
|
oled.setCursor(86, 32);
|
||||||
oled.setTextColor(SSD1306_WHITE);
|
oled.setTextColor(SSD1306_WHITE);
|
||||||
oled.setTextSize(1);
|
|
||||||
if (currentMidiChannel == MIDI_CHANNEL_OMNI) {
|
if (currentMidiChannel == MIDI_CHANNEL_OMNI) {
|
||||||
oled.print("ALL");
|
oled.print("ALL");
|
||||||
} else {
|
} else {
|
||||||
@@ -106,6 +107,26 @@ void updateOLED() {
|
|||||||
#endif
|
#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() {
|
void setup() {
|
||||||
#if USE_OLED
|
#if USE_OLED
|
||||||
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // I2C addr 0x3C
|
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // I2C addr 0x3C
|
||||||
@@ -122,6 +143,10 @@ void setup() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if USE_ENCODER
|
||||||
|
pinMode(ENCODER_CLK, INPUT_PULLUP);
|
||||||
|
pinMode(ENCODER_DT, INPUT_PULLUP);
|
||||||
|
#endif
|
||||||
// Midi Activity LED on Pin 13 (aka LED_BUILTIN)
|
// Midi Activity LED on Pin 13 (aka LED_BUILTIN)
|
||||||
pinMode(LED_BUILTIN, OUTPUT);
|
pinMode(LED_BUILTIN, OUTPUT);
|
||||||
|
|
||||||
@@ -146,6 +171,10 @@ void setup() {
|
|||||||
void loop() {
|
void loop() {
|
||||||
MIDI.read();
|
MIDI.read();
|
||||||
|
|
||||||
|
#if USE_ENCODER
|
||||||
|
checkEncoder();
|
||||||
|
#endif
|
||||||
|
|
||||||
// LED feedback
|
// LED feedback
|
||||||
if (ledActive && millis() - ledOnTime >= ledDuration) {
|
if (ledActive && millis() - ledOnTime >= ledDuration) {
|
||||||
digitalWrite(LED_BUILTIN, LOW);
|
digitalWrite(LED_BUILTIN, LOW);
|
||||||
|
|||||||
Reference in New Issue
Block a user