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.
Fork of hapticFeedback by
hapticFeedback.cpp@1:06fef55a7268, 2015-07-02 (annotated)
- Committer:
- nathanhonka
- Date:
- Thu Jul 02 21:38:15 2015 +0000
- Revision:
- 1:06fef55a7268
- Parent:
- 0:ea2b9b15a433
Corrected header file include guards (did not encapsulate entire header).
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| perr1940 | 0:ea2b9b15a433 | 1 | //11/13/12 MM Made fix to haptic error where exo would freak out when it was in the sitting position and you commanded it to stand up |
| perr1940 | 0:ea2b9b15a433 | 2 | #include "mbed.h" |
| perr1940 | 0:ea2b9b15a433 | 3 | #include "HipControl.h" |
| perr1940 | 0:ea2b9b15a433 | 4 | #include "hapticFeedback.h" |
| perr1940 | 0:ea2b9b15a433 | 5 | |
| perr1940 | 0:ea2b9b15a433 | 6 | // arpeggio down (A E C# A) = f(880 659 554 440) = T(.0011363 .00151745 .00180505 .0022727) |
| perr1940 | 0:ea2b9b15a433 | 7 | // doogie howser MD theme (A(high) A(high) A(Low) A(low) A(high) D#) = f(880 880 440 440 880 622) = T(.0011363 .0011363 .0022727 .0022727 .0011363 .0016077) |
| perr1940 | 0:ea2b9b15a433 | 8 | |
| perr1940 | 0:ea2b9b15a433 | 9 | const float arpeggio[] = {.0011363, .00151745, .00180505, .0022727}; |
| perr1940 | 0:ea2b9b15a433 | 10 | const float arpeggio_t[] = {.1, .1, .1, .1}; |
| perr1940 | 0:ea2b9b15a433 | 11 | const float DH[] = {.0011363, .00005, .0011363, .00005, .0022727, .00005, .0022727, .00005, .0011363, .00005, .0016077}; // doogie howser periods |
| perr1940 | 0:ea2b9b15a433 | 12 | const float DH_t[] = {.1, .05, .1, .05, .1, .05, .1, .05, .1, .05, .1}; |
| perr1940 | 0:ea2b9b15a433 | 13 | const float IronMan[] = {0.0010124,0.0008513,0.00005,0.0008513,0.00005,0.0007584,0.00005,0.0007584,0.0006378,0.0006757,0.0006378,0.0006757,0.0006378,0.0006757,0.0008513,0.000050,0.0008513,0.000050,.0007584,0.00005,0.0007584}; |
| perr1940 | 0:ea2b9b15a433 | 14 | const float IronMan_t[] = {.8,.5,.3,.3,.1,.3,.1,.4,.2,.2,.2,.2,.2,.2,.3,.1,.3,.1,.3,.1,.3}; |
| perr1940 | 0:ea2b9b15a433 | 15 | const float lockSound[] = {.0011363,.0022727}; |
| perr1940 | 0:ea2b9b15a433 | 16 | const float lockSound_t[] = {.3, .3}; |
| perr1940 | 0:ea2b9b15a433 | 17 | const float unlockSound[] = {.0022727,.0011363}; |
| perr1940 | 0:ea2b9b15a433 | 18 | const float unlockSound_t[] = {.2, .2}; |
| perr1940 | 0:ea2b9b15a433 | 19 | const float LowBatterySound[] = {.00151745,.00151745}; |
| perr1940 | 0:ea2b9b15a433 | 20 | const float LowBatterySound_t[] = {.1,.1}; |
| perr1940 | 0:ea2b9b15a433 | 21 | const short unsigned int IronMan_count=(sizeof(IronMan)/sizeof(IronMan[0]))-1; |
| perr1940 | 0:ea2b9b15a433 | 22 | const short unsigned int arpeggio_count=(sizeof(arpeggio)/sizeof(arpeggio[0]))-1; |
| perr1940 | 0:ea2b9b15a433 | 23 | const short unsigned int DH_count=(sizeof(DH)/sizeof(DH[0]))-1; |
| perr1940 | 0:ea2b9b15a433 | 24 | const short unsigned int lockSound_count=(sizeof(lockSound)/sizeof(lockSound[0]))-1; |
| perr1940 | 0:ea2b9b15a433 | 25 | const short unsigned int unlockSound_count=(sizeof(unlockSound)/sizeof(unlockSound[0]))-1; |
| perr1940 | 0:ea2b9b15a433 | 26 | |
| perr1940 | 0:ea2b9b15a433 | 27 | |
| perr1940 | 0:ea2b9b15a433 | 28 | bool hapticOn = false; |
| perr1940 | 0:ea2b9b15a433 | 29 | int buzzMode; |
| perr1940 | 0:ea2b9b15a433 | 30 | |
| perr1940 | 0:ea2b9b15a433 | 31 | MotorMusic::MotorMusic(HipControl& left, HipControl& right):pwmDefault(0.00005),count(0),count_max(0),_left(left),_right(right) |
| perr1940 | 0:ea2b9b15a433 | 32 | { |
| perr1940 | 0:ea2b9b15a433 | 33 | time.start(); |
| perr1940 | 0:ea2b9b15a433 | 34 | } |
| perr1940 | 0:ea2b9b15a433 | 35 | void MotorMusic::setDefault(float a) |
| perr1940 | 0:ea2b9b15a433 | 36 | { |
| perr1940 | 0:ea2b9b15a433 | 37 | pwmDefault=a; |
| perr1940 | 0:ea2b9b15a433 | 38 | } |
| perr1940 | 0:ea2b9b15a433 | 39 | void MotorMusic::check() |
| perr1940 | 0:ea2b9b15a433 | 40 | { |
| perr1940 | 0:ea2b9b15a433 | 41 | if (musicFlag==1) { |
| perr1940 | 0:ea2b9b15a433 | 42 | song(); |
| perr1940 | 0:ea2b9b15a433 | 43 | } |
| perr1940 | 0:ea2b9b15a433 | 44 | } |
| perr1940 | 0:ea2b9b15a433 | 45 | void MotorMusic::init() |
| perr1940 | 0:ea2b9b15a433 | 46 | { |
| perr1940 | 0:ea2b9b15a433 | 47 | _left.pwmPeriod(ptrNotes[count]); //play first note |
| perr1940 | 0:ea2b9b15a433 | 48 | _right.pwmPeriod(ptrNotes[count]); //play first note |
| perr1940 | 0:ea2b9b15a433 | 49 | } |
| perr1940 | 0:ea2b9b15a433 | 50 | void MotorMusic::song() |
| perr1940 | 0:ea2b9b15a433 | 51 | { |
| perr1940 | 0:ea2b9b15a433 | 52 | if(time.read()>=ptrTimes[count]) { //change note if the time to play the previous note is over |
| perr1940 | 0:ea2b9b15a433 | 53 | count++; //change note counter |
| perr1940 | 0:ea2b9b15a433 | 54 | time.reset(); //reset and start timer |
| perr1940 | 0:ea2b9b15a433 | 55 | _left.pwmPeriod(ptrNotes[count]); //increment note |
| perr1940 | 0:ea2b9b15a433 | 56 | _right.pwmPeriod(ptrNotes[count]); //increment note |
| perr1940 | 0:ea2b9b15a433 | 57 | } |
| perr1940 | 0:ea2b9b15a433 | 58 | if(count>count_max) { |
| perr1940 | 0:ea2b9b15a433 | 59 | _left.pwmPeriod(pwmDefault); //increment note |
| perr1940 | 0:ea2b9b15a433 | 60 | _right.pwmPeriod(pwmDefault); //increment note |
| perr1940 | 0:ea2b9b15a433 | 61 | count=0; //counter to change notes |
| perr1940 | 0:ea2b9b15a433 | 62 | musicFlag=0; //flag to signal playing music |
| perr1940 | 0:ea2b9b15a433 | 63 | } |
| perr1940 | 0:ea2b9b15a433 | 64 | } |
| perr1940 | 0:ea2b9b15a433 | 65 | |
| perr1940 | 0:ea2b9b15a433 | 66 | |
| perr1940 | 0:ea2b9b15a433 | 67 | void MotorMusic::playIronMan() |
| perr1940 | 0:ea2b9b15a433 | 68 | { |
| perr1940 | 0:ea2b9b15a433 | 69 | ptrNotes=IronMan; //point to the Iron Man notes array |
| perr1940 | 0:ea2b9b15a433 | 70 | ptrTimes=IronMan_t;//point to the Iron Man times array |
| perr1940 | 0:ea2b9b15a433 | 71 | time.reset();//reset timer for music |
| perr1940 | 0:ea2b9b15a433 | 72 | musicFlag=1;//flag to play music |
| perr1940 | 0:ea2b9b15a433 | 73 | count_max=IronMan_count; |
| perr1940 | 0:ea2b9b15a433 | 74 | init(); |
| perr1940 | 0:ea2b9b15a433 | 75 | } |
| perr1940 | 0:ea2b9b15a433 | 76 | void MotorMusic::playArpeggio() |
| perr1940 | 0:ea2b9b15a433 | 77 | { |
| perr1940 | 0:ea2b9b15a433 | 78 | ptrNotes=arpeggio; //point to the Iron Man notes array |
| perr1940 | 0:ea2b9b15a433 | 79 | ptrTimes=arpeggio_t;//point to the Iron Man times array |
| perr1940 | 0:ea2b9b15a433 | 80 | time.reset();//reset timer for music |
| perr1940 | 0:ea2b9b15a433 | 81 | musicFlag=1;//flag to play music |
| perr1940 | 0:ea2b9b15a433 | 82 | count_max=arpeggio_count; |
| perr1940 | 0:ea2b9b15a433 | 83 | init(); |
| perr1940 | 0:ea2b9b15a433 | 84 | } |
| perr1940 | 0:ea2b9b15a433 | 85 | void MotorMusic::playDH() |
| perr1940 | 0:ea2b9b15a433 | 86 | { |
| perr1940 | 0:ea2b9b15a433 | 87 | ptrNotes=DH; //point to the Iron Man notes array |
| perr1940 | 0:ea2b9b15a433 | 88 | ptrTimes=DH_t;//point to the Iron Man times array |
| perr1940 | 0:ea2b9b15a433 | 89 | time.reset();//reset timer for music |
| perr1940 | 0:ea2b9b15a433 | 90 | musicFlag=1;//flag to play music |
| perr1940 | 0:ea2b9b15a433 | 91 | count_max=DH_count; |
| perr1940 | 0:ea2b9b15a433 | 92 | init(); |
| perr1940 | 0:ea2b9b15a433 | 93 | } |
| perr1940 | 0:ea2b9b15a433 | 94 | void MotorMusic::playLock() |
| perr1940 | 0:ea2b9b15a433 | 95 | { |
| perr1940 | 0:ea2b9b15a433 | 96 | ptrNotes=lockSound; //point to the Iron Man notes array |
| perr1940 | 0:ea2b9b15a433 | 97 | ptrTimes=lockSound_t;//point to the Iron Man times array |
| perr1940 | 0:ea2b9b15a433 | 98 | time.reset();//reset timer for music |
| perr1940 | 0:ea2b9b15a433 | 99 | musicFlag=1;//flag to play music |
| perr1940 | 0:ea2b9b15a433 | 100 | count_max=lockSound_count; |
| perr1940 | 0:ea2b9b15a433 | 101 | init(); |
| perr1940 | 0:ea2b9b15a433 | 102 | } |
| perr1940 | 0:ea2b9b15a433 | 103 | void MotorMusic::playUnlock() |
| perr1940 | 0:ea2b9b15a433 | 104 | { |
| perr1940 | 0:ea2b9b15a433 | 105 | ptrNotes=unlockSound; //point to the Iron Man notes array |
| perr1940 | 0:ea2b9b15a433 | 106 | ptrTimes=unlockSound_t;//point to the Iron Man times array |
| perr1940 | 0:ea2b9b15a433 | 107 | time.reset();//reset timer for music |
| perr1940 | 0:ea2b9b15a433 | 108 | musicFlag=1;//flag to play music |
| perr1940 | 0:ea2b9b15a433 | 109 | count_max=unlockSound_count; |
| perr1940 | 0:ea2b9b15a433 | 110 | init(); |
| perr1940 | 0:ea2b9b15a433 | 111 | } |
| perr1940 | 0:ea2b9b15a433 | 112 | //WTF is this? MM |
| perr1940 | 0:ea2b9b15a433 | 113 | |
| perr1940 | 0:ea2b9b15a433 | 114 |
