Problem between RF transmitter and Pulse

I have to comment out pulseSensor.begin() for the transmitter to work. how do I fix this so that I can send bpm and temperature data.

#include <RH_ASK.h>
#include <SPI.h>
#include "DHT.h";
#define ONE_WIRE_BUS 7
#define USE_ARDUINO_INTERRUPTS true
#include <PulseSensorPlayground.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define DHTPIN 8
#define DHTTYPE DHT11

float hum;
float temp;
float temp2;
float myBPM;
String str_bpm;
String str_temp2;
String str_out;
const int PulseWire = 0;
const int LED13 = 13;
int Threshold = 550;

const unsigned long event_temphum = 2000;
const unsigned long event_send = 3000;
const unsigned long event_display = 3500;
const unsigned long event_pulse = 4000;

unsigned long previousTime_1 = 0;
unsigned long previousTime_2 = 0;
unsigned long previousTime_3 = 0;
unsigned long previousTime_4 = 0;

RH_ASK rf_driver;
DHT dht(DHTPIN, DHTTYPE);
PulseSensorPlayground pulseSensor;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  rf_driver.init();
  dht.begin();
  Serial.begin(9600); lcd.init();
  lcd.init();
  lcd.backlight();
  pulseSensor.analogInput(PulseWire);
  pulseSensor.setThreshold(Threshold);
}
void loop()
{
  /*updates frequently*/
  unsigned long currentTime = millis();

  //tempdht event
  if (currentTime - previousTime_1 >= event_temphum)
  {
    sensors.requestTemperatures();
    float hic = dht.computeHeatIndex(temp, hum, false);
    hum = dht.readHumidity();
    temp = dht.readTemperature();
    temp2 = sensors.getTempCByIndex(0);

    previousTime_1 = currentTime;
  }
  //send event
  if (currentTime - previousTime_2 >= event_send)
  {
    str_bpm = String(myBPM);
    str_temp2 = String(temp2);
    str_out = str_bpm + "," + str_temp2;
    static char *msg = str_out.c_str();
    rf_driver.send((uint8_t *)msg, strlen(msg));
    rf_driver.waitPacketSent();

    previousTime_2 = currentTime;
  }
  //display event
  if (currentTime - previousTime_3 >= event_display)
  {
    Serial.print(" BPM: ");
    Serial.println(myBPM);
    Serial.print(F(" Humidity: "));
    Serial.print(hum);
    Serial.print(F("% Temperature: "));
    Serial.print(temp); Serial.print(" Body Temperature: ");
    Serial.print(sensors.getTempCByIndex(0));
    Serial.print("C | ");

    lcd.setCursor(0, 0); lcd.print("BPM:");
    lcd.setCursor(4, 0); lcd.print(myBPM);
    lcd.setCursor(8, 0);
    lcd.print("RTp:");
    lcd.setCursor(12, 0);
    lcd.print(temp);
    lcd.setCursor(0, 1);
    lcd.print("BTp:");
    lcd.setCursor(4, 1);
    lcd.print(sensors.getTempCByIndex(0));
    lcd.setCursor(8, 1);
    lcd.print("Hum:");
    lcd.setCursor(12, 1);
    lcd.print(hum);
    previousTime_3 = currentTime;
  }
  //pulse event
  if (currentTime - previousTime_4 >= event_pulse)
  {
    //pulseSensor.begin();
    myBPM = pulseSensor.getBeatsPerMinute();
    previousTime_4 = currentTime;
  }
}

Reciever Code

//Tech Trends Shameer
//Receiver Program


// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>
// Include dependant SPI Library
#include <SPI.h>
#include <LiquidCrystal_I2C.h>

byte degree_symbol[8] =
{
  0b00111,
  0b00101,
  0b00111,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};
// Define output strings

String str_bpm;
String str_temp;
String str_out;

// Create Amplitude Shift Keying Object
RH_ASK rf_driver;
void setup()
{
  // Initialize ASK Object
  rf_driver.init();
  // Setup Serial Monitor
  Serial.begin(9600);
}

void loop()
{
  // Set buffer to size of expected message
  byte temperature = 0;
  byte BeatsPerMinute = 0;
  uint8_t buf[11];
  uint8_t buflen = sizeof(buf);
  // Check if received packet is correct size
  if (rf_driver.recv(buf, &buflen))
  {

    // Message received with valid checksum
    // Get values from string

    // Convert received data into string
    str_out = String((char*)buf);

    // Split string into two values
    for (int i = 0; i < str_out.length(); i++)
    {
      if (str_out.substring(i, i + 1) == ",")
      {
        str_bpm= str_out.substring(0, i);
        str_temp = str_out.substring(i + 1);
        break;
      }

    }

    // Print values to Serial Monitor
    Serial.print("BPM: ");
    Serial.print(str_bpm);
    Serial.print("  - Temperature: ");
    Serial.println(str_temp);

   /* lcd.begin();

    // Turn on the blacklight and print a message.
    lcd.backlight();
     lcd.setCursor(0,0);
      lcd.print("Temperature &");
      lcd.setCursor(0,1);
      lcd.print("Humidity Monitor");
      delay(2000);
      lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temperature ");
    //lcd.print((int)str_temp);
    lcd.print(str_temp);
    lcd.setCursor(0, 1);
    lcd.print("BeatsPerMin  ");
    //  lcd.print((int)str_bpm);
    lcd.print(str_bpm);
    lcd.setCursor(14, 0);
    lcd.write(1);
    lcd.createChar(1, degree_symbol);
    lcd.setCursor(15, 0);
    lcd.print("C");
    lcd.setCursor(14, 1);
    lcd.print(" %");*/
    delay(1000);

  }


}

