mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-31 05:52:55 +08:00
complete the midi output for dynamic configuration
This commit is contained in:
parent
7acdcc2ebc
commit
a029c63b30
@ -48,8 +48,8 @@ enum {
|
||||
static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED;
|
||||
|
||||
void led_blinking_task(void);
|
||||
|
||||
void cdc_task(void);
|
||||
void midi_task(void);
|
||||
|
||||
/*------------- MAIN -------------*/
|
||||
int main(void)
|
||||
@ -61,8 +61,8 @@ int main(void)
|
||||
{
|
||||
tud_task(); // tinyusb device task
|
||||
led_blinking_task();
|
||||
|
||||
cdc_task();
|
||||
midi_task();
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -146,6 +146,49 @@ void tud_cdc_rx_cb(uint8_t itf)
|
||||
(void) itf;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// MIDI Task
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
// Variable that holds the current position in the sequence.
|
||||
uint32_t note_pos = 0;
|
||||
|
||||
// Store example melody as an array of note values
|
||||
static const uint8_t note_sequence[] =
|
||||
{
|
||||
74,78,81,86,90,93,98,102,57,61,66,69,73,78,81,85,88,92,97,100,97,92,88,85,81,78,
|
||||
74,69,66,62,57,62,66,69,74,78,81,86,90,93,97,102,97,93,90,85,81,78,73,68,64,61,
|
||||
56,61,64,68,74,78,81,86,90,93,98,102
|
||||
};
|
||||
|
||||
void midi_task(void)
|
||||
{
|
||||
static uint32_t start_ms = 0;
|
||||
|
||||
// send note every 1000 ms
|
||||
if (board_millis() - start_ms < 286) return; // not enough time
|
||||
start_ms += 286;
|
||||
|
||||
// Previous positions in the note sequence.
|
||||
int previous = note_pos - 1;
|
||||
|
||||
// If we currently are at position 0, set the
|
||||
// previous position to the last note in the sequence.
|
||||
if (previous < 0) previous = sizeof(note_sequence) - 1;
|
||||
|
||||
// Send Note On for current position at full velocity (127) on channel 1.
|
||||
tudi_midi_write24(0, 0x90, note_sequence[note_pos], 127);
|
||||
|
||||
// Send Note Off for previous note.
|
||||
tudi_midi_write24(0, 0x80, note_sequence[previous], 0);
|
||||
|
||||
// Increment position
|
||||
note_pos++;
|
||||
|
||||
// If we are at the end of the sequence, start over.
|
||||
if (note_pos >= sizeof(note_sequence)) note_pos = 0;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// BLINKING TASK
|
||||
//--------------------------------------------------------------------+
|
||||
|
@ -71,6 +71,7 @@ int main(void)
|
||||
midi_task();
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user