シーケンサーのデータをSPIで送るテスト。UART出力停止
Dependencies: Sequence mbed-rtos mbed Amp Envelope FilterController
Fork of SpiSequencerSender_Test by
main.cpp
00001 #include "mbed.h" 00002 #include "rtos.h" 00003 00004 #define UART_TRACE (0) 00005 #include "SpiSequenceSender.h" 00006 #include "EnvelopeGenerator.h" 00007 #include "SpiAmpController.h" 00008 #include "SpiFilterController.h" 00009 00010 #define SEQUENCE_N (16) 00011 #define SPI_RATE (8000000) 00012 00013 const int samplingPeriod = 1; // ms 00014 const int bpm = 120; 00015 const int envelopeLength = (60 * 1000 / (bpm * 4)) / samplingPeriod; 00016 const int waveShape = SpiSequenceSender::WAVESHAPE_SAW; 00017 const int baseNoteNumber = 48; 00018 00019 // Initial Sequence 00020 const int noteOn[SEQUENCE_N] = { 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0 }; 00021 const int octave[SEQUENCE_N] = {-1,-1,-1, 0, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }; 00022 const int pitch[SEQUENCE_N] = { 9, 7, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }; 00023 const int tie[SEQUENCE_N] = { 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 }; 00024 00025 //AnalogIn levelIn(A0); 00026 AnalogIn durationIn(A2); 00027 AnalogIn decayIn(A1); 00028 AnalogIn sustainIn(A0); 00029 AnalogIn cutoffIn(A3); 00030 AnalogIn resonanceIn(A4); 00031 00032 SPI spiMaster(SPI_MOSI, SPI_MISO, SPI_SCK); 00033 00034 Sequence sequence[SEQUENCE_N]; 00035 SpiSequenceSender sequenceSender(&spiMaster, D9, sequence, SEQUENCE_N, samplingPeriod, bpm); 00036 00037 Envelope envelope(4095, envelopeLength, envelopeLength*3/4, envelopeLength/2, 2047); 00038 EnvelopeGenerator envelopeGenerator; 00039 SpiAmpController ampController(&spiMaster, D8, D7); 00040 00041 SpiFilterController filterController(&spiMaster, D10); 00042 00043 void callbackFunction(int ticks) 00044 { 00045 if (ticks == 0) { 00046 envelopeGenerator.init(envelope); 00047 } 00048 00049 if (sequenceSender.getSequences()[sequenceSender.getStep()].noteOn) { 00050 uint16_t level = envelopeGenerator.getModLevel(); 00051 ampController.outDca(level); 00052 } else { 00053 ampController.outDca(0); 00054 } 00055 envelopeGenerator.update(); 00056 00057 filterController.outDCF(); 00058 } 00059 00060 int main() 00061 { 00062 spiMaster.format(8, 0); 00063 spiMaster.frequency(SPI_RATE); 00064 00065 // Test SequencerSender Run 00066 // 00067 Sequence::baseNoteNumber = baseNoteNumber; 00068 sequenceSender.setBpm(bpm); 00069 00070 for (int i = 0; i < SEQUENCE_N; i++) { 00071 Sequence& seq = sequenceSender.getSequences()[i]; 00072 seq.setPitch(pitch[i]); 00073 seq.setOctave(octave[i]); 00074 seq.noteOn = noteOn[i]; 00075 seq.tie = tie[i]; 00076 } 00077 00078 envelopeGenerator.init(envelope); 00079 00080 sequenceSender.attachUpdate(&callbackFunction); 00081 sequenceSender.setWaveShape(waveShape); 00082 sequenceSender.run(0); 00083 00084 for (;;) { 00085 /* 00086 sequenceSender.setPulseWidth(sequenceSender.getPulseWidth() + 4); 00087 Thread::wait(500); 00088 sequenceSender.setWaveShape(SpiSequenceSender::WAVESHAPE_SAW); 00089 Thread::wait(500); 00090 sequenceSender.setWaveShape(SpiSequenceSender::WAVESHAPE_SQUARE); 00091 */ 00092 //envelope.setLevel(levelIn * 4095); 00093 envelope.setLevel(4095); 00094 envelope.setDuration(durationIn * envelopeLength); 00095 envelope.setDecay(decayIn * envelopeLength); 00096 envelope.setSustain(sustainIn * 4095); 00097 00098 filterController.setCutoff(cutoffIn * 255); 00099 filterController.setResonance(resonanceIn * 255); 00100 00101 #if(UART_TRACE) 00102 printf("%d\t%d\t%d\t%d\t%d\t%d\r\n", 00103 filterController.getCutoff(), 00104 filterController.getResonance(), 00105 envelope.getLevel(), 00106 envelope.getDuration(), 00107 envelope.getDecay(), 00108 envelope.getSustain() 00109 ); 00110 #endif 00111 } 00112 }
Generated on Wed Jul 13 2022 13:54:33 by 1.7.2