Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LoRaLib.h> // https://github.com/jgromes/LoRaLib
- #include <TinyGPSPlus.h>
- #include <SoftwareSerial.h>
- #include <Wire.h>
- #include "MAX30105.h"
- #include "heartRate.h"
- SX1278 lora = new LoRa;
- int state;
- unsigned long prevMillis = 0;
- String data1, data2, data3, data4;
- String DataToSendViaLoRa;
- //------------------------------------------------------- GPS ↓
- static const int RXPin = 5, TXPin = 4;
- TinyGPSPlus gps;
- SoftwareSerial ss(RXPin, TXPin);
- String LAT, LON;
- //------------------------------------------------------- GPS ↑
- //------------------------------------------------------- HeartRate + Temp ↓
- MAX30105 particleSensor;
- const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
- byte rates[RATE_SIZE]; //Array of heart rates
- byte rateSpot = 0;
- long lastBeat = 0; //Time at which the last beat occurred
- float beatsPerMinute;
- int beatAvg;
- float temperature;
- long irValue;
- //------------------------------------------------------- HeartRate + Temp ↑
- void setup() {
- Serial.begin(115200);
- SetupLoRa();
- //------------------------------------------------------- GPS ↓
- ss.begin(9600);
- delay(3000);
- if (millis() > 5000 && gps.charsProcessed() < 10)
- Serial.println(F("No GPS data received: check wiring"));
- //------------------------------------------------------- GPS ↑
- //------------------------------------------------------- HeartRate + Temp ↓
- Serial.println("Initializing HeartRate Sensor...");
- setupHeratRateSensorWithTemprature();
- //------------------------------------------------------- HeartRate + Temp ↑
- }
- void loop() {
- //------------------------------------------------------- GPS ↓
- //smartDelay(50);
- smartDelay();
- //------------------------------------------------------- GPS ↑
- //------------------------------------------------------- HeartRate + Temp ↓
- readHeratRateSensorWithTemprature();
- //------------------------------------------------------- HeartRate + Temp ↑
- data1 = String(int(beatAvg));
- data2 = String(temperature, 2);
- data3 = LAT;
- data4 = LON;
- DataToSendViaLoRa = data1 + "A" + data2 + "B" + data3 + "C" + data4 + "D";
- Serial.println("----------------------------------------------------------");
- Serial.println(DataToSendViaLoRa);
- Serial.println("----------------------------------------------------------");
- if (millis() - prevMillis > 20000) {
- prevMillis = millis();
- SendDataUsingLoRa(DataToSendViaLoRa);
- }
- }// end of LOOP
- //------------------------------------------------------- GPS ↓
- static void smartDelay() { //unsigned long ms) {
- unsigned long start = millis();
- //do
- //{
- while (ss.available())
- gps.encode(ss.read());
- //} while (millis() - start < ms);
- if (gps.location.lat() == 0 || gps.location.lng() == 0)
- {
- Serial.println(gps.hdop.hdop());
- //Serial.println("Return Executed - GPS Satellite [No Signal]");
- // LAT, LON
- // 21.330791, 39.945985
- LAT = "1.23";
- LON = "1.23";
- //Serial.print(LAT);
- //Serial.print(" , ");
- //Serial.println(LON);
- //return;
- }
- else {
- LAT = String(gps.location.lat(), 6);
- LON = String(gps.location.lng(), 6);
- Serial.print(LAT);
- Serial.print(" , ");
- Serial.println(LON);
- }
- }
- //------------------------------------------------------- GPS ↑
- //------------------------------------------------------- HeartRate + Temp ↓
- void setupHeratRateSensorWithTemprature() {
- if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
- Serial.println("MAX30105 was not found. Please check wiring/power. ");
- while (1);
- }
- particleSensor.setup();
- particleSensor.setPulseAmplitudeRed(0x0A);
- particleSensor.setPulseAmplitudeGreen(0);
- particleSensor.enableDIETEMPRDY();
- }
- void readHeratRateSensorWithTemprature() {
- irValue = particleSensor.getIR();
- if (checkForBeat(irValue) == true) {
- long delta = millis() - lastBeat;
- lastBeat = millis();
- beatsPerMinute = 60 / (delta / 1000.0);
- if (beatsPerMinute < 255 && beatsPerMinute > 20) {
- rates[rateSpot++] = (byte)beatsPerMinute;
- rateSpot %= RATE_SIZE;
- beatAvg = 0;
- for (byte x = 0 ; x < RATE_SIZE ; x++)
- beatAvg += rates[x];
- beatAvg /= RATE_SIZE;
- }
- }
- Serial.print("IR=");
- Serial.print(irValue);
- Serial.print(", BPM=");
- Serial.print(beatsPerMinute);
- Serial.print(", Avg BPM=");
- Serial.print(beatAvg);
- temperature = particleSensor.readTemperature();
- Serial.print(", Temp=");
- Serial.print(temperature, 4);
- if (irValue < 50000)
- Serial.print(" No finger?");
- Serial.println();
- }
- //------------------------------------------------------- HeartRate + Temp ↑
- void SetupLoRa() {
- Serial.print(F("Initializing ... "));
- state = lora.begin();
- if (state == ERR_NONE) {
- Serial.println(F("success!"));
- } else {
- Serial.print(F("failed, code "));
- Serial.println(state);
- while (true);
- }
- }
- void SendDataUsingLoRa(String StringToTransmit) {
- Serial.print(F("Sending packet ... "));
- Serial.println(StringToTransmit);
- state = lora.transmit(StringToTransmit);
- delay(1000);
- }
Advertisement
Add Comment
Please, Sign In to add comment