Several fixes and additions.

main
Holger Wirtz 9 months ago
parent 10d77ae3a5
commit 1e5da9ddbd
  1. 46
      MIDI-Host-Adapter.ino

@ -14,11 +14,16 @@ bool swap_nibbles = false;
bool high_freq = false;
#define BRIGHTNESS 6
#define INITIAL_MIDI_CHANNEL 1
#define BUTTON_DEBOUNCE_TIME_MS 50
#define BUTTON_DOUBLE_PRESS_MS 200
#define BLINK_FREQUENCY_MS 500
// Constructor object
TM1638plus_Model2 tm(STROBE_TM, CLOCK_TM, DIO_TM, swap_nibbles, high_freq);
elapsedMillis button_debounce_timer;
elapsedMillis blink_timer;
elapsedMillis double_press_timer;
void setup() {
Serial.begin(9600);
@ -34,10 +39,8 @@ void setup() {
pinMode(MIDI_CH_BIT2, OUTPUT);
pinMode(MIDI_CH_BIT1, OUTPUT);
pinMode(MIDI_CH_BIT0, OUTPUT);
digitalWrite(MIDI_CH_BIT3, LOW);
digitalWrite(MIDI_CH_BIT2, LOW);
digitalWrite(MIDI_CH_BIT1, LOW);
digitalWrite(MIDI_CH_BIT0, LOW);
SetMidiChannel(INITIAL_MIDI_CHANNEL);
delay(500);
@ -46,21 +49,44 @@ void setup() {
void loop() {
uint8_t button;
static uint8_t actual_channel;
static uint8_t new_channel;
if (actual_channel == 0) {
actual_channel = 1;
tm.DisplayDecNum(actual_channel, 0, false, TMAlignTextRight);
}
button = tm.ReadKey16();
if (button > 0 && button_debounce_timer > BUTTON_DEBOUNCE_TIME_MS) {
Serial.print("Button: ");
if (button > 0 && button_debounce_timer > BUTTON_DEBOUNCE_TIME_MS && double_press_timer > BUTTON_DOUBLE_PRESS_MS) {
// Button pressed once
Serial.print("Button once: ");
Serial.println(button, DEC);
button_debounce_timer = 0;
tm.DisplayDecNum(button, 0, false, TMAlignTextRight);
SetMidiChannel(button);
}
blink_timer = 0;
new_channel = button;
tm.DisplayDecNumNibble(new_channel, actual_channel, 0, false, TMAlignTextRight);
} else if (button > 0 && button_debounce_timer > BUTTON_DEBOUNCE_TIME_MS && double_press_timer < BUTTON_DOUBLE_PRESS_MS && button == new_channel) {
// Button pressed twice
Serial.print("Button twice: ");
Serial.println(button, DEC);
actual_channel = new_channel;
SetMidiChannel(actual_channel);
double_press_timer = 0;
} else if (actual_channel != new_channel)
if (blink_timer > BLINK_FREQUENCY_MS) {
blink_timer = 0;
tm.DisplayDecNum(actual_channel, 0, false, TMAlignTextRight);
} else if (blink_timer > BLINK_FREQUENCY_MS / 2) {
tm.DisplayDecNumNibble(new_channel, actual_channel, 0, false, TMAlignTextRight);
}
}
void SetMidiChannel(uint8_t channel) {
Serial.print("Setting MIDI channel: ");
Serial.print(channel, DEC);
channel--;
Serial.print(" (");
printBinary(channel, 4);
Serial.println(")");

Loading…
Cancel
Save