Nucleo Sequencer of my Base Machine

Dependencies:   Amp AverageAnalogIn Envelope FilterController Sequence BaseMachineComon mbed-rtos mbed

Fork of SpiSequenceSender_Test by Ryo Od

Committer:
ryood
Date:
Tue Aug 23 09:45:37 2016 +0000
Revision:
15:9813d8eaf57e
Parent:
14:c173e03ee3ad
Child:
16:b0419e3c9079
Correct variable names & function names

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 15:9813d8eaf57e 1 /*
ryood 15:9813d8eaf57e 2 * main.cpp
ryood 15:9813d8eaf57e 3 * SpiSequencerSender_test
ryood 15:9813d8eaf57e 4 *
ryood 15:9813d8eaf57e 5 * 2016.08.20 mbed Rev 121 / mbed-rtos Rev 117で動作確認
ryood 15:9813d8eaf57e 6 *
ryood 15:9813d8eaf57e 7 */
ryood 15:9813d8eaf57e 8
ryood 0:21e39bc75e31 9 #include "mbed.h"
ryood 5:4abac408b827 10 #include "rtos.h"
ryood 0:21e39bc75e31 11
ryood 6:fc10eac60b91 12 #define UART_TRACE (0)
ryood 6:fc10eac60b91 13 #include "SpiSequenceSender.h"
ryood 9:3e4e08578e1c 14 #include "EnvelopeGenerator.h"
ryood 9:3e4e08578e1c 15 #include "SpiAmpController.h"
ryood 12:c248781608af 16 #include "SpiFilterController.h"
ryood 0:21e39bc75e31 17
ryood 6:fc10eac60b91 18 #define SEQUENCE_N (16)
ryood 6:fc10eac60b91 19 #define SPI_RATE (8000000)
ryood 0:21e39bc75e31 20
ryood 14:c173e03ee3ad 21 const int samplingPeriod = 1; // ms
ryood 10:fb04f9959fd9 22 const int bpm = 120;
ryood 10:fb04f9959fd9 23 const int envelopeLength = (60 * 1000 / (bpm * 4)) / samplingPeriod;
ryood 14:c173e03ee3ad 24 const int waveShape = SpiSequenceSender::WAVESHAPE_SAW;
ryood 14:c173e03ee3ad 25 const int baseNoteNumber = 48;
ryood 14:c173e03ee3ad 26
ryood 14:c173e03ee3ad 27 // Initial Sequence
ryood 14:c173e03ee3ad 28 const int noteOn[SEQUENCE_N] = { 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0 };
ryood 14:c173e03ee3ad 29 const int octave[SEQUENCE_N] = {-1,-1,-1, 0, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 };
ryood 14:c173e03ee3ad 30 const int pitch[SEQUENCE_N] = { 9, 7, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 };
ryood 14:c173e03ee3ad 31 const int tie[SEQUENCE_N] = { 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 };
ryood 10:fb04f9959fd9 32
ryood 13:b0f988a239df 33 //AnalogIn levelIn(A0);
ryood 13:b0f988a239df 34 AnalogIn durationIn(A2);
ryood 13:b0f988a239df 35 AnalogIn decayIn(A1);
ryood 13:b0f988a239df 36 AnalogIn sustainIn(A0);
ryood 13:b0f988a239df 37 AnalogIn cutoffIn(A3);
ryood 13:b0f988a239df 38 AnalogIn resonanceIn(A4);
ryood 10:fb04f9959fd9 39
ryood 0:21e39bc75e31 40 SPI spiMaster(SPI_MOSI, SPI_MISO, SPI_SCK);
ryood 0:21e39bc75e31 41
ryood 0:21e39bc75e31 42 Sequence sequence[SEQUENCE_N];
ryood 10:fb04f9959fd9 43 SpiSequenceSender sequenceSender(&spiMaster, D9, sequence, SEQUENCE_N, samplingPeriod, bpm);
ryood 6:fc10eac60b91 44
ryood 10:fb04f9959fd9 45 Envelope envelope(4095, envelopeLength, envelopeLength*3/4, envelopeLength/2, 2047);
ryood 9:3e4e08578e1c 46 EnvelopeGenerator envelopeGenerator;
ryood 9:3e4e08578e1c 47 SpiAmpController ampController(&spiMaster, D8, D7);
ryood 6:fc10eac60b91 48
ryood 12:c248781608af 49 SpiFilterController filterController(&spiMaster, D10);
ryood 0:21e39bc75e31 50
ryood 8:de409197ff95 51 void callbackFunction(int ticks)
ryood 8:de409197ff95 52 {
ryood 8:de409197ff95 53 if (ticks == 0) {
ryood 9:3e4e08578e1c 54 envelopeGenerator.init(envelope);
ryood 8:de409197ff95 55 }
ryood 14:c173e03ee3ad 56
ryood 15:9813d8eaf57e 57 if (sequenceSender.getSequences()[sequenceSender.getStep()].isNoteOn()) {
ryood 14:c173e03ee3ad 58 uint16_t level = envelopeGenerator.getModLevel();
ryood 14:c173e03ee3ad 59 ampController.outDca(level);
ryood 14:c173e03ee3ad 60 } else {
ryood 14:c173e03ee3ad 61 ampController.outDca(0);
ryood 14:c173e03ee3ad 62 }
ryood 9:3e4e08578e1c 63 envelopeGenerator.update();
ryood 12:c248781608af 64
ryood 15:9813d8eaf57e 65 filterController.outDcf();
ryood 8:de409197ff95 66 }
ryood 8:de409197ff95 67
ryood 0:21e39bc75e31 68 int main()
ryood 0:21e39bc75e31 69 {
ryood 0:21e39bc75e31 70 spiMaster.format(8, 0);
ryood 0:21e39bc75e31 71 spiMaster.frequency(SPI_RATE);
ryood 0:21e39bc75e31 72
ryood 0:21e39bc75e31 73 // Test SequencerSender Run
ryood 0:21e39bc75e31 74 //
ryood 15:9813d8eaf57e 75 Sequence::setBaseNoteNumber(baseNoteNumber);
ryood 10:fb04f9959fd9 76 sequenceSender.setBpm(bpm);
ryood 14:c173e03ee3ad 77
ryood 0:21e39bc75e31 78 for (int i = 0; i < SEQUENCE_N; i++) {
ryood 0:21e39bc75e31 79 Sequence& seq = sequenceSender.getSequences()[i];
ryood 14:c173e03ee3ad 80 seq.setPitch(pitch[i]);
ryood 14:c173e03ee3ad 81 seq.setOctave(octave[i]);
ryood 15:9813d8eaf57e 82 seq.setNoteOn(noteOn[i]);
ryood 15:9813d8eaf57e 83 seq.setTie(tie[i]);
ryood 0:21e39bc75e31 84 }
ryood 6:fc10eac60b91 85
ryood 9:3e4e08578e1c 86 envelopeGenerator.init(envelope);
ryood 12:c248781608af 87
ryood 12:c248781608af 88 sequenceSender.attachUpdate(&callbackFunction);
ryood 14:c173e03ee3ad 89 sequenceSender.setWaveShape(waveShape);
ryood 0:21e39bc75e31 90 sequenceSender.run(0);
ryood 5:4abac408b827 91
ryood 5:4abac408b827 92 for (;;) {
ryood 10:fb04f9959fd9 93 /*
ryood 5:4abac408b827 94 sequenceSender.setPulseWidth(sequenceSender.getPulseWidth() + 4);
ryood 6:fc10eac60b91 95 Thread::wait(500);
ryood 6:fc10eac60b91 96 sequenceSender.setWaveShape(SpiSequenceSender::WAVESHAPE_SAW);
ryood 6:fc10eac60b91 97 Thread::wait(500);
ryood 6:fc10eac60b91 98 sequenceSender.setWaveShape(SpiSequenceSender::WAVESHAPE_SQUARE);
ryood 10:fb04f9959fd9 99 */
ryood 13:b0f988a239df 100 //envelope.setLevel(levelIn * 4095);
ryood 13:b0f988a239df 101 envelope.setLevel(4095);
ryood 10:fb04f9959fd9 102 envelope.setDuration(durationIn * envelopeLength);
ryood 10:fb04f9959fd9 103 envelope.setDecay(decayIn * envelopeLength);
ryood 10:fb04f9959fd9 104 envelope.setSustain(sustainIn * 4095);
ryood 12:c248781608af 105
ryood 12:c248781608af 106 filterController.setCutoff(cutoffIn * 255);
ryood 12:c248781608af 107 filterController.setResonance(resonanceIn * 255);
ryood 12:c248781608af 108
ryood 14:c173e03ee3ad 109 #if(UART_TRACE)
ryood 12:c248781608af 110 printf("%d\t%d\t%d\t%d\t%d\t%d\r\n",
ryood 12:c248781608af 111 filterController.getCutoff(),
ryood 12:c248781608af 112 filterController.getResonance(),
ryood 12:c248781608af 113 envelope.getLevel(),
ryood 12:c248781608af 114 envelope.getDuration(),
ryood 12:c248781608af 115 envelope.getDecay(),
ryood 12:c248781608af 116 envelope.getSustain()
ryood 12:c248781608af 117 );
ryood 14:c173e03ee3ad 118 #endif
ryood 5:4abac408b827 119 }
ryood 0:21e39bc75e31 120 }