BASIC4MCU | 질문게시판 | bpm값에 따라 led켜기 동작이 안됩니다 도와주세요
페이지 정보
작성자 아누이노생초보 작성일2020-11-27 22:31 조회7,828회 댓글4건본문
master님의 도움으로 bpm값이 나오는 부분까지는 갔는데 bpm값에 따른 led가 켜지지 않고 있어요.
led의 문제인가 싶어서 led도 교체해보고, 핀연결의 문제인가 해서 핀도 바꿔서 해보았으나 led가 켜지지 않고 있는 상태입니다.
도와주시면 감사하겠습니다 ㅠㅠ
#include <SoftwareSerial.h>
#define btRX 8
#define btTX 9
SoftwareSerial Bluetooth(btRX,btTX);
int greenPin=5;
int yellowPin=6;
int redPin=7;
#define pulsePin A0
// VARIABLES
int rate[10];
unsigned long sampleCounter=0;
unsigned long lastBeatTime=0;
unsigned long lastTime=0,N;
int BPM=0;
int IBI=0;
int P=512;
int T=512;
int thresh=512;
int amp=100;
int Signal;
boolean Pulse=false;
boolean firstBeat=false;
boolean secondBeat=false;
boolean QS=false;
char myChar;
//
void setup(){
Serial.begin(9600);
Bluetooth.begin(9600);
pinMode(greenPin,OUTPUT);
pinMode(yellowPin,OUTPUT);
pinMode(redPin,OUTPUT);
pinMode(10,INPUT); // Setup for leads off detection LO +
pinMode(11,INPUT); // Setup for leads off detection LO -
pinMode(pulsePin,INPUT);
}
//
void loop(){
serialOutput();
if(QS==true){ Serial.println("BPM: "+ String(BPM)); QS=false; }
else if(millis()>=(lastTime + 2)){ readPulse(); lastTime=millis(); }
}
//
void serialOutput(){
if(Bluetooth.available()){ myChar=(char)Bluetooth.read(); Serial.print(myChar); }
//
if(myChar=='n'){
Serial.println(BPM);
if(BPM< 60){ digitalWrite(yellowPin,HIGH); delay(3000); digitalWrite(yellowPin,LOW); delay(1000); }
if(BPM>100){ digitalWrite(redPin,HIGH); delay(3000); digitalWrite(redPin,LOW); delay(1000); }
if(60<=BPM&&BPM<=100){ digitalWrite(greenPin,HIGH); delay(3000); digitalWrite(greenPin,LOW); delay(1000); }}
}
//
void readPulse(){
Signal=analogRead(pulsePin);
sampleCounter+=2;
int N=sampleCounter-lastBeatTime;
detectSetHighLow();
if(N>250){ if((Signal>thresh)&&(Pulse==false)&&(N>(IBI/5)*3))pulseDetected(); }
if(Signal<thresh && Pulse==true){ Pulse=false; amp=P-T; thresh=amp/2+T; P=thresh; T=thresh; }
if(N>2500){ thresh=512; P=512; T=512; lastBeatTime=sampleCounter; firstBeat=true; secondBeat=true; }
}
//
void detectSetHighLow(){
if(Signal<thresh && N>(IBI/5)*3){ if(Signal<T)T=Signal; }
if(Signal>thresh && Signal>P){ P=Signal; }
}
//
void pulseDetected(){
Pulse=true;
IBI=sampleCounter-lastBeatTime;
lastBeatTime=sampleCounter;
if(firstBeat){ firstBeat=false; return; }
if(secondBeat){ secondBeat=false; for(int i=0;i<=9; i++)rate[i]=IBI; }
word runningTotal=0;
for(int i=0;i<=8;i++){ rate[i]=rate[i+1]; runningTotal+=rate[i]; }
rate[9]=IBI; runningTotal+=rate[9]; runningTotal/=10;
BPM=60000/runningTotal;
QS=true;
}
댓글 4
조회수 7,828master님의 댓글
master 작성일
n을 입력했을 때 1회는 켜지지 않나요?
지난 질문글의 댓글에 적은 것처럼 시리얼모니터에서 CR,LF 등을 출력하지 않도록 하세요
아누이노생초보님의 댓글
아누이노생초보
전혀 켜지지 않아요ㅠㅠ
아누이노생초보님의 댓글
아누이노생초보
시리얼 모니터에서 CR, LF 등을 출력하지 않고 그저 BPM값과 입력한 n만 출력이 되는데 LED가 켜지지 않아요ㅜㅠ
master님의 댓글
master
Serial.println(BPM);
이 코드도 실행안되고 있겠죠?