30-07-2019, 19:23
Witam,
Jestem laikiem jeśli chodzi o Arduino. Chciałbym zrobić sobie większy projekt, a mianowicie monitor oddechu. Niestety na samym starcie już nie mogę sobie poradzić. Początkowym założeniem mojego projektu jest wykrycie bezdechu, a więc posłużyłem się pulsoksymetrem MAX30100 oraz termoparą MAX6675. Pulsoksymetr mierzy puls( który można zaobserwować na wyświetlaczu), a termopara temperaturę(można ją podejrzeć w porcie szeregowym), która jest przy nosie ( wysoka temp = wydech, niska temp = wdech), w momencie wykrycia stałej temp np przez 20s i słabszego pulsu, ma się coś działać wibracja/sygnał itp. ( późniejsza faza projektu)
Mam problem z kodem, który jest następujący :
#include <LiquidCrystal.h>
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#define OKRES_WYSWIETLANIA 200
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
uint8_t saturacja;
float tetno;
PulseOximeter max30100;
uint32_t poprzedniOdczyt = 0;
#include "max6675.h"
int ktcSO = 36;
int ktcCS = 37;
int ktcCLK = 38;
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
void setup() {
Serial.begin(9600);
lcd.begin(16,2);
lcd.setCursor(0,0);
max30100.begin();
max30100.setIRLedCurrent(MAX30100_LED_CURR_11MA); //ustawienie pradu diody podczerwonej
}
void loop() {
puls();
temp();
}
void puls(){
max30100.update();
if (millis() - poprzedniOdczyt > OKRES_WYSWIETLANIA) {
saturacja = max30100.getSpO2();
tetno = max30100.getHeartRate();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Tetno: ");
lcd.print(tetno);
lcd.print(" bpm");
lcd.setCursor(0,1);
lcd.print("Saturacja: ");
lcd.print(saturacja);
lcd.print("%");
poprzedniOdczyt = millis();
}
}
void temp(){
Serial.print("Deg C = ");
Serial.print(ktc.readCelsius());
Serial.print("\t Deg F = ");
Serial.println(ktc.readFahrenheit());
delay(500);
}
Pulsoksymetr działa, jeśli wywołanie funkcji temperatury jest za komentowane i na odwrót.
Moje pytanie brzmi, jak sobie z tym poradzić, żeby zarówno pulsoksymetr jak i termopara działa w tym samym czasie (równolegle/współbieżnie).
Jestem laikiem jeśli chodzi o Arduino. Chciałbym zrobić sobie większy projekt, a mianowicie monitor oddechu. Niestety na samym starcie już nie mogę sobie poradzić. Początkowym założeniem mojego projektu jest wykrycie bezdechu, a więc posłużyłem się pulsoksymetrem MAX30100 oraz termoparą MAX6675. Pulsoksymetr mierzy puls( który można zaobserwować na wyświetlaczu), a termopara temperaturę(można ją podejrzeć w porcie szeregowym), która jest przy nosie ( wysoka temp = wydech, niska temp = wdech), w momencie wykrycia stałej temp np przez 20s i słabszego pulsu, ma się coś działać wibracja/sygnał itp. ( późniejsza faza projektu)
Mam problem z kodem, który jest następujący :
#include <LiquidCrystal.h>
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#define OKRES_WYSWIETLANIA 200
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
uint8_t saturacja;
float tetno;
PulseOximeter max30100;
uint32_t poprzedniOdczyt = 0;
#include "max6675.h"
int ktcSO = 36;
int ktcCS = 37;
int ktcCLK = 38;
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);
void setup() {
Serial.begin(9600);
lcd.begin(16,2);
lcd.setCursor(0,0);
max30100.begin();
max30100.setIRLedCurrent(MAX30100_LED_CURR_11MA); //ustawienie pradu diody podczerwonej
}
void loop() {
puls();
temp();
}
void puls(){
max30100.update();
if (millis() - poprzedniOdczyt > OKRES_WYSWIETLANIA) {
saturacja = max30100.getSpO2();
tetno = max30100.getHeartRate();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Tetno: ");
lcd.print(tetno);
lcd.print(" bpm");
lcd.setCursor(0,1);
lcd.print("Saturacja: ");
lcd.print(saturacja);
lcd.print("%");
poprzedniOdczyt = millis();
}
}
void temp(){
Serial.print("Deg C = ");
Serial.print(ktc.readCelsius());
Serial.print("\t Deg F = ");
Serial.println(ktc.readFahrenheit());
delay(500);
}
Pulsoksymetr działa, jeśli wywołanie funkcji temperatury jest za komentowane i na odwrót.
Moje pytanie brzmi, jak sobie z tym poradzić, żeby zarówno pulsoksymetr jak i termopara działa w tym samym czasie (równolegle/współbieżnie).