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