Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include "MAX30100_PulseOximeter.h"
- #include <SoftwareSerial.h>
- #define REPORTING_PERIOD_MS 1000
- PulseOximeter pox;
- uint32_t tsLastReport = 0;
- SoftwareSerial mySerial(10, 11); // RX, TX
- //||||||||||||||||||||||||||||||||||||||||||||||||||
- byte sensorInterrupt = 0; // 0 = digital pin 2
- byte sensorPin = 2;
- float calibrationFactor = 4.5;
- volatile byte pulseCount;
- float flowRate;
- unsigned int flowMilliLitres;
- unsigned long totalMilliLitres;
- unsigned long oldTime;
- //||||||||||||||||||||||||||||||||||||||||||||||||||
- int relayO = 8;
- int relayA = 7;
- int buzzer = 9;
- int ox = 0 ;
- int hr = 0;
- float kg = 0.00;
- int count = 0;
- String data_from_display = "";
- int mv = 0 ;
- float av, ov;
- float tfav = 0 ;
- float ttv = 0 ;
- /*
- void onBeatDetected()
- {
- Serial.println("Beat!");
- }*/
- /////////////////////////////////////////
- void TFTreading()
- {
- hr = pox.getHeartRate();
- ox = pox.getSpO2();
- mySerial.print("hr_ratio.val=");
- mySerial.print(hr);
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.print("ox_aito.val=");
- mySerial.print(ox);
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- }
- //////////////////////////////////////////
- void TVreading()
- {
- delay(50);
- ttv = kg * 0.007;
- long lon = ttv * 10;
- mySerial.print("tidal_v.val=");
- mySerial.print(lon);
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- mv = ttv * 12 ;
- mySerial.print("m_ventilation.val=");
- mySerial.print(mv);
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- }
- /////////////////////////////////////////////
- void fio2reading()
- {
- //ox = pox.getSpO2(); // add O2 Value
- if ( ox <= 94 && ox >= 90 ) {
- mySerial.print("fio2.val=");
- mySerial.print("40");
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- av = mv - 1.92 ;
- mySerial.print("adj_air.val=");
- mySerial.print(int(av));
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- ov = 1.92 ;
- mySerial.print("adj_o2.val=");
- mySerial.print(int(ov));
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- tfav = (av / 2.4) * 1000 ; // 12/0.2
- Serial.print(tfav);
- digitalWrite(relayO, 0);
- delay(800);
- digitalWrite(relayO, 1);
- delay(1600);
- digitalWrite(relayA, 0);
- delay(tfav);
- digitalWrite(relayA, 1);
- delay(tfav * 2);
- ttv = kg * 0.007;
- long lon = ttv * 10;
- mySerial.print("t_volume.val=");
- mySerial.print(lon);
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- }
- else if (ox <= 89 && ox >= 85 ) {
- mySerial.print("fio2.val=");
- mySerial.print("52");
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- av = mv - 3.12 ;
- mySerial.print("adj_air.val=");
- mySerial.print(int(av));
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- ov = 3.12 ;
- mySerial.print("adj_o2.val=");
- mySerial.print(int(ov));
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- tfav = (av / 2.4) * 1000 ; // 12/0.2 // 12/0.2
- digitalWrite(relayO, 0);
- delay(1300);
- digitalWrite(relayO, 1);
- delay(2600);
- digitalWrite(relayA, 0);
- delay(tfav);
- digitalWrite(relayA, 1);
- delay(tfav);
- }
- else if (ox <= 84 && ox >= 80 ) {
- mySerial.print("fio2.val=");
- mySerial.print("60");
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- av = mv - 3.84 ;
- mySerial.print("adj_air.val=");
- mySerial.print(int(av));
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- ov = 3.84 ;
- mySerial.print("adj_o2.val=");
- mySerial.print(int(ov));
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- tfav = (av / 2.4) * 1000 ; // 12/0.2 ;// 12/0.2
- digitalWrite(relayO, 0);
- delay(1600);
- digitalWrite(relayO, 1);
- delay(3200);
- digitalWrite(relayA, 0);
- delay(tfav);
- digitalWrite(relayA, 1);
- delay(tfav );
- }
- else if (ox == 0 || ox > 94) {
- mySerial.print("fio2.val=");
- mySerial.print("0");
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- av = 0 ;
- mySerial.print("adj_air.val=");
- mySerial.print(int(0));
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- ov = 0 ;
- mySerial.print("adj_o2.val=");
- mySerial.print(int(ov));
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- digitalWrite(relayO, 1);
- digitalWrite(relayA, 1);
- mySerial.print("t_volume.val=");
- mySerial.print(0);
- mySerial.write(0xff);
- mySerial.write(0xff);
- mySerial.write(0xff);
- }
- }
- ////////////////////////////////////////////////
- void setup()
- {
- //||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- pinMode(sensorPin, INPUT);
- digitalWrite(sensorPin, HIGH);
- pulseCount = 0;
- flowRate = 0.0;
- flowMilliLitres = 0;
- totalMilliLitres = 0;
- oldTime = 0;
- attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
- //||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Serial.begin(9600);
- mySerial.begin(9600);
- Serial.print("Initializing pulse oximeter..");
- pinMode(relayO, OUTPUT);
- pinMode(relayA, OUTPUT);
- pinMode(buzzer, OUTPUT);
- digitalWrite(relayO, 1);
- digitalWrite(relayA, 1);
- if (!pox.begin()) {
- Serial.println("FAILED");
- for (;;);
- } else {
- Serial.println("SUCCESS");
- }
- //pox.setOnBeatDetectedCallback(onBeatDetected);
- }
- /////////////////
- void loop()
- {
- pox.update();
- if (mySerial.available()) { // If anything comes in Serial1 (pins 0 & 1)
- data_from_display = "";
- delay(30);
- while (mySerial.available()) {
- data_from_display += char(mySerial.read());
- }
- if (data_from_display.toFloat() == 0) {}
- else {
- kg = data_from_display.toFloat();
- Serial.println(kg);
- }
- }
- if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
- //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- detachInterrupt(sensorInterrupt);
- flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
- flowMilliLitres = (flowRate / 60) * 1000;
- totalMilliLitres += flowMilliLitres;
- unsigned int frac;
- Serial.print("Flow rate: ");
- Serial.print(int(flowRate)); // Print the integer part of the variable
- Serial.println("L/min");
- pulseCount = 0;
- // Enable the interrupt again now that we've finished sending output
- attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
- //||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- ox = pox.getSpO2(); // change Value of OX Here
- Serial.print("Heart rate:");
- Serial.print(pox.getHeartRate());
- Serial.print("bpm / O2:");
- Serial.print(ox);
- Serial.println("%");
- //TFTreading();
- count = count + 1;
- if (count == 2) {
- TFTreading();
- TVreading();
- fio2reading();
- // adj_reading();
- if (!pox.begin()) {
- Serial.println("FAILED");
- for (;;);
- } else {
- Serial.println("SUCCESS");
- }
- count = 0;
- }
- //fio2reading();
- //controlVulve();
- //TVreading();
- tsLastReport = millis();
- }
- }
- //||||||||||||||||||||||||||||||||||
- void pulseCounter()
- {
- // Increment the pulse counter
- pulseCount++;
- }
- //||||||||||||||||||||||||||||||||||
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement