Prezados, estou com um projeto da universidade que consiste em usar um piezo como sensor de pulso cardíaco e mostrar o ECG (eletrocardiograma) e os BPM (batimentos por minuto) em um display LCD.
Confesso que sou muito novo em eletrônica e programação por isso estou tendo alguns problemas relativos ao código.
Estou me baseando em um projeto que tem apenas uma diferença, o sensor de pulso não é um piezoelétrico, e sim um sensor de infravermelho. Segue o link do projeto em que estou me baseando:
Meu gráfico está sendo plotado muito rapidamente e os bmp estão chegando a 1200, o que talvez seja um problema com a sensibilidade do piezo, ou não, não sei ao certo.
Segue também uma foto do display:
https://drive.google.com/open?id=1rCbzv0IimYrBDz_F_ZVBRPoT8u0DO6rPvw
E o código que mexi um pouco em relação ao original do xtronical.
#include <Adafruit_SSD1306.h>
#define OLED_Address 0x3C
Adafruit_SSD1306 oled(1);
int x=0;
int lastx=0;
int lasty=0;
int LastTime=0;
int ThisTime;
bool BPMTiming=false;
bool BeatComplete=false;
int BPM=0;
#define UpperThreshold 500
#define LowerThreshold 550
void setup() {
oled.begin(SSD1306_SWITCHCAPVCC, OLED_Address);
oled.clearDisplay();
oled.setTextSize(1);
}
void loop()
{
if(x>127)
{
oled.clearDisplay();
x=0;
lastx=x;
}
ThisTime=millis();
int value=analogRead(0);
oled.setTextColor(WHITE);
int y=(value/128);
oled.writeLine(lastx,lasty,x,y,WHITE);
lasty=y;
lastx=x;
// calc bpm
if(value>UpperThreshold)
{
if(BeatComplete)
{
BPM=ThisTime-LastTime;
BPM=int(60/(float(BPM)/1000));
BPMTiming=false;
BeatComplete=false;
}
if(BPMTiming==false)
{
LastTime=millis();
BPMTiming=true;
}
}
if((value<LowerThreshold)&(BPMTiming))
BeatComplete=true;
// display bpm
oled.writeFillRect(0,23,128,64,BLACK);
oled.setCursor(0,23);
oled.print(BPM);
oled.print(" BPM");
oled.display();
x++;
}
Agradeço a todos desde já!
Att.