You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
1.8 KiB
79 lines
1.8 KiB
1 year ago
|
#include <TM1638plus_Model2.h>
|
||
|
#include <elapsedMillis.h>
|
||
|
#include <limits.h>
|
||
|
|
||
|
#define STROBE_TM 9
|
||
|
#define CLOCK_TM 8
|
||
|
#define DIO_TM 7
|
||
|
#define MIDI_CH_BIT3 5
|
||
|
#define MIDI_CH_BIT2 4
|
||
|
#define MIDI_CH_BIT1 3
|
||
|
#define MIDI_CH_BIT0 2
|
||
|
|
||
|
bool swap_nibbles = false;
|
||
|
bool high_freq = false;
|
||
|
|
||
|
#define BRIGHTNESS 6
|
||
|
#define BUTTON_DEBOUNCE_TIME_MS 50
|
||
|
|
||
|
// Constructor object
|
||
|
TM1638plus_Model2 tm(STROBE_TM, CLOCK_TM, DIO_TM, swap_nibbles, high_freq);
|
||
|
elapsedMillis button_debounce_timer;
|
||
|
|
||
|
void setup() {
|
||
|
Serial.begin(9600);
|
||
|
delay(100);
|
||
|
|
||
|
Serial.println("<SETUP>");
|
||
|
|
||
|
tm.displayBegin();
|
||
|
tm.brightness(BRIGHTNESS);
|
||
|
tm.DisplayStr("MIDIHOST", 0);
|
||
|
|
||
|
pinMode(MIDI_CH_BIT3, OUTPUT);
|
||
|
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);
|
||
|
|
||
|
delay(500);
|
||
|
|
||
|
Serial.println("</SETUP>");
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
uint8_t button;
|
||
|
|
||
|
button = tm.ReadKey16();
|
||
|
if (button > 0 && button_debounce_timer > BUTTON_DEBOUNCE_TIME_MS) {
|
||
|
Serial.print("Button: ");
|
||
|
Serial.println(button, DEC);
|
||
|
button_debounce_timer = 0;
|
||
|
tm.DisplayDecNum(button, 0, false, TMAlignTextRight);
|
||
|
|
||
|
SetMidiChannel(button);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void SetMidiChannel(uint8_t channel) {
|
||
|
Serial.print("Setting MIDI channel: ");
|
||
|
Serial.print(channel, DEC);
|
||
|
Serial.print(" (");
|
||
|
printBinary(channel, 4);
|
||
|
Serial.println(")");
|
||
|
|
||
|
digitalWrite(MIDI_CH_BIT0, channel & 0x00);
|
||
|
digitalWrite(MIDI_CH_BIT1, channel & 0x01);
|
||
|
digitalWrite(MIDI_CH_BIT2, channel & 0x02);
|
||
|
digitalWrite(MIDI_CH_BIT3, channel & 0x08);
|
||
|
}
|
||
|
|
||
|
void printBinary(uint32_t value, uint8_t len) {
|
||
|
for (len; len >= 0; len--) {
|
||
|
Serial.print((char)('0' + ((value >> len) & 1)));
|
||
|
}
|
||
|
Serial.println();
|
||
|
}
|