Nucleo Sequencer of my Base Machine

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

Fork of SpiSequenceSender_Test by Ryo Od

Revision:
5:4abac408b827
Parent:
4:dd1582f2e5df
Child:
6:fc10eac60b91
--- 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);
+    }
 }