Estoy realizando el envio de los pulsos y de la ubicación, el problema es que el ritmo cardiaco me da cero, he estado cambiando y probando códigos y al momento de quitar el LoRa.endPacket() se soluciona y comienza a leer normal el sensor, pero es obligatorio usar LoRa.endPacket() ya que necesito enviarlo mediante LoRa. les dejo el código. (El codigo tiene muchas cosas que no se usan ya que como estoy haciendo pruebas aun no lo arreglo). Revisando también vi que LoRa.endPacket() se demora mas de 500ms. tal vez tenga q ver con eso y como puedo solucionarlos con todo muchas gracias a quien me pueda ayudar
#include <TinyGPS.h>
#include <Wire.h>
#include <WiFi.h>
#include <heltec.h>
#include "images.h"
#include "MAX30100_PulseOximeter.h"
#define BAND 915E6 //you can set band here directly,e.g. 868E6,915E6
#define BLYNK_PRINT Serial
#define REPORTING_PERIOD_MS 100
PulseOximeter pox;
double har=0;
int spo2=0, i=0;
double lhar=0;
int lspo2=0;
float BPM, SpO2;
float latitud, longitud, altitud;
int year;
byte month, day, hour, minute, second, tiempo;
uint32_t tsLastReport = 0;
TinyGPS gps;
static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);
#define DEBUG_ARRAY(a) {for (int index = 0; index < sizeof(a) / sizeof(a[0]); index++) {Serial.print(a[index]); Serial.print('\t');} Serial.println();};
String cadenaGPS[9] = "";
String STR = "";
const char separator = ',';
const int dataLength = 2;
int j=0;
float data[dataLength];
void logo(){
Heltec.display->clear();
Heltec.display->drawXbm(0,5,logo_width,logo_height,logo_bits);
Heltec.display->display();
}
void onBeatDetected()
{
//Serial.println("Beat Detected!");
}
void setup()
{
pinMode(19, OUTPUT);
Heltec.begin(true /DisplayEnable Enable/, true /Heltec.Heltec.Heltec.LoRa Disable/, true /Serial Enable/, true /PABOOST Enable/, BAND /long BAND/);
Heltec.display->init();
Heltec.display->flipScreenVertically();
Heltec.display->setFont(ArialMT_Plain_10);
logo();
delay(1500);
Heltec.display->clear();
Heltec.display->drawString(0, 0, "Heltec.LoRa OK!");
Heltec.display->display();
Serial.begin(9600);
delay(1000);
Serial.print("Initializing Pulse Oximeter..");
if (!pox.begin())
{
Serial.println("FAILED");
for(;;);
}
else
{
Serial.println("SUCCESS");
pox.setOnBeatDetectedCallback(onBeatDetected);
}
// The default current for the IR LED is 50mA and it could be changed by uncommenting the following line.
pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
}
void loop()
{
float flat, flon;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
// pox.begin();
// while (((spo2==0) or (har==0)) or ((har == lhar) and (spo2==lspo2))){
// pox.update();
// BPM = pox.getHeartRate();
// SpO2 = pox.getSpO2();
// if (millis() - tsLastReport > REPORTING_PERIOD_MS)
// {
// Serial.print("Heart rate:");
// Serial.print(BPM);
// Serial.print(" bpm / SpO2:");
// Serial.print(SpO2);
// Serial.println(" %");
// tsLastReport = millis();
// }
// j++;
while (Serial.available())
{
int c=Serial.read();
if (gps.encode(c))
{
gps.f_get_position(&latitud, &longitud);
altitud=gps.f_altitude();
gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&tiempo);
}
}
pulso();
String bpm1 = String(BPM, 2);
String latitud1 = String(latitud, 6);
String longitud1 = String(longitud, 6);
String altitud1 = String(altitud, 2);
String year1 = String(year);
String month1 = String(month);
String day1 = String(day);
String hora1 = String(hour);
String minuto1 = String(minute);
String segundo1 = String(second);
Heltec.display->clear();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->setFont(ArialMT_Plain_10);
Heltec.display->drawString(0, 0, bpm1+" bpm");
Heltec.display->drawString(0, 10, latitud1+" Latitud");
Heltec.display->drawString(0, 20, longitud1+" Longitud");
Heltec.display->drawString(0, 30, altitud1+" Altitud");
Heltec.display->drawString(0, 40, year1+",");
Heltec.display->drawString(25, 40, month1+",");
Heltec.display->drawString(40, 40, day1+" Fecha");
Heltec.display->drawString(0, 50, hora1+",");
Heltec.display->drawString(20, 50, minuto1+",");
Heltec.display->drawString(40, 50, segundo1+" Hora");
Heltec.display->display();
LoRa.beginPacket();
LoRa.setTxPower(14,RF_PACONFIG_PASELECT_PABOOST);
LoRa.print(bpm1);
LoRa.print(",");
LoRa.print(latitud1);
LoRa.print(",");
LoRa.print(longitud1);
LoRa.print(",");
LoRa.print(altitud1);
LoRa.print(",");
LoRa.print(year1);
LoRa.print(",");
LoRa.print(month1);
LoRa.print(",");
LoRa.print(day1);
LoRa.print(",");
LoRa.print(hora1);
LoRa.print(",");
LoRa.print(minuto1);
LoRa.print(",");
LoRa.print(segundo1);
LoRa.endPacket();
//delay(10);
Serial.print("Latitud==> ");
Serial.print(latitud,6);
Serial.print(" Longitud==> ");
Serial.print(longitud,6);
Serial.print(" Altitud==> ");
Serial.println(altitud,2);
Serial.print(year, DEC);Serial.print(" ");Serial.print(month, DEC);Serial.print(" ");Serial.print(day, DEC);Serial.print(" ");
Serial.print(hour, DEC);Serial.print(" ");Serial.print(minute, DEC);Serial.print(" ");Serial.print(second, DEC);Serial.print(" ");
Serial.println();
}
void pulso(void) {
for (i=0;i<10;i++) {
pox.update();
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
Serial.print("HR: ");
Serial.print(pox.getHeartRate());
Serial.print(" bpm");
Serial.print("SpO2: ");
Serial.print(pox.getSpO2());
Serial.print("%");
Serial.println();
tsLastReport = millis();
}
}
}