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:
- 18:309f794eba74
- Parent:
- 17:557658db3e81
- Child:
- 19:241a4b355413
--- a/main.cpp Tue Aug 23 10:29:06 2016 +0000 +++ b/main.cpp Tue Aug 23 10:49:31 2016 +0000 @@ -9,6 +9,7 @@ #include "mbed.h" #include "rtos.h" #include "st7565LCD.h" +#include "PinDetect.h" #define UART_TRACE (0) #include "SpiSequenceSender.h" @@ -51,6 +52,15 @@ AnalogIn cutoffIn(A3); AnalogIn resonanceIn(A4); +PinDetect PinWaveShape(PD_2, PullUp); +PinDetect PinModNumber(PC_11, PullUp); +PinDetect PinOctaveUp(PC_10, PullUp); +PinDetect PinOctaveDown(PC_12, PullUp); +PinDetect PinNoteOnOff(PA_13, PullUp); +PinDetect PinTie(PA_14, PullUp); +PinDetect PinAccent(PA_15, PullUp); +PinDetect PinRunStop(PB_7, PullUp); + // Grobal Variables // Sequence sequences[SEQUENCE_N]; @@ -115,8 +125,133 @@ } //------------------------------------------------------------------------ +// PinDetect ISR +//------------------------------------------------------------------------ +void swWaveShapePressed() +{ + pinFlag |= bWaveShape; +} + +void swModNumberPressed() +{ + pinFlag |= bModNumber; +} + +void swOctaveUpPressed() +{ + pinFlag |= bOctaveUp; +} + +void swOctaveDownPressed() +{ + pinFlag |= bOctaveDown; +} + +void swNoteOnOffPressed() +{ + pinFlag |= bNoteOnOff; +} + +void swTiePressed() +{ + pinFlag |= bTie; +} + +void swAccentPressed() +{ + pinFlag |= bAccent; +} + +void swRunStopPressed() +{ + pinFlag |= bRunStop; +} + +//------------------------------------------------------------------------ // Functions //------------------------------------------------------------------------ +void pollingPins() +{ + if (pinFlag & bWaveShape) { + #if (UART_TRACE) + printf("PinWaveShape Pushed\r\n"); + #endif + uint8_t waveShape = sequenceSender.getWaveShape(); + waveShape++; + if (waveShape < SpiSequenceSender::WAVESHAPE_N) { + sequenceSender.setWaveShape(waveShape); + } else { + sequenceSender.setWaveShape(0); + } + pinFlag &= ~bWaveShape; + } + + if (pinFlag & bModNumber) { + #if (UART_TRACE) + printf("PinModNumber Pushed\r\n"); + #endif + modNumber++; + if (modNumber > MOD_NUMBER_MAX) { + modNumber = 0; + } + pinFlag &= ~bModNumber; + } + + if (pinFlag & bOctaveUp) { + #if (UART_TRACE) + printf("PinOctaveUp Pushed\r\n"); + #endif + sequences[currentStep].setOctave(sequences[currentStep].getOctave() + 1); + pinFlag &= ~bOctaveUp; + } + + if (pinFlag & bOctaveDown) { + #if (UART_TRACE) + printf("PinOctaveDown Pushed\r\n"); + #endif + sequences[currentStep].setOctave(sequences[currentStep].getOctave() - 1); + pinFlag &= ~bOctaveDown; + } + + if (pinFlag & bNoteOnOff) { + #if (UART_TRACE) + printf("PinNoteOnOff Pushed\r\n"); + #endif + sequences[currentStep].setNoteOn(!sequences[currentStep].isNoteOn()); + pinFlag &= ~bNoteOnOff; + } + + if (pinFlag & bTie) { + #if (UART_TRACE) + printf("PinTie Pushed\r\n"); + #endif + sequences[currentStep].setTie(!sequences[currentStep].isTie()); + pinFlag &= ~bTie; + } + + if (pinFlag & bAccent) { + #if (UART_TRACE) + printf("PinAccent Pushed\r\n"); + #endif + sequences[currentStep].setAccent(!sequences[currentStep].isAccent()); + pinFlag &= ~bAccent; + } + + if (pinFlag & bRunStop) { + #if (UART_TRACE) + printf("PinRunStop Pushed\r\n"); + #endif + if (isRunning) { + sequenceSender.stop(); + isRunning = false; + } else { + sequenceSender.run(currentStep); + isRunning = true; + } + pinFlag &= ~bRunStop; + } +} + void dumpToLCD() { char buff[64]; @@ -166,6 +301,10 @@ //------------------------------------------------------------------------ int main() { + #if (UART_TRACE) + printf("*** BaseMachine Sequencer ***\r\n"); + #endif + // Setup Devices // spiMaster.format(8, 0); @@ -183,6 +322,38 @@ sequencerDisplay.update(SequencerDisplay::stop, 0); + PinWaveShape.attach_asserted(&swWaveShapePressed); + PinWaveShape.setAssertValue(0); + PinWaveShape.setSampleFrequency(); + + PinModNumber.attach_asserted(&swModNumberPressed); + PinModNumber.setAssertValue(0); + PinModNumber.setSampleFrequency(); + + PinOctaveUp.attach_asserted(&swOctaveUpPressed); + PinOctaveUp.setAssertValue(0); + PinOctaveUp.setSampleFrequency(); + + PinOctaveDown.attach_asserted(&swOctaveDownPressed); + PinOctaveDown.setAssertValue(0); + PinOctaveDown.setSampleFrequency(); + + PinNoteOnOff.attach_asserted(&swNoteOnOffPressed); + PinNoteOnOff.setAssertValue(0); + PinNoteOnOff.setSampleFrequency(); + + PinTie.attach_asserted(&swTiePressed); + PinTie.setAssertValue(0); + PinTie.setSampleFrequency(); + + PinAccent.attach_asserted(&swAccentPressed); + PinAccent.setAssertValue(0); + PinAccent.setSampleFrequency(); + + PinRunStop.attach_asserted(&swRunStopPressed); + PinRunStop.setAssertValue(0); + PinRunStop.setSampleFrequency(); + // Test SequencerSender Run // Sequence::setBaseNoteNumber(baseNoteNumber); @@ -200,9 +371,11 @@ sequenceSender.attachUpdate(&updateFunction); sequenceSender.setWaveShape(waveShape); - sequenceSender.run(0); + //sequenceSender.run(0); for (;;) { + pollingPins(); +#if 0 /* sequenceSender.setPulseWidth(sequenceSender.getPulseWidth() + 4); Thread::wait(500); @@ -229,5 +402,6 @@ envelope.getSustain() ); #endif +#endif } }