test publish
Dependencies: mbed GroveEarbudSensor
Application.cpp@13:879d678baf64, 2016-04-14 (annotated)
- Committer:
- age2pierre
- Date:
- Thu Apr 14 14:01:28 2016 +0000
- Revision:
- 13:879d678baf64
- Parent:
- 12:a56f9fb318de
Added Ticker
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 | 13:879d678baf64 | 14 | |
age2pierre | 13:879d678baf64 | 15 | /* |
age2pierre | 13:879d678baf64 | 16 | * Get #NBGSR measure of GSR and Heartrate each 0.5 s |
age2pierre | 13:879d678baf64 | 17 | * in order to establish nominal threshold |
age2pierre | 13:879d678baf64 | 18 | */ |
age2pierre | 12:a56f9fb318de | 19 | float sumGSR, sumHR = 0.0; |
age2pierre | 12:a56f9fb318de | 20 | for(int i = 0 ; i<NBGSRVALUE ; i++) { |
age2pierre | 12:a56f9fb318de | 21 | sumGSR += GSRSens.getGSRValue(); |
age2pierre | 12:a56f9fb318de | 22 | sumHR += earbud.getHeartRate(); |
age2pierre | 12:a56f9fb318de | 23 | wait(0.5); |
age2pierre | 12:a56f9fb318de | 24 | |
age2pierre | 12:a56f9fb318de | 25 | } |
age2pierre | 12:a56f9fb318de | 26 | thresholdGSR = sumGSR/NBGSRVALUE; |
age2pierre | 12:a56f9fb318de | 27 | thresholdHR = sumHR/NBGSRVALUE; |
age2pierre | 12:a56f9fb318de | 28 | |
age2pierre | 12:a56f9fb318de | 29 | } |
age2pierre | 12:a56f9fb318de | 30 | |
age2pierre | 12:a56f9fb318de | 31 | void Application::Run() |
age2pierre | 12:a56f9fb318de | 32 | { |
age2pierre | 12:a56f9fb318de | 33 | MelodyGenerator melodyGen; |
age2pierre | 12:a56f9fb318de | 34 | MajorScale scale1(SOL_4); |
age2pierre | 12:a56f9fb318de | 35 | GypsyScale scale2(MI_4); |
age2pierre | 12:a56f9fb318de | 36 | float heartRate, measureGSR; |
age2pierre | 12:a56f9fb318de | 37 | |
age2pierre | 12:a56f9fb318de | 38 | while(true) { |
age2pierre | 12:a56f9fb318de | 39 | |
age2pierre | 12:a56f9fb318de | 40 | heartRate = earbud.getHeartRate(); |
age2pierre | 12:a56f9fb318de | 41 | measureGSR = GSRSens.getGSRValue(); |
age2pierre | 12:a56f9fb318de | 42 | 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 | 43 | |
age2pierre | 12:a56f9fb318de | 44 | if(heartRate <30) { |
age2pierre | 12:a56f9fb318de | 45 | speaker.play(SILENCE); |
age2pierre | 12:a56f9fb318de | 46 | heartRate = earbud.getHeartRate(); |
age2pierre | 12:a56f9fb318de | 47 | wait(1); |
age2pierre | 12:a56f9fb318de | 48 | } else { |
age2pierre | 12:a56f9fb318de | 49 | if (measureGSR < thresholdGSR) { |
age2pierre | 12:a56f9fb318de | 50 | melo = melodyGen.getMeasure(scale1); |
age2pierre | 12:a56f9fb318de | 51 | printf("\tMajor scale\r\n"); |
age2pierre | 12:a56f9fb318de | 52 | } else { |
age2pierre | 12:a56f9fb318de | 53 | melo = melodyGen.getMeasure(scale2); |
age2pierre | 12:a56f9fb318de | 54 | printf("\tGypsy scale\r\n"); |
age2pierre | 12:a56f9fb318de | 55 | } |
age2pierre | 13:879d678baf64 | 56 | |
age2pierre | 13:879d678baf64 | 57 | timerNote.attach(this, &Application::playMeasure, 0.3 - ((heartRate - thresholdHR) * 0.0015)); |
age2pierre | 12:a56f9fb318de | 58 | } |
age2pierre | 12:a56f9fb318de | 59 | } |
age2pierre | 13:879d678baf64 | 60 | } |
age2pierre | 13:879d678baf64 | 61 | |
age2pierre | 13:879d678baf64 | 62 | void Application::playMeasure() |
age2pierre | 13:879d678baf64 | 63 | { |
age2pierre | 13:879d678baf64 | 64 | static int it = 0; |
age2pierre | 13:879d678baf64 | 65 | if(it < melo->size()) { |
age2pierre | 13:879d678baf64 | 66 | speaker.play((*melo)[it]); |
age2pierre | 13:879d678baf64 | 67 | ++it; |
age2pierre | 13:879d678baf64 | 68 | } |
age2pierre | 13:879d678baf64 | 69 | else { |
age2pierre | 13:879d678baf64 | 70 | it = 0; |
age2pierre | 13:879d678baf64 | 71 | timerNote.detach(); |
age2pierre | 13:879d678baf64 | 72 | } |
age2pierre | 12:a56f9fb318de | 73 | } |