導航:首頁 > 源碼編譯 > c心跳監控源碼

c心跳監控源碼

發布時間:2022-07-21 01:16:34

Ⅰ 如何用心跳監控線程的死活

線程開放兩個介面供界面調用,一個是控制這個線程的開始停止介面,一個是檢查線程是否活著的介面,頁面就用ajax調用後台介面就好,還可以實時更新線程狀態。

Ⅱ 跪求!心跳檢測 源碼

http://download.pudn.com/downloads37/sourcecode/app/115157677%D0%C4%CC%F8%BC%EC%B2%E2.rar
這是你發的那個程序的下載連接~~自己下吧。。。。。希望你早點寫出來~~呵呵~

Ⅲ 誰有pulsesensor心率感測器 的c語言程序,帶注釋的。在線等挺急的

這個是主程序和部分代碼由於字數限制所以你還是留個郵箱吧
void main(void)
{
unsigned char i;
sys_init();
beep = 1;
LCD12864_DisplayOneLine(0x80,ucStr1); //顯示信息1
LCD12864_DisplayOneLine(0x90,ucStr2); //顯示信息2
LCD12864_DisplayOneLine(0x88,ucStr3); //顯示信息3
LCD12864_DisplayOneLine(0x98,ucStr4); //顯示信息4
while(1)
{
sendDataToProcessing('S', Signal); // 發送並處理原始脈搏感測器數據
if (QS == true){ // 確定發現一個心跳
fadeRate = 255; // Set 'fadeRate' Variable to 255 to fade LED with pulse
sendDataToProcessing('B',BPM); // 發送一個'B'和心率
sendDataToProcessing('Q',IBI); // send time between beats with a 'Q' prefix
QS = false; // reset the Quantified Self flag for next time
LCD_disp_list_char(2,4,DisBuff);//在LCD12864上顯示BPM
}
delay(138); // 延時 19.6ms

LCD_disp_list_char(4,4,DisBuff2);
//ledFadeToBeat();
if(Pressure<100){
for(i=0;i<8;i++){
delay(1000);}
if (Pressure<100){
beep = 0;}}
if(BPM<60|BPM>100){
for(i=0;i<9;i++){
delay(1000);}
if(BPM<60|BPM>100){
beep = 0;}
for(i = 0;i<16;i++) //依次執行寫入操作
{
putchar(ucStr1[i]);
}
for(i = 0;i<16;i++) //依次執行寫入操作
{
putchar(ucStr2[i]);
}
for(i=0;i<3;i++)
{
putchar(DisBuff[i]);}
for(i = 0;i<16;i++) //依次執行寫入操作
{
putchar(ucStr3[i]);
}
for(i = 0;i<16;i++) //依次執行寫入操作
{
putchar(ucStr4[i]);
}
for(i=0;i<4;i++)
{
putchar(DisBuff2[i]);}
}
}
//void ledFadeToBeat(){
// fadeRate -= 15; // set LED fade value
// fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into negative numbers!
// analogWrite(fadePin,fadeRate); // fade LED
// }
/******************************************************************************
函數名稱:GetADCResult
函數功能:獲取AD轉換結果函數
入口參數:BYTE ch(通道選擇)
返回值:result(A/D轉換結果)
備註:無
*******************************************************************************/

unsigned int GetADCResult(BYTE ch)
{ unsigned int result; //AD轉換結果result
ADC_CONTR&=0xf8; //清除ADC控制寄存器ADC CONTR的CHS2、CHS1、CHS0(清除通道選擇)
_nop_(); //設置ADC CONTR控制寄存器後,要加4個空操作延時才可以正確讀到ADC CONTR寄存器的值
_nop_();
_nop_();
_nop_();
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START; //開ADC電源,選擇AD轉換速率,並選擇AD通道,開始AD轉換
_nop_(); //設置ADC CONTR控制寄存器後,要加4個空操作延時才可以正確讀到ADC CONTR寄存器的值
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待AD轉換結束
ADC_CONTR &= ~ADC_FLAG; //關閉ADC
result=ADC_RES; //將AD轉換結果的高兩位賦給result
result=result<<8; //將result循環左移8位
result+=ADC_RESL; //將AD轉換結果的底8位加高兩位共10位給result
return result; //返回10位AD轉換結果
}

void sendDataToProcessing(char symbol, int dat ){
putchar(symbol); // symbol prefix tells Processing what type of data is coming
printf("%d\r\n",dat); // the data to send culminating in a carriage return
}

void UART_init(void)
{
TMOD = 0x20; //定時器工作在定時器1的方式2
PCON = 0x00; //不倍頻
SCON = 0x50; //串口工作在方式1,並且啟動串列接收
TH1 = 0xFd; //設置波特率 9600
TL1 = 0xFd;
TR1 = 1; //啟動定時器1
}
char putchar(unsigned char dat)
{
TI=0;
SBUF=dat;
while(!TI);
TI=0;
return SBUF;
}

void _nop_ (void)
{}
void T0_init(void){
// Initializes Timer0 to throw an interrupt every 2mS.
TMOD |= 0x01; //16bit TIMER
TL0=T0MS;
TH0=T0MS>>8;
TR0=1; //start Timer 0
ET0=1; //enable Timer Interrupt
EA=1; // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED
}
void T1_init(void){
// Initializes Timer0 to throw an interrupt every 2mS.
TMOD |= 0x01; //16bit TIMER
TL1=T0MS2;
TH1=T0MS2>>8;
TR1=1; //start Timer 0
ET1=1; //enable Timer Interrupt
EA=1; // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED
}
void ADC_init(unsigned char channel)
{
P1ASF=ADC_MASK<<channel; //選擇P1. channel作為A/D輸入來用
ADC_RES=0; //清除ADC結果寄存器RES
ADC_RESL=0; //清除ADC結果寄存器RESL
AUXR1 |= 0x04; //調整ADC格式的結果

}
void Timer1_rountine(void) interrupt 1
{}

unsigned int analogRead(unsigned char channel)
{
unsigned int result;
while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
ADC_CONTR &=!ADC_FLAG; //clear ADC FLAG
result=ADC_RES;
result=result<<8;
result+=ADC_RESL;
// ADC_CONTR|=channel|ADC_POWER|ADC_SPEEDLL|ADC_START;
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=T0MS>>8; //重裝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(Signal < thresh && N > (IBI/5)*3){ // 如果脈搏感測器輸出小於電源電壓一半 並且 消除雜訊時間小於 3/5個脈搏時間間隔
if (Signal < Trough){ // 如果脈搏感測器輸出小於波谷
Trough = Signal; // 跟蹤脈搏波的最低點
}
}

if(Signal > thresh && Signal > Peak){ // 如果輸出大於電源電壓一半並且大於波峰
Peak = Signal; // 將新值設為波峰
} // 跟蹤脈搏波的波峰
if (N > 250){ // 避免高頻雜訊
if ( (Signal > thresh) && (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(BPM>200)BPM=200; //限制BPM最高顯示值
if(BPM<30)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 (Signal < thresh && Pulse == true){ // 當電壓歸零節拍結束
blinkPin=1; // 熄滅脈搏燈
Pulse = false; // 重置脈搏標識我們可以重新測
amp = Peak - Trough; // 得到脈搏波的峰峰值
thresh = amp/2 + Trough; // 設置thresh位脈搏峰峰值的一半
Peak = thresh; // 為下一次測試重置波峰
Trough = thresh;
}

if (N > 2500){ //如果超過2.5秒沒有檢測到一個脈搏
thresh = 512; // 重新設置波谷
Peak = 512; // 重新設置波峰
Trough = 512; // 重新設置間隔
lastBeatTime = sampleCounter; // 把最後的節拍時間更新
firstBeat = true; // 重新設置標志避免雜訊
secondBeat = false; // 當我們得到心跳的時候
}

EA=1; // 開中斷
}// end isr

linux c 語言怎麼實現心跳包

看你是怎麼定義(一般根據網路環境定義),比如說你的心跳包時間間隔為5分鍾,那伺服器可以檢測下客戶端6分鍾內有沒有發心跳包上來,有的話,重新計時6分鍾,如果6 分鍾內沒有上報心跳包的話,就把這客戶端的連接斷開.

Ⅳ c語言編程,一個應用程序如何判斷另外一個被監控的應用程序的存活與否若用心跳實現,如何設置心跳機制

APP-2每1分鍾發一個心跳包給APP-1。APP-1如果超過1分鍾沒收到,可以累計記錄x++,收到心跳包x清零。當x=2時,可以發送一個ack包給APP-2,如果APP-2還是沒有回應,即x=3時,可以確定APP-2down掉。x在1~3直接時是網路阻塞。具體操作時間還需要自行確定。

Ⅵ 求電子課程設計(紅外線心率計)使用msp430單片機的C語言編程代碼

你的原理圖呢,硬體是怎麼連接的,這些信息要提供一下,至少要把完整的題目要求貼上來吧!

Ⅶ c# c/s 之間如何做心跳檢測

用SOCKET,然後再看具體網路情況,決定是C端還是S端發起心跳包。
一般會是C端開始工作後主動連接S端,連接成功後每過指定的時間發一個包,包的內容可以很簡單,就一個0。而S端收到後再反一個包。這樣就完成了心跳過程,如果在超出的時間沒有接到客戶端的心跳包,伺服器則斷開客戶端連接,或者做其他操作

Ⅷ 求linux c語言的心跳包程序

首先,心跳包一般是30秒或者1分鍾一次才正常,3秒一次太頻繁,耗損資源,降低效率,心跳包其實就是你自己定義一條數據send給伺服器,伺服器recv到這條數據做下判斷就行了,如果1分鍾沒收到這條數據,就斷開此客戶端的socket連接,返回socket值,根據返回的值確定此客戶端掉線了.

Ⅸ 脈搏計數器的程序(用C語言編寫程序)

#include <reg51.h>
unsigned char i,j,t,m,DelayTime,DispBuf[3];
unsigned int n,mb;
unsigned char code
BitTab[3]={0xf7,0xef,0xdf};//位驅動碼
unsigned char code
DispTab[10]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84};//字形碼
sbit P3_0=P3^0;
void delay(DelayTime);
main() //主程序
{
TMOD=0x01; //定時器T0工作於方式1
TH0=0xec;
TL0=0x78; //T0定時時間為5ms
IE=0X83; //開中斷
IT0=1; //外部中斷0為邊沿觸發方式
TR0=1; //開定時器T0
for(;;) //脈搏指示燈控制
{
if(P3_0==0)
{
delay(200);
P3_0=1;
}
}
}
external0() interrupt 0//外部中斷服務程序
{
P3_0=0; //點亮指示燈
if(n==0)
mb=0;
else
mb=12000/n; //計算每分鍾脈搏數
DispBuf[2]=mb%10;//取個位數
mb=mb/10;
DispBuf[1]=mb%10;//取十位數
DispBuf[0]=mb/10;//取百位數
n=0;
}
Timer0() interrupt 1//定時中斷服務程序
{
TH0=0xec;
TL0=0x78;
t=BitTab[j];//取位值
P3=P3|0x38;//P3.3-P3.5送1
P3=P3&t; //P3.3-P3.5輸出取出的位值
t=DispBuf[j];//取出待顯示的數
t=DispTab[t];//取字形碼
P1=t; //字型碼由P3輸出顯示
j++; //j作為數碼管的計數器,取值0-2,顯示程序通過它確認顯示哪個數碼管
if(j==3)
j=0;
n++;
if(n==2000)//10秒鍾測不到心率,n復位
n=0;
}
void delay(DelayTime)//延時子程序
{
for(;DelayTime>0;DelayTime--)
{
for(i=0;i<250;i++)
;
}
}

閱讀全文

與c心跳監控源碼相關的資料

熱點內容
方舟pv怎麼轉伺服器 瀏覽:99
數據挖掘中誤差值演算法函數 瀏覽:118
php開發套件 瀏覽:190
伺服器的spi板是什麼 瀏覽:896
解壓縮全能王中文密碼是什麼 瀏覽:80
javaftp伺服器上傳文件 瀏覽:103
演算法設計中文版pdf 瀏覽:81
視頻壓縮形式怎麼改 瀏覽:368
perl程序員 瀏覽:789
電子表格對比命令 瀏覽:610
php循環輸出數組內容 瀏覽:750
電腦加密能不能強制關掉 瀏覽:616
趣味單人解壓桌游 瀏覽:212
oppo手機谷歌伺服器無法核實什麼 瀏覽:320
軟體怎麼加密華為 瀏覽:222
掃地機怎麼安裝app 瀏覽:319
考研結合特徵值計演算法 瀏覽:516
操作系統演算法綜合題 瀏覽:153
華為程序員待遇 瀏覽:547
程序員帶娃的圖片 瀏覽:79