return result;
}
// Timer 0中断子程序,每2MS中断一次,读取AD值 , 计算心率值
void Timer0_rountine(void) interrupt 1
{
int N;
unsigned char i;
// keep a running total of the last 10 IBI values
unsigned int runningTotal = 0;// clear the runningTotal variable
EA=0;// 关定时器中断
TL0=T0MS;
TH0=T0MS8;//重装16位定时器初值
Pressure = (GetADCResult(PressurePin));//****************
DisBuff2[3]= Pressure%10+48;//取个位数
DisBuff2[2]= Pressure%100/10+48; //取十位数
DisBuff2[1]= Pressure%1000/100+48;//百位数***************
DisBuff2[0]= Pressure/1000+48;//取千位数
Signal = GetADCResult(PulsePin);// 读脉搏传感器
sampleCounter += 2;// 使用这个值跟踪记录脉搏时间间隔在ms级
N = sampleCounter - lastBeatTime;// 减上个节拍的时间来避免噪声
//找到脉搏波的波峰和波谷
if(SignalthreshN(IBI/5)*3){// 如果脉搏传感器输出小于电源电压一半 并且 消除噪声时间小于 3/5个脉搏时间间隔
if (SignalTrough){// 如果脉搏传感器输出小于波谷
Trough = Signal;// 跟踪脉搏波的最低点
}
}
if(SignalthreshSignalPeak){// 如果输出大于电源电压一半并且大于波峰
Peak = Signal;// 将新值设为波峰
}// 跟踪脉搏波的波峰
if (N250){// 避免高频噪声
if ( (Signalthresh)(Pulse == false)(N(IBI/5)*3) ){
Pulse = true;// 当检测到一个脉搏时将脉搏标志设为真
blinkPin=0;// 点亮脉搏灯
IBI = sampleCounter - lastBeatTime;// 测量两个脉搏的时间in mS
lastBeatTime = sampleCounter;// 跟踪脉搏时间
if(secondBeat){// 如果这是第二个脉搏
secondBeat = false;// 清除标识
for(i=0; i=9; i++){// 全部的数据作为真实脉搏BMP
rate[i] = IBI;
}
}
if(firstBeat){// 如果是第一个脉搏
firstBeat = false;// 清除标志
secondBeat = true;// 设置第二脉搏标志
EA=1;//开中断
return;// IBI 值是不可靠的所以抛弃
}
for(i=0; i=8; i++){// 移动数据在rate数组中
rate[i] = rate[i+1];// 顶替旧值
runningTotal += rate[i];// 加上第九个新值
}
rate[9] = IBI;// 加最后的IBI到rate数组中
runningTotal += rate[9];// 加上一个IBI到runningTotal
runningTotal /= 10;// 取平均值
BPM = 60000/runningTotal;// 一分钟可以检测到多少个心跳及 BPM!
if(BPM200)BPM=200;//限制BPM最高显示值
if(BPM30)BPM=30;//限制BPM最低显示值
DisBuff[2]= BPM%10+48;//取个位数
DisBuff[1]= BPM%100/10+48; //取十位数
DisBuff[0]= BPM/100+48;//百位数
if(DisBuff[0]==48)
DisBuff[0]=32;
QS = true;// 设置QS标志
// QS FLAG IS NOT CLEARED INSIDE THIS ISR
}
}
if (SignalthreshPulse == true){// 当电压归零节拍结束
blinkPin=1;// 熄灭脉搏灯
Pulse = false;// 重置脉搏标识心率传感器c语言函数定义我们可以重新测
amp = Peak - Trough;// 得到脉搏波的峰峰值
thresh = amp/2 + Trough;// 设置thresh位脉搏峰峰值的一半
Peak = thresh;// 为下一次测试重置波峰
Trough = thresh;
}
if (N2500){//如果超过2.5秒没有检测到一个脉搏
thresh = 512;// 重新设置波谷
Peak = 512;// 重新设置波峰
Trough = 512;// 重新设置间隔
lastBeatTime = sampleCounter;// 把最后的节拍时间更新
firstBeat = true;// 重新设置标志避免噪声
secondBeat = false;// 当我们得到心跳的时候
}
EA=1;// 开中断
}// end isr
关于心率传感器c语言函数定义和心率传感器arduino的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 公众号怎么找推广,去哪找公众号做推广
- 开直播公司要有什么证书,开直播公司要有什么证书吗
- 安卓解析html标签,安卓查看html文件
- 闲置衣服直播卖货话术,直播卖衣服如何吸引人气
- php网站新建数据库 php创建数据库的命令是什么
- 鸿蒙系统如何关闭流量管理,鸿蒙系统如何关闭流量管理权限
- 好的推广加盟代理项目平台,免费加盟项目推广
- Python怎么运用函数 python运用函数和代码复用数列求和
- 如何做好开店渠道营销,怎么做好渠道销售技巧