Test program for BaseMachineUIController Library

Dependencies:   AverageAnalogIn BaseMachineUIController ExioBufferdController MCP23S17 PinDetect RotaryEncoder Sequence SequencerDisplay mbed-rtos mbed st7567LCD AT24C1024

Committer:
ryood
Date:
Wed Nov 09 10:29:34 2016 +0000
Revision:
5:7f49c9ca7c04
Parent:
4:f79bf2806617
Child:
6:e104230b642c
Test ExioPortB only in main.cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:f3abbd84d67f 1 /*
ryood 0:f3abbd84d67f 2 * main.cpp
ryood 0:f3abbd84d67f 3 * BaseMachineUIController Test
ryood 0:f3abbd84d67f 4 *
ryood 0:f3abbd84d67f 5 * mbed Rev 121 / mbed-rtos Rev 117
ryood 0:f3abbd84d67f 6 *
ryood 0:f3abbd84d67f 7 * 2016.11.06 Created
ryood 0:f3abbd84d67f 8 *
ryood 0:f3abbd84d67f 9 */
ryood 0:f3abbd84d67f 10
ryood 0:f3abbd84d67f 11 #include "mbed.h"
ryood 0:f3abbd84d67f 12 #include "rtos.h"
ryood 0:f3abbd84d67f 13
ryood 5:7f49c9ca7c04 14 #define UART_TRACE (0)
ryood 0:f3abbd84d67f 15 #include "BaseMachineUIController.h"
ryood 4:f79bf2806617 16 #include "ExioInBuffer.h"
ryood 4:f79bf2806617 17 #include "ExioBufferedDebounceIn.h"
ryood 3:97e89dad2a44 18 #include "Sequence.h"
ryood 0:f3abbd84d67f 19
ryood 2:354ca389e975 20 const int samplingRate = 1;
ryood 2:354ca389e975 21
ryood 0:f3abbd84d67f 22 BaseMachineUIController UIController;
ryood 0:f3abbd84d67f 23
ryood 4:f79bf2806617 24 SPI Spi(PC_12, PC_11, PC_10); // SPI3: mosi, miso, sclk
ryood 4:f79bf2806617 25 // MExioMcp23s17(int hardwareaddress, SPI& spi, PinName nCs, PinName nReset);
ryood 4:f79bf2806617 26 ExioMcp23s17 Exio(0x00, Spi, PD_2, PA_13);
ryood 4:f79bf2806617 27
ryood 0:f3abbd84d67f 28 uint8_t step = 0;
ryood 0:f3abbd84d67f 29 int isStepChanged = false;
ryood 0:f3abbd84d67f 30 bool isRunning = false;
ryood 0:f3abbd84d67f 31
ryood 2:354ca389e975 32 int bpm = 125;
ryood 2:354ca389e975 33 uint32_t tick = 0;
ryood 2:354ca389e975 34 int noteLen;
ryood 2:354ca389e975 35
ryood 2:354ca389e975 36 void setNoteLen()
ryood 2:354ca389e975 37 {
ryood 2:354ca389e975 38 noteLen = 15000 / ((long)bpm * samplingRate);
ryood 2:354ca389e975 39 }
ryood 2:354ca389e975 40
ryood 0:f3abbd84d67f 41 void stepUp(void const* args)
ryood 0:f3abbd84d67f 42 {
ryood 2:354ca389e975 43 tick++;
ryood 2:354ca389e975 44 if (tick == noteLen) {
ryood 2:354ca389e975 45 tick = 0;
ryood 2:354ca389e975 46 if (isRunning) {
ryood 2:354ca389e975 47 step++;
ryood 2:354ca389e975 48 if (step == 16)
ryood 2:354ca389e975 49 {
ryood 2:354ca389e975 50 step = 0;
ryood 2:354ca389e975 51 }
ryood 2:354ca389e975 52 UIController.setPlayingStep(step);
ryood 0:f3abbd84d67f 53 }
ryood 0:f3abbd84d67f 54 }
ryood 0:f3abbd84d67f 55 }
ryood 0:f3abbd84d67f 56
ryood 0:f3abbd84d67f 57 int main()
ryood 0:f3abbd84d67f 58 {
ryood 0:f3abbd84d67f 59 #if (UART_TRACE)
ryood 0:f3abbd84d67f 60 printf("*** BaseMachineUIController Test***\r\n");
ryood 0:f3abbd84d67f 61 #endif
ryood 0:f3abbd84d67f 62
ryood 0:f3abbd84d67f 63 UIController.init();
ryood 0:f3abbd84d67f 64
ryood 4:f79bf2806617 65 // Reset MCP23S17 (初期化時にreset()が必要)
ryood 4:f79bf2806617 66 Exio.reset();
ryood 4:f79bf2806617 67
ryood 5:7f49c9ca7c04 68 //ExioInBuffer exioInBufferA(&Exio, ExioPortA);
ryood 4:f79bf2806617 69 ExioInBuffer exioInBufferB(&Exio, ExioPortB);
ryood 4:f79bf2806617 70
ryood 4:f79bf2806617 71 ExioBufferedDebounceIn inB[] = {
ryood 4:f79bf2806617 72 ExioBufferedDebounceIn(&exioInBufferB, 0),
ryood 4:f79bf2806617 73 ExioBufferedDebounceIn(&exioInBufferB, 1),
ryood 4:f79bf2806617 74 ExioBufferedDebounceIn(&exioInBufferB, 2),
ryood 4:f79bf2806617 75 ExioBufferedDebounceIn(&exioInBufferB, 3),
ryood 4:f79bf2806617 76 ExioBufferedDebounceIn(&exioInBufferB, 4),
ryood 4:f79bf2806617 77 ExioBufferedDebounceIn(&exioInBufferB, 5),
ryood 4:f79bf2806617 78 ExioBufferedDebounceIn(&exioInBufferB, 6),
ryood 4:f79bf2806617 79 ExioBufferedDebounceIn(&exioInBufferB, 7)
ryood 4:f79bf2806617 80 };
ryood 4:f79bf2806617 81
ryood 5:7f49c9ca7c04 82 //exioInBufferA.run(10);
ryood 4:f79bf2806617 83 exioInBufferB.run(10);
ryood 4:f79bf2806617 84 for (int i = 0; i < 8; i++) {
ryood 4:f79bf2806617 85 inB[i].set_debounce_us(10000);
ryood 4:f79bf2806617 86 }
ryood 4:f79bf2806617 87
ryood 0:f3abbd84d67f 88 RtosTimer stepTimer(stepUp, osTimerPeriodic, (void *)0);
ryood 2:354ca389e975 89 stepTimer.start(samplingRate);
ryood 2:354ca389e975 90 setNoteLen();
ryood 0:f3abbd84d67f 91
ryood 0:f3abbd84d67f 92 while (true)
ryood 0:f3abbd84d67f 93 {
ryood 0:f3abbd84d67f 94 UIController.update();
ryood 0:f3abbd84d67f 95
ryood 1:46e088b12083 96 isRunning = UIController.getIsRunning();
ryood 2:354ca389e975 97 bpm = UIController.getBpm();
ryood 2:354ca389e975 98 setNoteLen();
ryood 1:46e088b12083 99
ryood 3:97e89dad2a44 100 Sequence sequences[SEQUENCE_N];
ryood 3:97e89dad2a44 101 UIController.getSequences(&sequences);
ryood 3:97e89dad2a44 102
ryood 0:f3abbd84d67f 103 OscillatorParam osc;
ryood 0:f3abbd84d67f 104 UIController.getOscillatorParam(&osc);
ryood 0:f3abbd84d67f 105
ryood 0:f3abbd84d67f 106 FilterParam flt;
ryood 0:f3abbd84d67f 107 UIController.getFilterParam(&flt);
ryood 0:f3abbd84d67f 108
ryood 0:f3abbd84d67f 109 EnvelopeParam env;
ryood 0:f3abbd84d67f 110 UIController.getEnvelopeParam(&env);
ryood 0:f3abbd84d67f 111
ryood 1:46e088b12083 112 int accentLevel = UIController.getAccentLevel();
ryood 0:f3abbd84d67f 113
ryood 5:7f49c9ca7c04 114 //uint8_t va = exioInBufferA.readPort();
ryood 4:f79bf2806617 115
ryood 0:f3abbd84d67f 116 #if (UART_TRACE)
ryood 0:f3abbd84d67f 117 printf("%d %d ", osc.waveShape, osc.pulseWidth);
ryood 0:f3abbd84d67f 118 printf("%d %d ", flt.cutoff, flt.resonance);
ryood 0:f3abbd84d67f 119 printf("%d %d %d %d %d ", env.level, env.length, env.duration, env.decay, env.sustain);
ryood 1:46e088b12083 120 printf("%d %d\r\n", bpm, accentLevel);
ryood 3:97e89dad2a44 121 for (int i = 0; i < SEQUENCE_N; i++) {
ryood 3:97e89dad2a44 122 printf("%d %d %d %d %d %u\r\n",
ryood 3:97e89dad2a44 123 i,
ryood 3:97e89dad2a44 124 sequences[i].isNoteOn(),
ryood 3:97e89dad2a44 125 sequences[i].getPitch(),
ryood 3:97e89dad2a44 126 sequences[i].isTie(),
ryood 3:97e89dad2a44 127 sequences[i].isAccent(),
ryood 3:97e89dad2a44 128 (sequences[i].getFrequency10()) >> 16
ryood 3:97e89dad2a44 129 );
ryood 3:97e89dad2a44 130 }
ryood 5:7f49c9ca7c04 131 #endif
ryood 5:7f49c9ca7c04 132 //printf("Exio PortA: %d\r\n", va);
ryood 4:f79bf2806617 133 for (int i = 0; i < 8; i++) {
ryood 4:f79bf2806617 134 int vb = inB[i].read();
ryood 4:f79bf2806617 135 printf("%d ", vb);
ryood 4:f79bf2806617 136 }
ryood 4:f79bf2806617 137 printf("\r\n");
ryood 0:f3abbd84d67f 138 }
ryood 0:f3abbd84d67f 139 }