//include the library code #include #include #define samp_siz 15 #define rise_threshold 8 #define beat_count 3 #define sensorPin A1 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; // initialize the LCD library by associating any needed LCD interface pin // with the arduino pin number it is connected to const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); char str[16] = "Viva a corentena"; void setup() { Serial.begin(9600); pinMode(8,OUTPUT); digitalWrite(8,HIGH); // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("Heartbeat Reader"); for (int i = 0; i< 16; i++) { lcd.setCursor(i, 1); lcd.print(str[i]); delay(250); } // flash red LED to say hello for (int i=0;i<3;i++){ digitalWrite(REDLed,HIGH); delay(1000); digitalWrite(REDLed,LOW); delay(1000); } // write message across LCD screen for (int i = 0; i< 16; i++) { lcd.setCursor(i, 1); lcd.print(" "); delay(100); } } 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