BaseMachine UI Controllerに分離

Dependencies:   AverageAnalogIn PinDetect RotaryEncoder Sequence SequencerDisplay mbed-rtos mbed st7567LCD BaseMachineComon

Fork of BaseMachine_Sequencer by Ryo Od

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        
     }
 }