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);
}
}