我的升级版脉搏测试仪

王顺 发表于 2017-11-23 22:08IMG_20171119_142417.jpg (72.16 KB, 下载次数: 37)

脉搏的判断用了斜率(微分)的方法,不知道有没有人和我想的一样?经测试还是比较准的。#include <SoftwareSerial.h>SoftwareSerial mySerial(5, 6);int PulseSensorPurplePin = A0;int Signal;float Sig;int OldSignal=0;int HeartRate=0;int Dev=0;int Xinlv[10];long Jishi;long Laoshijian=0;long TimeDev=0;int i=0;int Sum;int Sum1;int j=0;int k=0;int h[300];int pulseRead[300];int p;int temp;int th;int Max;int flag=0;int m;void setup(){delay(500);pinMode(4,INPUT);mySerial.begin(9600);attachInterrupt(0,stoptest,RISING);mySerial.print("page 2");mySerial.write(0XFF);mySerial.write(0XFF);mySerial.write(0XFF);while(digitalRead(4)==LOW){}mySerial.print("page 1");mySerial.write(0XFF);mySerial.write(0XFF);mySerial.write(0XFF);delay(200);Signal = analogRead(PulseSensorPurplePin);for(j=0;j<300;j++){OldSignal=Signal;Signal = analogRead(PulseSensorPurplePin);pulseRead[j]=Signal;h[j]=Signal-OldSignal;delay(10);}for(i=0;i<3;i++){Max=i;for(j=i+1;j<300;j++){if(h[Max]<h[j]){Max=j;}}temp=h;h=h[Max];h[Max]=temp;}Sum=0;for(i=0;i<3;i++){Sum+=h;}th=4*Sum/15;for(i=0;i<300;i++){Max=i;for(j=i+1;j<300;j++){if(pulseRead[Max]<pulseRead[j]){Max=j;}}temp=pulseRead;pulseRead=pulseRead[Max];pulseRead[Max]=temp;}Sum1=0;for(i=0;i<3;i++){Sum1+=pulseRead;}p=Sum1/3;Sum1=0;for(i=293;i<298;i++){Sum1+=pulseRead;}m=Sum1/5;mySerial.print("t1.txt=\"");mySerial.print(th);mySerial.print("\"");mySerial.write(0XFF);mySerial.write(0XFF);mySerial.write(0XFF);delay(2000);OldSignal=0;HeartRate=0;Dev=0;Jishi=0;Laoshijian=0;TimeDev=0;i=0;Sum=0;Sum1=0;j=0;temp=0;mySerial.print("page 0");mySerial.write(0XFF);mySerial.write(0XFF);mySerial.write(0XFF);delay(500);}void loop(){if(flag==0){Signal = analogRead(PulseSensorPurplePin);if((p-m)>200) {Sig=(80.0+Signal-(p+m)/2)*180.0/(p+m);} else {Sig=80.0+Signal-(p+m)/2 ;}mySerial.print("add 1,0,");mySerial.print((int)Sig);mySerial.write(0XFF);mySerial.write(0XFF);mySerial.write(0XFF);Jishi=millis();Dev=Signal-OldSignal;if((Dev<250)&&(Dev>th)){TimeDev = Jishi-Laoshijian;if(Laoshijian!=0) {Laoshijian=Jishi;if(TimeDev>50){HeartRate=60000/TimeDev;Xinlv=HeartRate;Laoshijian=Jishi;mySerial.print("t2.txt=\"");mySerial.print(Xinlv);mySerial.print("\"");mySerial.write(0XFF);mySerial.write(0XFF);mySerial.write(0XFF);if (i>=9){for(i=0;i<10;i++){Sum=Sum+Xinlv;}HeartRate=Sum/10;Sum=0;i=0;mySerial.print("t4.txt=\"");mySerial.print(HeartRate);mySerial.print("\"");mySerial.write(0XFF);mySerial.write(0XFF);mySerial.write(0XFF);}i++;//mySerial.println();}}Laoshijian=Jishi;}OldSignal=Signal;delay(10);}else{while(digitalRead(4)==LOW){}mySerial.print("page 1");mySerial.write(0XFF);mySerial.write(0XFF);mySerial.write(0XFF);delay(200);Signal = analogRead(PulseSensorPurplePin);for(j=0;j<300;j++){OldSignal=Signal;Signal = analogRead(PulseSensorPurplePin);pulseRead[j]=Signal;h[j]=Signal-OldSignal;delay(10);}for(i=0;i<3;i++){Max=i;for(j=i+1;j<300;j++){if(h[Max]<h[j]){Max=j;}}temp=h;h=h[Max];h[Max]=temp;}Sum=0;for(i=0;i<3;i++){Sum+=h;}th=4*Sum/15;for(i=0;i<300;i++){Max=i;for(j=i+1;j<300;j++){if(pulseRead[Max]<pulseRead[j]){Max=j;}}temp=pulseRead;pulseRead=pulseRead[Max];pulseRead[Max]=temp;}Sum1=0;for(i=0;i<3;i++){Sum1+=pulseRead;}p=Sum1/3;Sum1=0;for(i=293;i<298;i++){Sum1+=pulseRead;}m=Sum1/5;mySerial.print("t1.txt=\"");mySerial.print(th);mySerial.print("\"");mySerial.write(0XFF);mySerial.write(0XFF);mySerial.write(0XFF);delay(2000);OldSignal=0;HeartRate=0;Dev=0;Jishi=0;Laoshijian=0;TimeDev=0;i=0;Sum=0;Sum1=0;j=0;temp=0;delay(500);flag=0;mySerial.print("page 0");mySerial.write(0XFF);mySerial.write(0XFF);mySerial.write(0XFF);delay(500);}}void stoptest(){flag=1;}

(0)

相关推荐