Nucleo Sequencer of my Base Machine
Dependencies: Amp AverageAnalogIn Envelope FilterController Sequence BaseMachineComon mbed-rtos mbed
Fork of SpiSequenceSender_Test by
main.cpp
- Committer:
- ryood
- Date:
- 2016-06-12
- Revision:
- 5:4abac408b827
- Parent:
- 4:dd1582f2e5df
- Child:
- 6:fc10eac60b91
File content as of revision 5:4abac408b827:
#include "mbed.h" #include "rtos.h" #include "Sequence.h" #include "SequenceSender.h" #define SEQUENCE_N 16 #define WAVESHAPE_SQUARE 0 #define WAVESHAPE_SAW 1 #define WAVESHAPE_N 2 #define SPI_RATE (8000000) #define SPI_WAIT (wait_us(1)) #define DCO_PACKET_HEADER (0x55) #define DBG_TRACE 0 class SpiSequenceSender : public SequenceSender { public: SpiSequenceSender(SPI* _pSpim, PinName _DcoCS, Sequence* _sequences, int _sequenceNum, int _samplingRate=5, int _bpm=120) : SequenceSender(_sequences, _sequenceNum, _samplingRate, _bpm), pSpiM(_pSpim), DcoCS(_DcoCS), waveShape(WAVESHAPE_SQUARE), pulseWidth(127) {} virtual void outDco(uint32_t frequency) { uint16_t frequency16 = frequency >> 16; #if(DBG_TRACE) printf("%d\t", frequency16); printf("%d\t", DCO_PACKET_HEADER); printf("%d\t", DCO_WAVE_FORM); printf("%d\t", DCO_PULSE_WIDTH); printf("%d\t", frequency16 >> 8); printf("%d\t", frequency16 & 0xff); printf("\r\n"); #endif DcoCS = 0; pSpiM->write(DCO_PACKET_HEADER); pSpiM->write(waveShape); pSpiM->write(pulseWidth); pSpiM->write(frequency16 >> 8); pSpiM->write(frequency16 & 0xff); SPI_WAIT; DcoCS = 1; } void setWaveShape(uint8_t _waveShape) { if (_waveShape < WAVESHAPE_N) { waveShape = _waveShape; } } uint8_t getWaveShape() { return waveShape; } void setPulseWidth(uint8_t _pulseWidth) { pulseWidth = _pulseWidth; } uint8_t getPulseWidth() { return pulseWidth; } private: SPI* pSpiM; DigitalOut DcoCS; uint8_t waveShape; uint8_t pulseWidth; }; SPI spiMaster(SPI_MOSI, SPI_MISO, SPI_SCK); Sequence sequence[SEQUENCE_N]; SpiSequenceSender sequenceSender(&spiMaster, D10, sequence, SEQUENCE_N, 5); int main() { spiMaster.format(8, 0); spiMaster.frequency(SPI_RATE); // Test SequencerSender Run // sequenceSender.setBpm(120); for (int i = 0; i < SEQUENCE_N; i++) { Sequence& seq = sequenceSender.getSequences()[i]; seq.setPitch(0); seq.setOctave(-1); seq.tie = true; } sequence[3].setOctave(2); sequence[7].setOctave(1); sequence[11].setOctave(0); sequence[15].setOctave(1); sequenceSender.run(0); for (;;) { sequenceSender.setPulseWidth(sequenceSender.getPulseWidth() + 4); Thread::wait(100); sequenceSender.setWaveShape(WAVESHAPE_SAW); Thread::wait(100); sequenceSender.setWaveShape(WAVESHAPE_SQUARE); } }