Michele Furlanetto / Mbed 2 deprecated mbed_keyboard

Dependencies:   TextLCD mbed MMA8451Q TSI

Committer:
mfurlanetto
Date:
Sat Sep 19 10:04:37 2015 +0000
Revision:
8:60231840370f
Parent:
7:98bccc314b54
Child:
9:f1fa0dad4096
Aggiunta le gestione delle ottave

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