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@7:98bccc314b54, 2015-09-18 (annotated)
- Committer:
- mfurlanetto
- Date:
- Fri Sep 18 15:46:20 2015 +0000
- Revision:
- 7:98bccc314b54
- Parent:
- 6:459ddd3079fa
- Child:
- 8:60231840370f
Aggiunta una classe per rappresentare le note;; Aggiunto il codice per considerare il diesis
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| mfurlanetto | 0:f48fccfff709 | 1 | #include "mbed.h" | 
| mfurlanetto | 0:f48fccfff709 | 2 | #include <Button.cpp> | 
| mfurlanetto | 1:47973f27d645 | 3 | #include "TextLCD.h" | 
| mfurlanetto | 4:f4bd9fe2200b | 4 | #include "MMA8451Q.h" | 
| mfurlanetto | 4:f4bd9fe2200b | 5 | #include "TSISensor.h" | 
| mfurlanetto | 7:98bccc314b54 | 6 | /* | 
| mfurlanetto | 0:f48fccfff709 | 7 | #define DO4 262 | 
| mfurlanetto | 0:f48fccfff709 | 8 | #define RE4 294 | 
| mfurlanetto | 0:f48fccfff709 | 9 | #define MI4 330 | 
| mfurlanetto | 0:f48fccfff709 | 10 | #define FA4 349 | 
| mfurlanetto | 0:f48fccfff709 | 11 | #define SOL4 392 | 
| mfurlanetto | 0:f48fccfff709 | 12 | #define LA4 440 | 
| mfurlanetto | 0:f48fccfff709 | 13 | #define SI4 494 | 
| mfurlanetto | 7:98bccc314b54 | 14 | */ | 
| mfurlanetto | 4:f4bd9fe2200b | 15 | #define PLAY 0 | 
| mfurlanetto | 4:f4bd9fe2200b | 16 | #define VOLUME 1 | 
| mfurlanetto | 4:f4bd9fe2200b | 17 | #define METRONOME 2 | 
| mfurlanetto | 4:f4bd9fe2200b | 18 | #define TILT_TOLERANCE_SET 0.75 | 
| mfurlanetto | 4:f4bd9fe2200b | 19 | #define TILT_TOLERANCE_RESET 0.05 | 
| mfurlanetto | 6:459ddd3079fa | 20 | #define MIN_METRONOME_BPM 40 | 
| mfurlanetto | 6:459ddd3079fa | 21 | #define MAX_METRONOME_BPM 208 | 
| mfurlanetto | 4:f4bd9fe2200b | 22 | #define MMA8451_I2C_ADDRESS (0x1d<<1) | 
| mfurlanetto | 4:f4bd9fe2200b | 23 | |
| mfurlanetto | 2:86de87ec731a | 24 | 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 | 25 | |
| mfurlanetto | 0:f48fccfff709 | 26 | DigitalOut led1(LED1); | 
| mfurlanetto | 4:f4bd9fe2200b | 27 | MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); | 
| mfurlanetto | 4:f4bd9fe2200b | 28 | TSISensor slider; | 
| mfurlanetto | 6:459ddd3079fa | 29 | Ticker t; | 
| mfurlanetto | 6:459ddd3079fa | 30 | int freq; | 
| mfurlanetto | 4:f4bd9fe2200b | 31 | int multiplier =0; | 
| mfurlanetto | 7:98bccc314b54 | 32 | bool doDiesis=false; | 
| mfurlanetto | 7:98bccc314b54 | 33 | |
| mfurlanetto | 7:98bccc314b54 | 34 | Note LA4(440, true, &multiplier, &doDiesis); | 
| mfurlanetto | 7:98bccc314b54 | 35 | Note MI4(330, true, &multiplier, &doDiesis); | 
| mfurlanetto | 7:98bccc314b54 | 36 | Note FA4(349, true, &multiplier, &doDiesis); | 
| mfurlanetto | 4:f4bd9fe2200b | 37 | |
| mfurlanetto | 4:f4bd9fe2200b | 38 | void volumeSettings(float* volume) | 
| mfurlanetto | 4:f4bd9fe2200b | 39 | { | 
| mfurlanetto | 4:f4bd9fe2200b | 40 | float tmp= slider.readPercentage(); | 
| mfurlanetto | 4:f4bd9fe2200b | 41 | if (tmp>0) *volume = tmp; | 
| mfurlanetto | 4:f4bd9fe2200b | 42 | lcd.printf("Volume: %.3f", *volume); | 
| mfurlanetto | 4:f4bd9fe2200b | 43 | wait(0.2); | 
| mfurlanetto | 4:f4bd9fe2200b | 44 | } | 
| mfurlanetto | 4:f4bd9fe2200b | 45 | |
| mfurlanetto | 3:a703eda2b125 | 46 | |
| mfurlanetto | 6:459ddd3079fa | 47 | void menuManager(int* mode, bool* allowEdit) | 
| mfurlanetto | 4:f4bd9fe2200b | 48 | { | 
| mfurlanetto | 4:f4bd9fe2200b | 49 | double y=acc.getAccY(); | 
| mfurlanetto | 0:f48fccfff709 | 50 | |
| mfurlanetto | 6:459ddd3079fa | 51 | lcd.printf("modo: %d", *mode); | 
| mfurlanetto | 6:459ddd3079fa | 52 | wait(0.05); | 
| mfurlanetto | 4:f4bd9fe2200b | 53 | if (*allowEdit==false) { | 
| mfurlanetto | 4:f4bd9fe2200b | 54 | if (y<-TILT_TOLERANCE_SET) { | 
| mfurlanetto | 4:f4bd9fe2200b | 55 | *allowEdit=true; | 
| mfurlanetto | 6:459ddd3079fa | 56 | *mode=*mode+1; | 
| mfurlanetto | 4:f4bd9fe2200b | 57 | } else if (y>TILT_TOLERANCE_SET) { | 
| mfurlanetto | 4:f4bd9fe2200b | 58 | *allowEdit=true; | 
| mfurlanetto | 6:459ddd3079fa | 59 | *mode=*mode-1; | 
| mfurlanetto | 4:f4bd9fe2200b | 60 | } | 
| mfurlanetto | 4:f4bd9fe2200b | 61 | } else { | 
| mfurlanetto | 4:f4bd9fe2200b | 62 | if (abs(y)<TILT_TOLERANCE_RESET) { | 
| mfurlanetto | 4:f4bd9fe2200b | 63 | *allowEdit=false; | 
| mfurlanetto | 4:f4bd9fe2200b | 64 | } | 
| mfurlanetto | 4:f4bd9fe2200b | 65 | } | 
| mfurlanetto | 6:459ddd3079fa | 66 | return; | 
| mfurlanetto | 6:459ddd3079fa | 67 | } | 
| mfurlanetto | 6:459ddd3079fa | 68 | |
| mfurlanetto | 6:459ddd3079fa | 69 | void flipLed(){ | 
| mfurlanetto | 6:459ddd3079fa | 70 | led1=!led1; | 
| mfurlanetto | 6:459ddd3079fa | 71 | } | 
| mfurlanetto | 6:459ddd3079fa | 72 | |
| mfurlanetto | 6:459ddd3079fa | 73 | void metronomeSettings(){ | 
| mfurlanetto | 6:459ddd3079fa | 74 | float bpm=6; | 
| mfurlanetto | 6:459ddd3079fa | 75 | lcd.cls(); | 
| mfurlanetto | 6:459ddd3079fa | 76 | lcd.printf("bpm: %.0f",bpm*10); | 
| mfurlanetto | 6:459ddd3079fa | 77 | wait(0.1); | 
| mfurlanetto | 6:459ddd3079fa | 78 | float tmp = slider.readPercentage(); | 
| mfurlanetto | 6:459ddd3079fa | 79 | if(tmp>0){ | 
| mfurlanetto | 6:459ddd3079fa | 80 | t.detach(); | 
| mfurlanetto | 6:459ddd3079fa | 81 | while (tmp>0){ | 
| mfurlanetto | 6:459ddd3079fa | 82 | bpm = MIN_METRONOME_BPM/10+tmp*(MAX_METRONOME_BPM-MIN_METRONOME_BPM)/10; | 
| mfurlanetto | 6:459ddd3079fa | 83 | tmp = slider.readPercentage(); | 
| mfurlanetto | 6:459ddd3079fa | 84 | lcd.cls(); | 
| mfurlanetto | 6:459ddd3079fa | 85 | lcd.printf("bpm: %.0f",bpm*10); | 
| mfurlanetto | 6:459ddd3079fa | 86 | wait(0.1); | 
| mfurlanetto | 6:459ddd3079fa | 87 | } | 
| mfurlanetto | 6:459ddd3079fa | 88 | t.attach(&flipLed, 6/(bpm)); | 
| mfurlanetto | 6:459ddd3079fa | 89 | } | 
| mfurlanetto | 4:f4bd9fe2200b | 90 | } | 
| mfurlanetto | 4:f4bd9fe2200b | 91 | |
| mfurlanetto | 4:f4bd9fe2200b | 92 | int main() | 
| mfurlanetto | 4:f4bd9fe2200b | 93 | { | 
| mfurlanetto | 0:f48fccfff709 | 94 | led1=1; | 
| mfurlanetto | 6:459ddd3079fa | 95 | |
| mfurlanetto | 6:459ddd3079fa | 96 | Speaker speaker (PTA4); | 
| mfurlanetto | 6:459ddd3079fa | 97 | |
| mfurlanetto | 6:459ddd3079fa | 98 | float* volume=speaker.getVolumeBuffer(); | 
| mfurlanetto | 7:98bccc314b54 | 99 | Button a (PTA1, LA4, &speaker); | 
| mfurlanetto | 7:98bccc314b54 | 100 | Button b (PTA2, MI4, &speaker); | 
| mfurlanetto | 7:98bccc314b54 | 101 | Button c (PTA12, FA4, &speaker); | 
| mfurlanetto | 4:f4bd9fe2200b | 102 | |
| mfurlanetto | 4:f4bd9fe2200b | 103 | bool allowEdit=false; | 
| mfurlanetto | 4:f4bd9fe2200b | 104 | int mode=PLAY; | 
| mfurlanetto | 6:459ddd3079fa | 105 | |
| mfurlanetto | 6:459ddd3079fa | 106 | |
| mfurlanetto | 6:459ddd3079fa | 107 | t.attach(&flipLed, 1.0); | 
| mfurlanetto | 6:459ddd3079fa | 108 | |
| mfurlanetto | 4:f4bd9fe2200b | 109 | while (true) { | 
| mfurlanetto | 4:f4bd9fe2200b | 110 | lcd.cls(); | 
| mfurlanetto | 6:459ddd3079fa | 111 | menuManager(&mode, &allowEdit); | 
| mfurlanetto | 7:98bccc314b54 | 112 | lcd.printf("freq=%d", speaker.getFreq()); | 
| mfurlanetto | 7:98bccc314b54 | 113 | wait(0.1); | 
| mfurlanetto | 4:f4bd9fe2200b | 114 | switch(mode) { | 
| mfurlanetto | 7:98bccc314b54 | 115 | case PLAY: | 
| mfurlanetto | 4:f4bd9fe2200b | 116 | break; | 
| mfurlanetto | 4:f4bd9fe2200b | 117 | case VOLUME: | 
| mfurlanetto | 6:459ddd3079fa | 118 | volumeSettings(volume); | 
| mfurlanetto | 4:f4bd9fe2200b | 119 | break; | 
| mfurlanetto | 4:f4bd9fe2200b | 120 | case METRONOME: | 
| mfurlanetto | 6:459ddd3079fa | 121 | metronomeSettings(); | 
| mfurlanetto | 4:f4bd9fe2200b | 122 | break; | 
| mfurlanetto | 4:f4bd9fe2200b | 123 | case 3: | 
| mfurlanetto | 4:f4bd9fe2200b | 124 | lcd.printf("altro ancora"); | 
| mfurlanetto | 4:f4bd9fe2200b | 125 | break; | 
| mfurlanetto | 4:f4bd9fe2200b | 126 | default: | 
| mfurlanetto | 6:459ddd3079fa | 127 | mode=PLAY; | 
| mfurlanetto | 1:47973f27d645 | 128 | } | 
| mfurlanetto | 6:459ddd3079fa | 129 | |
| mfurlanetto | 0:f48fccfff709 | 130 | } | 
| mfurlanetto | 0:f48fccfff709 | 131 | } | 
