Add a capacitor between the reset pins of the displays and ground, and a resistor from reset to 3.3V. The values are not critical, 0.1µF and 10kΩ work fine.
You do need some way to reset the displays, without it, it won't work.
Alternatively, you could use an IO pin from the Teensy to reset the displays, but this just "wastes" a pin.
Map "Control Surface" as a Mackie Control Universal unit in your DAW.
constexpr uint8_t SCREEN_WIDTH = 128;
constexpr uint8_t SCREEN_HEIGHT = 64;
constexpr int8_t OLED_DC = 17;
constexpr int8_t OLED_reset = -1;
constexpr int8_t OLED_CS_L = 10;
constexpr int8_t OLED_CS_R = 18;
constexpr uint32_t SPI_Frequency = SPI_MAX_SPEED;
Adafruit_SSD1306 ssd1306Display_L {
SCREEN_WIDTH, SCREEN_HEIGHT, &SPI, OLED_DC,
OLED_reset, OLED_CS_L, SPI_Frequency,
};
Adafruit_SSD1306 ssd1306Display_R {
SCREEN_WIDTH, SCREEN_HEIGHT, &SPI, OLED_DC,
OLED_reset, OLED_CS_R, SPI_Frequency,
};
#if defined(ADAFRUIT_SSD1306_HAS_SETBUFFER) && ADAFRUIT_SSD1306_HAS_SETBUFFER
static uint8_t buffer[(SCREEN_WIDTH * SCREEN_HEIGHT + 7) / 8];
#endif
public:
MySSD1306_DisplayInterface(Adafruit_SSD1306 &display)
#if defined(ADAFRUIT_SSD1306_HAS_SETBUFFER) && ADAFRUIT_SSD1306_HAS_SETBUFFER
disp.setBuffer(buffer);
#endif
if (!disp.begin())
}
void drawBackground()
override { disp.drawLine(1, 8, 126, 8, WHITE); }
} display_L = ssd1306Display_L, display_R = ssd1306Display_R;
};
};
};
};
{bank, 1},
{bank, 2},
{bank, 3},
{bank, 4},
};
{display_L, lcd, bank, 1, {0, 40}, 1, WHITE},
{display_L, lcd, bank, 2, {64, 40}, 1, WHITE},
{display_R, lcd, bank, 3, {0, 40}, 1, WHITE},
{display_R, lcd, bank, 4, {64, 40}, 1, WHITE},
};
display_L, timedisplay, {0, 0}, 1, WHITE,
};
};
};
};
};
display_L, rudeSolo,
XBM::solo_7, {36 + 64, 0}, WHITE};
};
{display_L, vu[0], {32 + 11, 60}, 16, 3, 1, WHITE},
{display_L, vu[1], {32 + 11 + 64, 60}, 16, 3, 1, WHITE},
{display_R, vu[2], {32 + 11, 60}, 16, 3, 1, WHITE},
{display_R, vu[3], {32 + 11 + 64, 60}, 16, 3, 1, WHITE},
};
{display_L, vpot[0], {0, 10}, 14, 12, WHITE},
{display_L, vpot[1], {64, 10}, 14, 12, WHITE},
{display_R, vpot[2], {0, 10}, 14, 12, WHITE},
{display_R, vpot[3], {64, 10}, 14, 12, WHITE},
};
{display_L, bank, 1, {0, 50}, 2, WHITE},
{display_L, bank, 2, {64, 50}, 2, WHITE},
{display_R, bank, 3, {0, 50}, 2, WHITE},
{display_R, bank, 4, {64, 50}, 2, WHITE},
};
void setup() {
}
void loop() {
}
The main header file that includes all Control-Surface header files.
Control_Surface_ & Control_Surface
A predefined instance of the Control Surface to use in the Arduino sketches.
A class for displaying the setting of a Bank object.
A class that groups Bankable MIDI Output Elements and Bankable MIDI Input Elements,...
Generic base class for classes that listen for MIDI Note, Control Change and Key Pressure events on a...
A class that displays a bitmap depending on the state of a MIDINote or any other object that has a ge...
void begin()
Initialize the Control_Surface.
void loop()
Update all MIDI elements, send MIDI events and read MIDI input.
virtual void begin()
Initialize the display.
Selector with one button that increments the selection.
A MIDI input element that represents a Mackie Control Universal VPot ring.
A MIDI input element that represents a Mackie Control Universal VU meter.
Displays the text of the Mackie Control Universal LCD screen for a single track.
A class that represents the Mackie Control Universal LCD display and saves the text it receives.
Displays the MCU time code display.
Class that receives and stores the text of the Mackie Control Universal 7-segment time display.
Displays the position of a MCU V-Pot.
Displays a MCU level meter.
Generic base class for classes that listen for MIDI Note, Control Change and Key Pressure events on a...
This class creates a mapping between the Adafruit_SSD1306 display driver and the general display inte...
void drawBackground() override=0
Draw a custom background.
A class for MIDI interfaces sending MIDI messages over a USB MIDI connection.
#define FATAL_ERROR(msg, errc)
Print the error message and error code, and stop the execution.
constexpr uint8_t REC_RDY_3
Record/Ready 3 (In/Out)
constexpr uint8_t REC_RDY_4
Record/Ready 4 (In/Out)
constexpr uint8_t MUTE_1
Mute 1 (In/Out)
constexpr uint8_t REC_RDY_2
Record/Ready 2 (In/Out)
constexpr uint8_t REC_RDY_1
Record/Ready 1 (In/Out)
constexpr uint8_t RECORD
Record (In/Out)
constexpr uint8_t SOLO_2
Solo 2 (In/Out)
constexpr uint8_t SOLO_1
Solo 1 (In/Out)
constexpr uint8_t SOLO_4
Solo 4 (In/Out)
constexpr uint8_t MUTE_4
Mute 4 (In/Out)
constexpr uint8_t SOLO_3
Solo 3 (In/Out)
constexpr uint8_t PLAY
Play (In/Out)
constexpr uint8_t RUDE_SOLO
Rude solo light (In)
constexpr uint8_t MUTE_2
Mute 2 (In/Out)
constexpr uint8_t MUTE_3
Mute 3 (In/Out)
constexpr unsigned int Hold
Don't decay automatically, hold the latest value until a new one is received.
const XBitmap solo_7
XBitmap solo_7 (7px × 7px)
const XBitmap record_7
XBitmap record_7 (7px × 7px)
const XBitmap rec_rdy_10B
XBitmap rec_rdy_10B (10px × 10px)
const XBitmap play_7
XBitmap play_7 (7px × 7px)
const XBitmap solo_10B
XBitmap solo_10B (10px × 10px)
const XBitmap mute_10B
XBitmap mute_10B (10px × 10px)