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@9:f1fa0dad4096, 2015-09-23 (annotated)
- 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?
| 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 | 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 | } |
