Advertisement
Guest User

Calm3

a guest
Oct 15th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define SILNIK 3
  2. #define LED 5         // > niebieski led
  3. #define HRT_OUT A0    // < odczyt sensora tętna
  4. #define HRT_ON 2      // > włącz / wyłącz sensor tętna
  5. #define GSR_OUT A3    // < odczyt glawanometru  
  6. #define GSR_ON 6      // > włącz / wyłącz glawanometr
  7. #define POT_L A1      // < lewy potencjometr
  8. #define POT_R A2      // < prawy potencjometr
  9. #define BUTTON 4      // < przyisk
  10.  
  11. // HRT BEAT SENSOR VARIABLES
  12. int sum = 0;                // suma odczytów
  13. int measureCount = 0;       // liczba pomiarów
  14. int measuresMax = 10;       // maksymalna liczba pomiarów
  15. int lastValue = 0;          // ostatnia różnica odczytów
  16. int bpm = 0;                // obecne bpm
  17. int lastBpm = 80;           // ostatnie poprawne bpm
  18. int measureDelay = 1;       // odstęp pomiędzy pomiarami
  19. long lastMeasure = 0;       // czas ostatniego pomiaru
  20. long lastBeatTime = 0;      // czas ostatniego wykrytego pulsu
  21. bool duringBeat = false;    // czy jest w trakcie pulsu
  22. bool heartDetected = false; // czy serce zostało wykryte
  23.  
  24. void setup() {
  25.   delay(1000);
  26.  
  27.   pinMode(SILNIK, OUTPUT);
  28.   pinMode(LED, OUTPUT);
  29.   pinMode(HRT_OUT, INPUT);
  30.   pinMode(HRT_ON, OUTPUT);
  31.   //pinMode(GSR_OUT, INPUT);
  32.   //pinMode(GSR,ON, OUTPUT);
  33.   pinMode(POT_L, INPUT);
  34.   pinMode(POT_R, INPUT);
  35.   pinMode(BUTTON, INPUT);
  36.  
  37.   Serial.begin(9600);
  38.   digitalWrite(HRT_ON, HIGH);
  39. }
  40.  
  41. void loop()
  42. {
  43.   if (duringBeat && heartDetected) analogWrite(SILNIK, analogRead(POT_R)/4);
  44.   else digitalWrite(SILNIK, LOW);
  45.  
  46.   if (millis() - lastMeasure > measureDelay)
  47.   {
  48.     sum += analogRead(HRT_OUT);
  49.     if (measureCount == measuresMax)
  50.     {
  51.       int value = sum - lastValue;                                      // różnica względem ostatnich odczytów
  52.       //Serial.println(value);
  53.       if (value > 80 && !duringBeat && millis() - lastBeatTime > 300)   // warunek na wykrycie napływu krwi i czy jest w normie
  54.       {
  55.         if (heartDetected)                                              // jeżeli poprzedni pomiar był dobry oblicz bpm
  56.         {
  57.           bpm = 60000/(millis() - lastBeatTime);
  58.           lastBpm = bpm;
  59.          
  60.           Serial.println(bpm);
  61.         }
  62.         lastBeatTime = millis();
  63.         duringBeat = true;
  64.  
  65.         //digitalWrite(LED, HIGH);
  66.       }
  67.       else if (value < -60 && duringBeat)                               // warunek na wykrycie odpływu krwi
  68.       {
  69.         if (millis() - lastBeatTime > 10 && millis() - lastBeatTime < 100) heartDetected = true;  // jeśli jest w normie
  70.         else { heartDetected = false; bpm = 0; }
  71.         duringBeat = false;
  72.  
  73.         //digitalWrite(LED, LOW);
  74.       }
  75.      
  76.       lastValue = sum;
  77.       sum = 0;
  78.       measureCount = 1;
  79.     }
  80.     else measureCount++;
  81.  
  82.     lastMeasure = millis();
  83.   }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement