I have a combined code that read heartrate and SPO2 then sent the data using LoRaWAN. Using these 2 library that work best by itself LoraWAN lib | MAX30102 lib. My board is Arduino Pro or Pro Mini with ATmega 328P (3.3V, 8 MHz) Processor.
Global variables use 2098 bytes (102%) of dynamic memory, leaving -50 bytes for local variables. Maximum is 2048 bytes
I've tried reducing char array size to 8,removing some Serial.print stuff, and the best i can get is the code use exactly 2048 bytes and getting uploaded but it wont run.
Here's my Arduino code
#include <DFRobot_MAX30102.h>
#include <lorawan.h>
DFRobot_MAX30102 particleSensor;
//ABP Credentials
const char *devAddr = "27FD.....";
const char *nwkSKey = "9E74A99C9FE480........................";
const char *appSKey = "E2A779DC190B343.......................";
const unsigned long interval = 20000; // 10 s interval to send message
unsigned long previousMillis = 0; // will store last time message sent
char myStr[50];
const sRFM_pins RFM_pins = {
.CS = 10,
.RST = 9,
.DIO0 = 2,
.DIO1 = 6,
};
void setup()
{
//Init serial
Serial.begin(115200);
lora.init();
particleSensor.begin();
particleSensor.sensorConfiguration(/*ledBrightness=*/50, /*sampleAverage=*/SAMPLEAVG_4, \
/*ledMode=*/MODE_MULTILED, /*sampleRate=*/SAMPLERATE_100, \
/*pulseWidth=*/PULSEWIDTH_411, /*adcRange=*/ADCRANGE_16384);
// Set LoRaWAN Class change CLASS_A or CLASS_C
lora.setDeviceClass(CLASS_C);
// Set Data Rate
lora.setDataRate(SF12BW125);
// set channel to random
lora.setChannel(MULTI);
// Put ABP Key and DevAddress here
lora.setNwkSKey(nwkSKey);
lora.setAppSKey(appSKey);
lora.setDevAddr(devAddr);
}
int32_t SPO2; //SPO2
int8_t SPO2Valid; //Flag to display if SPO2 calculation is valid
int32_t heartRate; //Heart-rate
int8_t heartRateValid; //Flag to display if heart-rate calculation is valid
void loop(){
if(millis() - previousMillis > interval) {
previousMillis = millis();
particleSensor.heartrateAndOxygenSaturation(/**SPO2=*/&SPO2, /**SPO2Valid=*/&SPO2Valid, /**heartRate=*/&heartRate, /**heartRateValid=*/&heartRateValid);
//Print result
Serial.print(heartRate, DEC);
Serial.println(SPO2, DEC);
sprintf(myStr, "%d,%d", heartRate,SPO2);
Serial.print(F("Send: "));
Serial.println(myStr);
lora.sendUplink(myStr, strlen(myStr), 0);
}
lora.update();
}