Test program for BaseMachineUIController Library

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

main.cpp

Committer:
ryood
Date:
2016-11-28
Revision:
14:51cd3ff5a42f
Parent:
10:a2b07e6985a6

File content as of revision 14:51cd3ff5a42f:

/*
 * main.cpp
 * BaseMachineUIController Test
 *
 * mbed Rev 121 / mbed-rtos Rev 117
 *
 * 2016.11.06 Created
 *
 */

#include "mbed.h"
#include "rtos.h"
#include "AT24C1024.h"

#define UART_TRACE  (0)
#include "BaseMachineUIController.h"
#include "ExioInBuffer.h"
#include "ExioBufferedDebounceIn.h"
#include "Sequence.h"

const int samplingRate = 1;

BaseMachineUIController UIController;

uint8_t step = 0;
int isStepChanged = false;
bool isRunning = false;

int bpm = 125;
uint32_t tick = 0;
int noteLen;

void setNoteLen()
{
    noteLen = 15000 / ((long)bpm * samplingRate);
}
    
void stepUp(void const* args)
{
    tick++;
    if (tick == noteLen) {
        tick = 0;
        if (isRunning) {
            step++;
            if (step == 16)
            {
                step = 0;
            }
            UIController.setPlayingStep(step);
        }
    }
}

int main()
{    
    #if (UART_TRACE)
    printf("*** BaseMachineUIController Test***\r\n");
    #endif
    
    UIController.init();
            
    RtosTimer stepTimer(stepUp, osTimerPeriodic, (void *)0);
    stepTimer.start(samplingRate);
    setNoteLen();
    
    while (true)
    {
        UIController.update();

        isRunning = UIController.getIsRunning();
        bpm = UIController.getBpm();
        setNoteLen();
        
        Sequence sequences[SEQUENCE_N];
        UIController.getSequences(&sequences);
        
        OscillatorParam osc;
        UIController.getOscillatorParam(&osc);
        
        FilterParam flt;
        UIController.getFilterParam(&flt);
        
        EnvelopeParam env;
        UIController.getEnvelopeParam(&env);
        
        int accentLevel = UIController.getAccentLevel();
        int sequencePattern = UIController.getSequencePattern();        
        
        #if (UART_TRACE)
        printf("%d %d ", osc.waveShape, osc.pulseWidth); 
        printf("%d %d ", flt.cutoff, flt.resonance); 
        printf("%d %d %d %d %d ", env.level, env.length, env.duration, env.decay, env.sustain); 
        printf("%d %d %d\r\n", bpm, accentLevel, sequencePattern);
        for (int i = 0; i < SEQUENCE_N; i++) {
            printf("%d %d %d %d %d %u\r\n",
                i, 
                sequences[i].isNoteOn(),
                sequences[i].getPitch(),
                sequences[i].isTie(),
                sequences[i].isAccent(),
                (sequences[i].getFrequency10()) >> 16
            );
        }
        #endif
    }
}