test publish
Dependencies: mbed GroveEarbudSensor
main.cpp@11:e9d48f0a6b3e, 2016-04-14 (annotated)
- Committer:
- antoineA
- Date:
- Thu Apr 14 12:18:49 2016 +0000
- Revision:
- 11:e9d48f0a6b3e
- Parent:
- 10:af58557a4d6c
- Child:
- 12:a56f9fb318de
main updated
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
antoineA | 0:8bec0f0b673a | 1 | #include "mbed.h" |
age2pierre | 3:b4f04b8b8797 | 2 | #include "GroveEarbudSensor.h" |
age2pierre | 8:e1beb2a9454e | 3 | #include "GypsyScale.h" |
age2pierre | 8:e1beb2a9454e | 4 | #include "MajorScale.h" |
age2pierre | 8:e1beb2a9454e | 5 | #include "Speaker.h" |
age2pierre | 8:e1beb2a9454e | 6 | #include "MelodyGenerator.h" |
age2pierre | 8:e1beb2a9454e | 7 | #include "Notes.h" |
antoineA | 10:af58557a4d6c | 8 | #include "GSRSensor.h" |
age2pierre | 8:e1beb2a9454e | 9 | #include <vector> |
age2pierre | 3:b4f04b8b8797 | 10 | |
antoineA | 11:e9d48f0a6b3e | 11 | #define NBGSRVALUE 20 |
antoineA | 11:e9d48f0a6b3e | 12 | |
age2pierre | 8:e1beb2a9454e | 13 | using namespace std; |
age2pierre | 8:e1beb2a9454e | 14 | |
age2pierre | 8:e1beb2a9454e | 15 | InterruptIn earSensorPin(p5); |
antoineA | 11:e9d48f0a6b3e | 16 | AnalogIn GSRPin(p15); |
age2pierre | 8:e1beb2a9454e | 17 | //DigitalOut led(LED1); |
age2pierre | 8:e1beb2a9454e | 18 | PwmOut speakerPin(p21); |
antoineA | 0:8bec0f0b673a | 19 | |
antoineA | 0:8bec0f0b673a | 20 | int main() |
antoineA | 0:8bec0f0b673a | 21 | { |
age2pierre | 8:e1beb2a9454e | 22 | GroveEarbudSensor earbud(&earSensorPin); |
age2pierre | 8:e1beb2a9454e | 23 | Speaker speaker(&speakerPin); |
age2pierre | 8:e1beb2a9454e | 24 | MelodyGenerator melodyGen; |
antoineA | 11:e9d48f0a6b3e | 25 | GSRSensor GSRSens(&GSRPin); |
antoineA | 11:e9d48f0a6b3e | 26 | |
age2pierre | 8:e1beb2a9454e | 27 | MajorScale scale1(SOL_4); |
age2pierre | 8:e1beb2a9454e | 28 | GypsyScale scale2(MI_4); |
antoineA | 11:e9d48f0a6b3e | 29 | |
antoineA | 11:e9d48f0a6b3e | 30 | printf("Initialization.. waiting 14s"); |
antoineA | 11:e9d48f0a6b3e | 31 | fflush(stdout); |
antoineA | 11:e9d48f0a6b3e | 32 | wait(4); // Time for GSR measure to stabilize |
antoineA | 11:e9d48f0a6b3e | 33 | |
antoineA | 11:e9d48f0a6b3e | 34 | float sumGSR, sumHR = 0.0; |
antoineA | 11:e9d48f0a6b3e | 35 | float thresholdHR, thresholdGSR = 0.0; |
antoineA | 11:e9d48f0a6b3e | 36 | for(int i = 0 ; i<NBGSRVALUE ; i++){ |
antoineA | 11:e9d48f0a6b3e | 37 | sumGSR += GSRSens.getGSRValue(); |
antoineA | 11:e9d48f0a6b3e | 38 | sumHR += earbud.getHeartRate(); |
antoineA | 11:e9d48f0a6b3e | 39 | wait(0.5); |
antoineA | 11:e9d48f0a6b3e | 40 | |
antoineA | 11:e9d48f0a6b3e | 41 | } |
antoineA | 11:e9d48f0a6b3e | 42 | thresholdGSR = sumGSR/NBGSRVALUE; |
antoineA | 11:e9d48f0a6b3e | 43 | thresholdHR = sumHR/NBGSRVALUE; |
antoineA | 11:e9d48f0a6b3e | 44 | |
antoineA | 11:e9d48f0a6b3e | 45 | vector<Notes>* melo; |
antoineA | 11:e9d48f0a6b3e | 46 | float heartRate, measureGSR; |
age2pierre | 3:b4f04b8b8797 | 47 | while(true) { |
antoineA | 11:e9d48f0a6b3e | 48 | |
antoineA | 11:e9d48f0a6b3e | 49 | heartRate = earbud.getHeartRate(); |
antoineA | 11:e9d48f0a6b3e | 50 | measureGSR = GSRSens.getGSRValue(); |
antoineA | 11:e9d48f0a6b3e | 51 | printf("\r\nHeartrate : %0.0f (nominal : %0.3f) \r\nGSR : %0.4f (nominal : %0.4f) \r\n", heartRate, thresholdHR, measureGSR, thresholdGSR); // for debug purpose |
antoineA | 11:e9d48f0a6b3e | 52 | |
age2pierre | 8:e1beb2a9454e | 53 | if(heartRate <30) { |
age2pierre | 8:e1beb2a9454e | 54 | speaker.play(SILENCE); |
age2pierre | 8:e1beb2a9454e | 55 | heartRate = earbud.getHeartRate(); |
antoineA | 11:e9d48f0a6b3e | 56 | wait(1); |
age2pierre | 8:e1beb2a9454e | 57 | } else { |
antoineA | 11:e9d48f0a6b3e | 58 | if (measureGSR < thresholdGSR){ |
antoineA | 11:e9d48f0a6b3e | 59 | melo = melodyGen.getMeasure(scale1); |
antoineA | 11:e9d48f0a6b3e | 60 | printf("\tMajor scale\r\n"); |
antoineA | 11:e9d48f0a6b3e | 61 | } |
antoineA | 11:e9d48f0a6b3e | 62 | else { |
antoineA | 11:e9d48f0a6b3e | 63 | melo = melodyGen.getMeasure(scale2); |
antoineA | 11:e9d48f0a6b3e | 64 | printf("\tGypsy scale\r\n"); |
antoineA | 11:e9d48f0a6b3e | 65 | } |
antoineA | 11:e9d48f0a6b3e | 66 | |
age2pierre | 8:e1beb2a9454e | 67 | for(vector<Notes>::iterator it = melo->begin(); it != melo->end(); ++it) { |
age2pierre | 8:e1beb2a9454e | 68 | speaker.play(*it); |
antoineA | 11:e9d48f0a6b3e | 69 | wait( 0.3 - ((heartRate - thresholdHR) * 0.0015)); |
age2pierre | 8:e1beb2a9454e | 70 | } |
age2pierre | 8:e1beb2a9454e | 71 | } |
antoineA | 11:e9d48f0a6b3e | 72 | |
antoineA | 11:e9d48f0a6b3e | 73 | |
antoineA | 0:8bec0f0b673a | 74 | } |
antoineA | 0:8bec0f0b673a | 75 | } |