safwan092

Untitled

Apr 26th, 2024
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1. #include <LoRaLib.h> // https://github.com/jgromes/LoRaLib
  2. #include <TinyGPSPlus.h>
  3. #include <SoftwareSerial.h>
  4. #include <Wire.h>
  5. #include "MAX30105.h"
  6. #include "heartRate.h"
  7.  
  8.  
  9. SX1278 lora = new LoRa;
  10. int state;
  11. unsigned long prevMillis = 0;
  12. String data1, data2, data3, data4;
  13. String DataToSendViaLoRa;
  14.  
  15. //------------------------------------------------------- GPS ↓
  16. static const int RXPin = 5, TXPin = 4;
  17. TinyGPSPlus gps;
  18. SoftwareSerial ss(RXPin, TXPin);
  19. String LAT, LON;
  20. //------------------------------------------------------- GPS ↑
  21.  
  22. //------------------------------------------------------- HeartRate + Temp ↓
  23. MAX30105 particleSensor;
  24. const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
  25. byte rates[RATE_SIZE]; //Array of heart rates
  26. byte rateSpot = 0;
  27. long lastBeat = 0; //Time at which the last beat occurred
  28. float beatsPerMinute;
  29. int beatAvg;
  30. float temperature;
  31. long irValue;
  32. //------------------------------------------------------- HeartRate + Temp ↑
  33.  
  34. void setup() {
  35. Serial.begin(115200);
  36. SetupLoRa();
  37. //------------------------------------------------------- GPS ↓
  38. ss.begin(9600);
  39. delay(3000);
  40. if (millis() > 5000 && gps.charsProcessed() < 10)
  41. Serial.println(F("No GPS data received: check wiring"));
  42. //------------------------------------------------------- GPS ↑
  43.  
  44. //------------------------------------------------------- HeartRate + Temp ↓
  45. Serial.println("Initializing HeartRate Sensor...");
  46. setupHeratRateSensorWithTemprature();
  47. //------------------------------------------------------- HeartRate + Temp ↑
  48. }
  49.  
  50. void loop() {
  51.  
  52.  
  53. //------------------------------------------------------- GPS ↓
  54. //smartDelay(50);
  55. smartDelay();
  56. //------------------------------------------------------- GPS ↑
  57. //------------------------------------------------------- HeartRate + Temp ↓
  58. readHeratRateSensorWithTemprature();
  59. //------------------------------------------------------- HeartRate + Temp ↑
  60.  
  61. data1 = String(int(beatAvg));
  62. data2 = String(temperature, 2);
  63. data3 = LAT;
  64. data4 = LON;
  65. DataToSendViaLoRa = data1 + "A" + data2 + "B" + data3 + "C" + data4 + "D";
  66. Serial.println("----------------------------------------------------------");
  67. Serial.println(DataToSendViaLoRa);
  68. Serial.println("----------------------------------------------------------");
  69. if (millis() - prevMillis > 20000) {
  70. prevMillis = millis();
  71. SendDataUsingLoRa(DataToSendViaLoRa);
  72. }
  73. }// end of LOOP
  74.  
  75.  
  76.  
  77.  
  78. //------------------------------------------------------- GPS ↓
  79. static void smartDelay() { //unsigned long ms) {
  80. unsigned long start = millis();
  81. //do
  82. //{
  83. while (ss.available())
  84. gps.encode(ss.read());
  85. //} while (millis() - start < ms);
  86.  
  87. if (gps.location.lat() == 0 || gps.location.lng() == 0)
  88. {
  89. Serial.println(gps.hdop.hdop());
  90. //Serial.println("Return Executed - GPS Satellite [No Signal]");
  91. // LAT, LON
  92. // 21.330791, 39.945985
  93. LAT = "1.23";
  94. LON = "1.23";
  95. //Serial.print(LAT);
  96. //Serial.print(" , ");
  97. //Serial.println(LON);
  98. //return;
  99. }
  100. else {
  101. LAT = String(gps.location.lat(), 6);
  102. LON = String(gps.location.lng(), 6);
  103. Serial.print(LAT);
  104. Serial.print(" , ");
  105. Serial.println(LON);
  106. }
  107. }
  108. //------------------------------------------------------- GPS ↑
  109.  
  110.  
  111. //------------------------------------------------------- HeartRate + Temp ↓
  112.  
  113. void setupHeratRateSensorWithTemprature() {
  114. if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
  115. Serial.println("MAX30105 was not found. Please check wiring/power. ");
  116. while (1);
  117. }
  118. particleSensor.setup();
  119. particleSensor.setPulseAmplitudeRed(0x0A);
  120. particleSensor.setPulseAmplitudeGreen(0);
  121. particleSensor.enableDIETEMPRDY();
  122. }
  123. void readHeratRateSensorWithTemprature() {
  124. irValue = particleSensor.getIR();
  125. if (checkForBeat(irValue) == true) {
  126. long delta = millis() - lastBeat;
  127. lastBeat = millis();
  128. beatsPerMinute = 60 / (delta / 1000.0);
  129. if (beatsPerMinute < 255 && beatsPerMinute > 20) {
  130. rates[rateSpot++] = (byte)beatsPerMinute;
  131. rateSpot %= RATE_SIZE;
  132. beatAvg = 0;
  133. for (byte x = 0 ; x < RATE_SIZE ; x++)
  134. beatAvg += rates[x];
  135. beatAvg /= RATE_SIZE;
  136. }
  137. }
  138. Serial.print("IR=");
  139. Serial.print(irValue);
  140. Serial.print(", BPM=");
  141. Serial.print(beatsPerMinute);
  142. Serial.print(", Avg BPM=");
  143. Serial.print(beatAvg);
  144. temperature = particleSensor.readTemperature();
  145. Serial.print(", Temp=");
  146. Serial.print(temperature, 4);
  147. if (irValue < 50000)
  148. Serial.print(" No finger?");
  149. Serial.println();
  150. }
  151. //------------------------------------------------------- HeartRate + Temp ↑
  152.  
  153.  
  154.  
  155. void SetupLoRa() {
  156. Serial.print(F("Initializing ... "));
  157. state = lora.begin();
  158. if (state == ERR_NONE) {
  159. Serial.println(F("success!"));
  160. } else {
  161. Serial.print(F("failed, code "));
  162. Serial.println(state);
  163. while (true);
  164. }
  165. }
  166.  
  167.  
  168. void SendDataUsingLoRa(String StringToTransmit) {
  169. Serial.print(F("Sending packet ... "));
  170. Serial.println(StringToTransmit);
  171. state = lora.transmit(StringToTransmit);
  172. delay(1000);
  173. }
Advertisement
Add Comment
Please, Sign In to add comment