Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define SILNIK 3
- #define LED 5 // > niebieski led
- #define HRT_OUT A0 // < odczyt sensora tętna
- #define HRT_ON 2 // > włącz / wyłącz sensor tętna
- #define GSR_OUT A3 // < odczyt glawanometru
- #define GSR_ON 6 // > włącz / wyłącz glawanometr
- #define POT_L A1 // < lewy potencjometr
- #define POT_R A2 // < prawy potencjometr
- #define BUTTON 4 // < przyisk
- // HRT BEAT SENSOR VARIABLES
- int sum = 0; // suma odczytów
- int measureCount = 0; // liczba pomiarów
- int measuresMax = 10; // maksymalna liczba pomiarów
- int lastValue = 0; // ostatnia różnica odczytów
- int bpm = 0; // obecne bpm
- int lastBpm = 80; // ostatnie poprawne bpm
- int measureDelay = 1; // odstęp pomiędzy pomiarami
- long lastMeasure = 0; // czas ostatniego pomiaru
- long lastBeatTime = 0; // czas ostatniego wykrytego pulsu
- bool duringBeat = false; // czy jest w trakcie pulsu
- bool heartDetected = false; // czy serce zostało wykryte
- void setup() {
- delay(1000);
- pinMode(SILNIK, OUTPUT);
- pinMode(LED, OUTPUT);
- pinMode(HRT_OUT, INPUT);
- pinMode(HRT_ON, OUTPUT);
- //pinMode(GSR_OUT, INPUT);
- //pinMode(GSR,ON, OUTPUT);
- pinMode(POT_L, INPUT);
- pinMode(POT_R, INPUT);
- pinMode(BUTTON, INPUT);
- Serial.begin(9600);
- digitalWrite(HRT_ON, HIGH);
- }
- void loop()
- {
- if (duringBeat && heartDetected) analogWrite(SILNIK, analogRead(POT_R)/4);
- else digitalWrite(SILNIK, LOW);
- if (millis() - lastMeasure > measureDelay)
- {
- sum += analogRead(HRT_OUT);
- if (measureCount == measuresMax)
- {
- int value = sum - lastValue; // różnica względem ostatnich odczytów
- //Serial.println(value);
- if (value > 80 && !duringBeat && millis() - lastBeatTime > 300) // warunek na wykrycie napływu krwi i czy jest w normie
- {
- if (heartDetected) // jeżeli poprzedni pomiar był dobry oblicz bpm
- {
- bpm = 60000/(millis() - lastBeatTime);
- lastBpm = bpm;
- Serial.println(bpm);
- }
- lastBeatTime = millis();
- duringBeat = true;
- //digitalWrite(LED, HIGH);
- }
- else if (value < -60 && duringBeat) // warunek na wykrycie odpływu krwi
- {
- if (millis() - lastBeatTime > 10 && millis() - lastBeatTime < 100) heartDetected = true; // jeśli jest w normie
- else { heartDetected = false; bpm = 0; }
- duringBeat = false;
- //digitalWrite(LED, LOW);
- }
- lastValue = sum;
- sum = 0;
- measureCount = 1;
- }
- else measureCount++;
- lastMeasure = millis();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement