Michele Furlanetto / Mbed 2 deprecated mbed_keyboard

Dependencies:   TextLCD mbed MMA8451Q TSI

main.cpp

Committer:
mfurlanetto
Date:
2015-10-16
Branch:
mono
Revision:
10:6e18b220e10c
Parent:
9:f1fa0dad4096
Child:
11:97e964c9eeb2

File content as of revision 10:6e18b220e10c:

#include "ButtonMusical.cpp"
#include "ButtonDiesis.cpp"

#include "TextLCD.h"
#include "MMA8451Q.h"
#include "TSISensor.h"

#define PLAY 0
#define VOLUME 1
#define METRONOME 2
#define TILT_TOLERANCE_SET 0.75
#define TILT_TOLERANCE_RESET 0.05
#define MIN_METRONOME_BPM 30
#define MAX_METRONOME_BPM 185
#define INTERVAL_METRONOME_BPM 5
#define MIN_OCTAVE 2
#define MAX_OCTAVE 6
#define MMA8451_I2C_ADDRESS (0x1d<<1)

TextLCD lcd(PTE5, PTE3, PTE2, PTB11, PTB10, PTB9, TextLCD::LCD16x2); //TextLCD (PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7, LCDType type=LCD16x2, PinName bl=NC, PinName e2=NC, LCDCtrl ctrl=HD44780)
Speaker speaker (PTA4);
PwmOut led1(LED1);
MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
TSISensor slider;
Ticker tLedOn, tLedOff;
int freq;
int multiplier =0;
int bpm = 60;


void volumeSettings(float* volume)
{
    float tmp= slider.readPercentage();
    if (tmp>0) *volume = tmp;
    lcd.printf("Volume: %.3f", *volume);
    wait(0.2);
}

void menuManager(int* mode, bool* allowEdit)
{
    double y=acc.getAccY();

    if (*allowEdit==false) {
        if (y<-TILT_TOLERANCE_SET) {
            *allowEdit=true;
            *mode=*mode+1;
        } else if (y>TILT_TOLERANCE_SET) {
            *allowEdit=true;
            *mode=*mode-1;
        }
    } else {
        if (abs(y)<TILT_TOLERANCE_RESET) {
            *allowEdit=false;
        }
    }
    return;
}

void ledOff()
{
    led1=1;
    tLedOff.detach();
}

void ledOn()
{
    led1=0;
    tLedOff.attach(&ledOff, 0.1);
}
void metronomeSettings(int* bpmReg)
{
    float t_bpm = *bpmReg;
    lcd.cls();
    lcd.printf("bpm: %d", bpm);
    wait(0.2);
    float tmp = slider.readPercentage();
    if(tmp>0) {
        tLedOn.detach();
        while (tmp>0) {
            t_bpm =int((MIN_METRONOME_BPM+tmp*(MAX_METRONOME_BPM-MIN_METRONOME_BPM))/INTERVAL_METRONOME_BPM);
            tmp = slider.readPercentage();
            lcd.cls();
            lcd.printf("bpm: %.0f",t_bpm*INTERVAL_METRONOME_BPM);
            wait(0.1);
        }
        *bpmReg=(int(t_bpm))*INTERVAL_METRONOME_BPM;
        tLedOn.attach(ledOn, 60.0/(*bpmReg));

    }
}


void octaveSettings()
{
    float octave=4;
    float tmp = slider.readPercentage();
    lcd.cls();
    lcd.printf("prova");
    if(tmp>0) {
        while (tmp>0) {
            octave = MIN_OCTAVE+tmp*(MAX_OCTAVE-MIN_OCTAVE);
            multiplier=((int)octave)-4;
            tmp = slider.readPercentage();
            lcd.cls();
            lcd.printf("OCTAVE: %.0f",octave);
            wait(0.1);
        }
    }
}


    int ButtonMusical::buttonsPressed = 0;
int main()
{
    led1=1;
    float* volume=speaker.getVolumeBuffer();
    
    ButtonDiesis c (PTA12);
    Note LA4(440, true, &multiplier, c.getDiesisPointer());
    Note MI4(330, true, &multiplier, c.getDiesisPointer());
    ButtonMusical a (PTA1, LA4, &speaker);
    ButtonMusical b (PTA2, MI4, &speaker);

    bool allowEdit=false;
    int mode=PLAY;


    tLedOn.attach(&ledOn, 1.0);
    while (true) {
        lcd.cls();
        menuManager(&mode, &allowEdit);
        wait(0.1);
        switch(mode) {
            case PLAY:
                octaveSettings();
                break;
            case VOLUME:
                volumeSettings(volume);
                break;
            case METRONOME:
                metronomeSettings(&bpm);
                break;
            default:
                mode=PLAY;
        }
    }
}