Nucleo Sequencer of my Base Machine
Dependencies: Amp AverageAnalogIn Envelope FilterController Sequence BaseMachineComon mbed-rtos mbed
Fork of SpiSequenceSender_Test by
Diff: main.cpp
- Revision:
- 5:4abac408b827
- Parent:
- 4:dd1582f2e5df
- Child:
- 6:fc10eac60b91
diff -r dd1582f2e5df -r 4abac408b827 main.cpp --- a/main.cpp Thu Jun 09 14:30:13 2016 +0000 +++ b/main.cpp Sun Jun 12 03:02:22 2016 +0000 @@ -1,4 +1,5 @@ #include "mbed.h" +#include "rtos.h" #include "Sequence.h" #include "SequenceSender.h" @@ -11,8 +12,6 @@ #define SPI_RATE (8000000) #define SPI_WAIT (wait_us(1)) #define DCO_PACKET_HEADER (0x55) -#define DCO_WAVE_FORM (WAVESHAPE_SQUARE) -#define DCO_PULSE_WIDTH (0x80) #define DBG_TRACE 0 @@ -20,7 +19,7 @@ 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) {} + pSpiM(_pSpim), DcoCS(_DcoCS), waveShape(WAVESHAPE_SQUARE), pulseWidth(127) {} virtual void outDco(uint32_t frequency) { @@ -38,17 +37,37 @@ DcoCS = 0; pSpiM->write(DCO_PACKET_HEADER); - pSpiM->write(DCO_WAVE_FORM); - pSpiM->write(DCO_PULSE_WIDTH); + 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); @@ -66,15 +85,23 @@ sequenceSender.setBpm(120); for (int i = 0; i < SEQUENCE_N; i++) { Sequence& seq = sequenceSender.getSequences()[i]; - seq.setPitch(i); + seq.setPitch(0); seq.setOctave(-1); seq.tie = true; } - sequence[3].setOctave(1); - sequence[7].setOctave(0); - sequence[11].setOctave(1); - sequence[15].setOctave(0); + 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); + } }