test publish

Dependencies:   mbed GroveEarbudSensor

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?

UserRevisionLine numberNew 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 }