Advertisement
safwan092

Untitled

Dec 4th, 2021
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.69 KB | None | 0 0
  1. #include <Wire.h>
  2. #include "MAX30100_PulseOximeter.h"
  3. #include <SoftwareSerial.h>
  4. #define REPORTING_PERIOD_MS 1000
  5. PulseOximeter pox;
  6. uint32_t tsLastReport = 0;
  7.  
  8. SoftwareSerial mySerial(10, 11); // RX, TX
  9.  
  10. //||||||||||||||||||||||||||||||||||||||||||||||||||
  11. byte sensorInterrupt = 0; // 0 = digital pin 2
  12. byte sensorPin = 2;
  13. float calibrationFactor = 4.5;
  14. volatile byte pulseCount;
  15. float flowRate;
  16. unsigned int flowMilliLitres;
  17. unsigned long totalMilliLitres;
  18. unsigned long oldTime;
  19. //||||||||||||||||||||||||||||||||||||||||||||||||||
  20.  
  21. int relayO = 8;
  22. int relayA = 7;
  23. int buzzer = 9;
  24. int ox = 0 ;
  25. int hr = 0;
  26. float kg = 0.00;
  27. int count = 0;
  28. String data_from_display = "";
  29. int mv = 0 ;
  30. float av, ov;
  31. float tfav = 0 ;
  32. float ttv = 0 ;
  33. /*
  34. void onBeatDetected()
  35. {
  36. Serial.println("Beat!");
  37.  
  38. }*/
  39. /////////////////////////////////////////
  40. void TFTreading()
  41. {
  42. hr = pox.getHeartRate();
  43. ox = pox.getSpO2();
  44.  
  45. mySerial.print("hr_ratio.val=");
  46. mySerial.print(hr);
  47. mySerial.write(0xff);
  48. mySerial.write(0xff);
  49. mySerial.write(0xff);
  50.  
  51. mySerial.print("ox_aito.val=");
  52. mySerial.print(ox);
  53. mySerial.write(0xff);
  54. mySerial.write(0xff);
  55. mySerial.write(0xff);
  56. }
  57.  
  58. //////////////////////////////////////////
  59. void TVreading()
  60. {
  61. delay(50);
  62. ttv = kg * 0.007;
  63. long lon = ttv * 10;
  64. mySerial.print("tidal_v.val=");
  65. mySerial.print(lon);
  66. mySerial.write(0xff);
  67. mySerial.write(0xff);
  68. mySerial.write(0xff);
  69.  
  70. mv = ttv * 12 ;
  71. mySerial.print("m_ventilation.val=");
  72. mySerial.print(mv);
  73. mySerial.write(0xff);
  74. mySerial.write(0xff);
  75. mySerial.write(0xff);
  76.  
  77.  
  78. }
  79. /////////////////////////////////////////////
  80.  
  81.  
  82. void fio2reading()
  83. {
  84. //ox = pox.getSpO2(); // add O2 Value
  85.  
  86. if ( ox <= 94 && ox >= 90 ) {
  87. mySerial.print("fio2.val=");
  88. mySerial.print("40");
  89. mySerial.write(0xff);
  90. mySerial.write(0xff);
  91. mySerial.write(0xff);
  92. av = mv - 1.92 ;
  93.  
  94. mySerial.print("adj_air.val=");
  95. mySerial.print(int(av));
  96. mySerial.write(0xff);
  97. mySerial.write(0xff);
  98. mySerial.write(0xff);
  99.  
  100. ov = 1.92 ;
  101. mySerial.print("adj_o2.val=");
  102. mySerial.print(int(ov));
  103. mySerial.write(0xff);
  104. mySerial.write(0xff);
  105. mySerial.write(0xff);
  106.  
  107. tfav = (av / 2.4) * 1000 ; // 12/0.2
  108. Serial.print(tfav);
  109.  
  110. digitalWrite(relayO, 0);
  111. delay(800);
  112. digitalWrite(relayO, 1);
  113. delay(1600);
  114. digitalWrite(relayA, 0);
  115. delay(tfav);
  116. digitalWrite(relayA, 1);
  117. delay(tfav * 2);
  118.  
  119. ttv = kg * 0.007;
  120. long lon = ttv * 10;
  121. mySerial.print("t_volume.val=");
  122. mySerial.print(lon);
  123. mySerial.write(0xff);
  124. mySerial.write(0xff);
  125. mySerial.write(0xff);
  126. }
  127. else if (ox <= 89 && ox >= 85 ) {
  128. mySerial.print("fio2.val=");
  129. mySerial.print("52");
  130. mySerial.write(0xff);
  131. mySerial.write(0xff);
  132. mySerial.write(0xff);
  133.  
  134. av = mv - 3.12 ;
  135. mySerial.print("adj_air.val=");
  136. mySerial.print(int(av));
  137. mySerial.write(0xff);
  138. mySerial.write(0xff);
  139. mySerial.write(0xff);
  140.  
  141. ov = 3.12 ;
  142. mySerial.print("adj_o2.val=");
  143. mySerial.print(int(ov));
  144. mySerial.write(0xff);
  145. mySerial.write(0xff);
  146. mySerial.write(0xff);
  147.  
  148. tfav = (av / 2.4) * 1000 ; // 12/0.2 // 12/0.2
  149. digitalWrite(relayO, 0);
  150. delay(1300);
  151. digitalWrite(relayO, 1);
  152. delay(2600);
  153. digitalWrite(relayA, 0);
  154. delay(tfav);
  155. digitalWrite(relayA, 1);
  156. delay(tfav);
  157.  
  158. }
  159. else if (ox <= 84 && ox >= 80 ) {
  160. mySerial.print("fio2.val=");
  161. mySerial.print("60");
  162. mySerial.write(0xff);
  163. mySerial.write(0xff);
  164. mySerial.write(0xff);
  165.  
  166. av = mv - 3.84 ;
  167. mySerial.print("adj_air.val=");
  168. mySerial.print(int(av));
  169. mySerial.write(0xff);
  170. mySerial.write(0xff);
  171. mySerial.write(0xff);
  172.  
  173. ov = 3.84 ;
  174. mySerial.print("adj_o2.val=");
  175. mySerial.print(int(ov));
  176. mySerial.write(0xff);
  177. mySerial.write(0xff);
  178. mySerial.write(0xff);
  179.  
  180. tfav = (av / 2.4) * 1000 ; // 12/0.2 ;// 12/0.2
  181. digitalWrite(relayO, 0);
  182. delay(1600);
  183. digitalWrite(relayO, 1);
  184. delay(3200);
  185. digitalWrite(relayA, 0);
  186. delay(tfav);
  187. digitalWrite(relayA, 1);
  188. delay(tfav );
  189. }
  190. else if (ox == 0 || ox > 94) {
  191. mySerial.print("fio2.val=");
  192. mySerial.print("0");
  193. mySerial.write(0xff);
  194. mySerial.write(0xff);
  195. mySerial.write(0xff);
  196.  
  197. av = 0 ;
  198. mySerial.print("adj_air.val=");
  199. mySerial.print(int(0));
  200. mySerial.write(0xff);
  201. mySerial.write(0xff);
  202. mySerial.write(0xff);
  203.  
  204. ov = 0 ;
  205. mySerial.print("adj_o2.val=");
  206. mySerial.print(int(ov));
  207. mySerial.write(0xff);
  208. mySerial.write(0xff);
  209. mySerial.write(0xff);
  210.  
  211. digitalWrite(relayO, 1);
  212. digitalWrite(relayA, 1);
  213.  
  214.  
  215. mySerial.print("t_volume.val=");
  216. mySerial.print(0);
  217. mySerial.write(0xff);
  218. mySerial.write(0xff);
  219. mySerial.write(0xff);
  220.  
  221. }
  222.  
  223. }
  224.  
  225.  
  226.  
  227. ////////////////////////////////////////////////
  228.  
  229. void setup()
  230. {
  231. //||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  232. pinMode(sensorPin, INPUT);
  233. digitalWrite(sensorPin, HIGH);
  234. pulseCount = 0;
  235. flowRate = 0.0;
  236. flowMilliLitres = 0;
  237. totalMilliLitres = 0;
  238. oldTime = 0;
  239. attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
  240. //||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  241. Serial.begin(9600);
  242. mySerial.begin(9600);
  243. Serial.print("Initializing pulse oximeter..");
  244. pinMode(relayO, OUTPUT);
  245. pinMode(relayA, OUTPUT);
  246. pinMode(buzzer, OUTPUT);
  247. digitalWrite(relayO, 1);
  248. digitalWrite(relayA, 1);
  249. if (!pox.begin()) {
  250. Serial.println("FAILED");
  251. for (;;);
  252. } else {
  253. Serial.println("SUCCESS");
  254. }
  255. //pox.setOnBeatDetectedCallback(onBeatDetected);
  256. }
  257.  
  258. /////////////////
  259.  
  260. void loop()
  261. {
  262. pox.update();
  263.  
  264. if (mySerial.available()) { // If anything comes in Serial1 (pins 0 & 1)
  265. data_from_display = "";
  266. delay(30);
  267. while (mySerial.available()) {
  268. data_from_display += char(mySerial.read());
  269. }
  270. if (data_from_display.toFloat() == 0) {}
  271. else {
  272. kg = data_from_display.toFloat();
  273. Serial.println(kg);
  274. }
  275.  
  276. }
  277. if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
  278. //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  279. detachInterrupt(sensorInterrupt);
  280. flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
  281. flowMilliLitres = (flowRate / 60) * 1000;
  282. totalMilliLitres += flowMilliLitres;
  283. unsigned int frac;
  284. Serial.print("Flow rate: ");
  285. Serial.print(int(flowRate)); // Print the integer part of the variable
  286. Serial.println("L/min");
  287. pulseCount = 0;
  288.  
  289. // Enable the interrupt again now that we've finished sending output
  290. attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
  291.  
  292. //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  293.  
  294. ox = pox.getSpO2(); // change Value of OX Here
  295. Serial.print("Heart rate:");
  296. Serial.print(pox.getHeartRate());
  297. Serial.print("bpm / O2:");
  298. Serial.print(ox);
  299. Serial.println("%");
  300.  
  301. //TFTreading();
  302. count = count + 1;
  303. if (count == 2) {
  304. TFTreading();
  305. TVreading();
  306. fio2reading();
  307.  
  308.  
  309. // adj_reading();
  310. if (!pox.begin()) {
  311. Serial.println("FAILED");
  312. for (;;);
  313. } else {
  314. Serial.println("SUCCESS");
  315. }
  316. count = 0;
  317. }
  318. //fio2reading();
  319. //controlVulve();
  320. //TVreading();
  321. tsLastReport = millis();
  322. }
  323.  
  324. }
  325.  
  326. //||||||||||||||||||||||||||||||||||
  327. void pulseCounter()
  328. {
  329. // Increment the pulse counter
  330. pulseCount++;
  331. }
  332. //||||||||||||||||||||||||||||||||||
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement