#define samp_siz 15 #define rise_threshold 8 #define beat_count 3 #define sensorPin 0 float avg,diff,reader,start,last,rise_count,beat; int n; long int now; float reads[samp_siz],beat_time[beat_count],sum,heartrate; bool rising; void setup() { Serial.begin(9600); } void loop() { // read a 20ms period of data, calculate the average // this gets rid of the 50Hz noise from lighting in the room n = 0; start = millis(); reader = 0.; do { reader += analogRead(sensorPin); n++; now=millis(); } while (now0;i--) { reads[i]=reads[i-1]; avg += reads[i]; } reads[0]=reader; avg += reader; avg /= samp_siz; if (avg > last) { rise_count++; if(!rising && rise_count > rise_threshold) { rising = true; beat = avg; for (int i=beat_count-1;i>0;i--) { beat_time[i]=beat_time[i-1]; } beat_time[0]=millis(); } } else { rising = false; rise_count = 0; beat = avg-2; } heartrate = 0.; for(int i=1;i