Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: TextLCD mbed MMA8451Q TSI
main.cpp@8:60231840370f, 2015-09-19 (annotated)
- 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?
| User | Revision | Line number | New 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 | } | 
