Michele Furlanetto / Mbed 2 deprecated mbed_keyboard

Dependencies:   TextLCD mbed MMA8451Q TSI

Committer:
mfurlanetto
Date:
Fri Oct 16 16:38:29 2015 +0000
Branch:
mono
Revision:
10:6e18b220e10c
Parent:
9:f1fa0dad4096
Child:
11:97e964c9eeb2
ritornati alla singola nota contemporanea.

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