When you uncomment what happens exactly

You are doing these before pulseSensor.begin() ?

No I just do this //pulseSensor.begin();

Then the transmitter would work
Seems there is a conflicting interrupt between RF and Heartbeat pulse sensor

This is my new code. Tried to stop the timer of heartbeat pulse sensor so it won't interfere with the timer of RF transmitter. Logically it should work, but it seems it still won't.

#include <RH_ASK.h>
#include <SPI.h>
#include "DHT.h";
#define ONE_WIRE_BUS 7
#define USE_ARDUINO_INTERRUPTS true
#include <PulseSensorPlayground.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define DHTPIN 8
#define DHTTYPE DHT11

float hum;
float temp;
float temp2;
float myBPM;
float myBPM2;
String str_bpm;
String str_temp2;
String str_out;
const int PulseWire = 0;
const int LED13 = 13;
int Threshold = 550;
const unsigned long event_pulsego = 1000;
const unsigned long event_pulseend = 1500;
const unsigned long event_temphum = 2000;
const unsigned long event_send = 3000;
const unsigned long event_display = 3500;


unsigned long previousTime_1 = 0;
unsigned long previousTime_2 = 0;
unsigned long previousTime_3 = 0;
unsigned long previousTime_4 = 0;
unsigned long previousTime_5 = 0;

RH_ASK rf_driver;
DHT dht(DHTPIN, DHTTYPE);
PulseSensorPlayground pulseSensor;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  rf_driver.init();
  dht.begin();
  Serial.begin(9600); lcd.init();
  lcd.init();
  lcd.backlight();
  pulseSensor.analogInput(PulseWire);
  pulseSensor.setThreshold(Threshold);
  pulseSensor.begin();
}
void loop()
{
  /*updates frequently*/
  unsigned long currentTime = millis();

  //pulse event
  if (currentTime - previousTime_1 >= event_pulsego)
  {
    pulseSensor.resume();
    myBPM = pulseSensor.getBeatsPerMinute();
    previousTime_1 = currentTime;
  }
  //pulse end
  if (currentTime - previousTime_2 >= event_pulseend)
  {
    pulseSensor.pause();
    previousTime_2 = currentTime;
  }

  //tempdhtpulse event
  if (currentTime - previousTime_3 >= event_temphum)
  {
    sensors.requestTemperatures();
    float hic = dht.computeHeatIndex(temp, hum, false);
    hum = dht.readHumidity();
    temp = dht.readTemperature();
    temp2 = sensors.getTempCByIndex(0);
    myBPM2 = pulseSensor.getLastBeatTime();
    previousTime_3 = currentTime;
  }
  //send event
  if (currentTime - previousTime_4 >= event_send)
  {
    str_bpm = String(myBPM2);
    str_temp2 = String(temp2);
    str_out = str_bpm + "," + str_temp2;
    static char *msg = str_out.c_str();
    rf_driver.send((uint8_t *)msg, strlen(msg));
    rf_driver.waitPacketSent();
    previousTime_4 = currentTime;
  }
  //display event
  if (currentTime - previousTime_5 >= event_display)
  {
    Serial.print(" BPM: ");
    Serial.println(myBPM);
    Serial.print(F(" Humidity: "));
    Serial.print(hum);
    Serial.print(F("% Temperature: "));
    Serial.print(temp); Serial.print(" Body Temperature: ");
    Serial.print(sensors.getTempCByIndex(0));
    Serial.print("C | ");

    lcd.setCursor(0, 0); lcd.print("BPM:");
    lcd.setCursor(4, 0); lcd.print(myBPM);
    lcd.setCursor(8, 0);
    lcd.print("RTp:");
    lcd.setCursor(12, 0);
    lcd.print(temp);
    lcd.setCursor(0, 1);
    lcd.print("BTp:");
    lcd.setCursor(4, 1);
    lcd.print(sensors.getTempCByIndex(0));
    lcd.setCursor(8, 1);
    lcd.print("Hum:");
    lcd.setCursor(12, 1);
    lcd.print(hum);
    previousTime_5 = currentTime;
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.