Michele Furlanetto / Mbed 2 deprecated mbed_keyboard

Dependencies:   TextLCD mbed MMA8451Q TSI

Committer:
mfurlanetto
Date:
Wed Sep 23 15:38:04 2015 +0000
Revision:
9:f1fa0dad4096
Parent:
8:60231840370f
Child:
10:6e18b220e10c
finito

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfurlanetto 8:60231840370f 1 #include "ButtonMusical.cpp"
mfurlanetto 8:60231840370f 2 #include "ButtonDiesis.cpp"
mfurlanetto 8:60231840370f 3
mfurlanetto 1:47973f27d645 4 #include "TextLCD.h"
mfurlanetto 4:f4bd9fe2200b 5 #include "MMA8451Q.h"
mfurlanetto 4:f4bd9fe2200b 6 #include "TSISensor.h"
mfurlanetto 8:60231840370f 7
mfurlanetto 4:f4bd9fe2200b 8 #define PLAY 0
mfurlanetto 4:f4bd9fe2200b 9 #define VOLUME 1
mfurlanetto 4:f4bd9fe2200b 10 #define METRONOME 2
mfurlanetto 4:f4bd9fe2200b 11 #define TILT_TOLERANCE_SET 0.75
mfurlanetto 4:f4bd9fe2200b 12 #define TILT_TOLERANCE_RESET 0.05
mfurlanetto 9:f1fa0dad4096 13 #define MIN_METRONOME_BPM 30
mfurlanetto 9:f1fa0dad4096 14 #define MAX_METRONOME_BPM 185
mfurlanetto 9:f1fa0dad4096 15 #define INTERVAL_METRONOME_BPM 5
mfurlanetto 9:f1fa0dad4096 16 #define MIN_OCTAVE 2
mfurlanetto 9:f1fa0dad4096 17 #define MAX_OCTAVE 6
mfurlanetto 4:f4bd9fe2200b 18 #define MMA8451_I2C_ADDRESS (0x1d<<1)
mfurlanetto 4:f4bd9fe2200b 19
mfurlanetto 2:86de87ec731a 20 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)
mfurlanetto 6:459ddd3079fa 21
mfurlanetto 0:f48fccfff709 22 DigitalOut led1(LED1);
mfurlanetto 4:f4bd9fe2200b 23 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
mfurlanetto 4:f4bd9fe2200b 24 TSISensor slider;
mfurlanetto 6:459ddd3079fa 25 Ticker t;
mfurlanetto 6:459ddd3079fa 26 int freq;
mfurlanetto 4:f4bd9fe2200b 27 int multiplier =0;
mfurlanetto 7:98bccc314b54 28 bool doDiesis=false;
mfurlanetto 9:f1fa0dad4096 29 int bpm = 60;
mfurlanetto 7:98bccc314b54 30
mfurlanetto 7:98bccc314b54 31 Note LA4(440, true, &multiplier, &doDiesis);
mfurlanetto 7:98bccc314b54 32 Note MI4(330, true, &multiplier, &doDiesis);
mfurlanetto 4:f4bd9fe2200b 33
mfurlanetto 4:f4bd9fe2200b 34 void volumeSettings(float* volume)
mfurlanetto 4:f4bd9fe2200b 35 {
mfurlanetto 4:f4bd9fe2200b 36 float tmp= slider.readPercentage();
mfurlanetto 4:f4bd9fe2200b 37 if (tmp>0) *volume = tmp;
mfurlanetto 4:f4bd9fe2200b 38 lcd.printf("Volume: %.3f", *volume);
mfurlanetto 4:f4bd9fe2200b 39 wait(0.2);
mfurlanetto 4:f4bd9fe2200b 40 }
mfurlanetto 4:f4bd9fe2200b 41
mfurlanetto 3:a703eda2b125 42
mfurlanetto 6:459ddd3079fa 43 void menuManager(int* mode, bool* allowEdit)
mfurlanetto 4:f4bd9fe2200b 44 {
mfurlanetto 4:f4bd9fe2200b 45 double y=acc.getAccY();
mfurlanetto 0:f48fccfff709 46
mfurlanetto 4:f4bd9fe2200b 47 if (*allowEdit==false) {
mfurlanetto 4:f4bd9fe2200b 48 if (y<-TILT_TOLERANCE_SET) {
mfurlanetto 4:f4bd9fe2200b 49 *allowEdit=true;
mfurlanetto 6:459ddd3079fa 50 *mode=*mode+1;
mfurlanetto 4:f4bd9fe2200b 51 } else if (y>TILT_TOLERANCE_SET) {
mfurlanetto 4:f4bd9fe2200b 52 *allowEdit=true;
mfurlanetto 6:459ddd3079fa 53 *mode=*mode-1;
mfurlanetto 4:f4bd9fe2200b 54 }
mfurlanetto 4:f4bd9fe2200b 55 } else {
mfurlanetto 4:f4bd9fe2200b 56 if (abs(y)<TILT_TOLERANCE_RESET) {
mfurlanetto 4:f4bd9fe2200b 57 *allowEdit=false;
mfurlanetto 4:f4bd9fe2200b 58 }
mfurlanetto 4:f4bd9fe2200b 59 }
mfurlanetto 6:459ddd3079fa 60 return;
mfurlanetto 6:459ddd3079fa 61 }
mfurlanetto 6:459ddd3079fa 62
mfurlanetto 8:60231840370f 63 void flipLed()
mfurlanetto 8:60231840370f 64 {
mfurlanetto 8:60231840370f 65 led1=!led1;
mfurlanetto 6:459ddd3079fa 66 }
mfurlanetto 6:459ddd3079fa 67
mfurlanetto 9:f1fa0dad4096 68 void metronomeSettings(int* bpmReg)
mfurlanetto 8:60231840370f 69 {
mfurlanetto 9:f1fa0dad4096 70 float t_bpm = *bpmReg;
mfurlanetto 6:459ddd3079fa 71 lcd.cls();
mfurlanetto 9:f1fa0dad4096 72 lcd.printf("bpm: %d", bpm);
mfurlanetto 9:f1fa0dad4096 73 wait(0.2);
mfurlanetto 6:459ddd3079fa 74 float tmp = slider.readPercentage();
mfurlanetto 8:60231840370f 75 if(tmp>0) {
mfurlanetto 6:459ddd3079fa 76 t.detach();
mfurlanetto 8:60231840370f 77 while (tmp>0) {
mfurlanetto 9:f1fa0dad4096 78 t_bpm =int((MIN_METRONOME_BPM+tmp*(MAX_METRONOME_BPM-MIN_METRONOME_BPM))/INTERVAL_METRONOME_BPM);
mfurlanetto 6:459ddd3079fa 79 tmp = slider.readPercentage();
mfurlanetto 6:459ddd3079fa 80 lcd.cls();
mfurlanetto 9:f1fa0dad4096 81 lcd.printf("bpm: %.0f",t_bpm*INTERVAL_METRONOME_BPM);
mfurlanetto 6:459ddd3079fa 82 wait(0.1);
mfurlanetto 6:459ddd3079fa 83 }
mfurlanetto 9:f1fa0dad4096 84 *bpmReg=(int(t_bpm))*INTERVAL_METRONOME_BPM;
mfurlanetto 9:f1fa0dad4096 85 t.attach(&flipLed, 60.0/(*bpmReg));
mfurlanetto 9:f1fa0dad4096 86
mfurlanetto 6:459ddd3079fa 87 }
mfurlanetto 4:f4bd9fe2200b 88 }
mfurlanetto 4:f4bd9fe2200b 89
mfurlanetto 8:60231840370f 90
mfurlanetto 8:60231840370f 91 void octaveSettings()
mfurlanetto 8:60231840370f 92 {
mfurlanetto 8:60231840370f 93 float octave=4;
mfurlanetto 8:60231840370f 94 float tmp = slider.readPercentage();
mfurlanetto 8:60231840370f 95 lcd.cls();
mfurlanetto 8:60231840370f 96 lcd.printf("prova");
mfurlanetto 8:60231840370f 97 if(tmp>0) {
mfurlanetto 8:60231840370f 98 while (tmp>0) {
mfurlanetto 8:60231840370f 99 octave = MIN_OCTAVE+tmp*(MAX_OCTAVE-MIN_OCTAVE);
mfurlanetto 8:60231840370f 100 multiplier=((int)octave)-4;
mfurlanetto 8:60231840370f 101 tmp = slider.readPercentage();
mfurlanetto 8:60231840370f 102 lcd.cls();
mfurlanetto 8:60231840370f 103 lcd.printf("OCTAVE: %.0f",octave);
mfurlanetto 8:60231840370f 104 wait(0.1);
mfurlanetto 8:60231840370f 105 }
mfurlanetto 8:60231840370f 106 }
mfurlanetto 8:60231840370f 107 }
mfurlanetto 4:f4bd9fe2200b 108 int main()
mfurlanetto 4:f4bd9fe2200b 109 {
mfurlanetto 0:f48fccfff709 110 led1=1;
mfurlanetto 8:60231840370f 111
mfurlanetto 6:459ddd3079fa 112 Speaker speaker (PTA4);
mfurlanetto 8:60231840370f 113
mfurlanetto 6:459ddd3079fa 114 float* volume=speaker.getVolumeBuffer();
mfurlanetto 8:60231840370f 115 ButtonMusical a (PTA1, LA4, &speaker);
mfurlanetto 8:60231840370f 116 ButtonMusical b (PTA2, MI4, &speaker);
mfurlanetto 8:60231840370f 117 ButtonDiesis c (PTA12, &doDiesis, &speaker);
mfurlanetto 4:f4bd9fe2200b 118
mfurlanetto 4:f4bd9fe2200b 119 bool allowEdit=false;
mfurlanetto 4:f4bd9fe2200b 120 int mode=PLAY;
mfurlanetto 8:60231840370f 121
mfurlanetto 8:60231840370f 122
mfurlanetto 8:60231840370f 123 t.attach(&flipLed, 1.0);
mfurlanetto 4:f4bd9fe2200b 124 while (true) {
mfurlanetto 4:f4bd9fe2200b 125 lcd.cls();
mfurlanetto 6:459ddd3079fa 126 menuManager(&mode, &allowEdit);
mfurlanetto 8:60231840370f 127 wait(0.1);
mfurlanetto 4:f4bd9fe2200b 128 switch(mode) {
mfurlanetto 8:60231840370f 129 case PLAY:
mfurlanetto 8:60231840370f 130 octaveSettings();
mfurlanetto 4:f4bd9fe2200b 131 break;
mfurlanetto 4:f4bd9fe2200b 132 case VOLUME:
mfurlanetto 6:459ddd3079fa 133 volumeSettings(volume);
mfurlanetto 4:f4bd9fe2200b 134 break;
mfurlanetto 4:f4bd9fe2200b 135 case METRONOME:
mfurlanetto 9:f1fa0dad4096 136 metronomeSettings(&bpm);
mfurlanetto 4:f4bd9fe2200b 137 break;
mfurlanetto 4:f4bd9fe2200b 138 default:
mfurlanetto 6:459ddd3079fa 139 mode=PLAY;
mfurlanetto 1:47973f27d645 140 }
mfurlanetto 0:f48fccfff709 141 }
mfurlanetto 0:f48fccfff709 142 }