test publish

Dependencies:   mbed GroveEarbudSensor

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?

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