Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // VARIABLES
- int pulsePin = 0; // Pulse Sensor purple wire connected to analog pin 0
- int blinkPin = 13; // pin to blink led at each beat
- int fadePin = 6; // pin to do fancy classy fading blink at each beat
- int fadeRate = 10; // used to fade LED on with PWM on fadePin
- int alarmPin = 11;
- // these variables are volatile because they are used during the interrupt service routine!
- volatile int BPM; // used to hold the pulse rate
- volatile int Signal; // holds the incoming raw data
- volatile int IBI = 600; // holds the time between beats, the Inter-Beat Interval
- volatile boolean Pulse = false; // true when pulse wave is high, false when it's low
- volatile boolean QS = false; // becomes true when Arduoino finds a beat.
- boolean alarm = false;
- int bpmCount = 0;
- int limit = 80;
- int sample[10];
- int numSamples = 9; //10st
- double firstAverage = 0;
- double secondAverage = 0;
- boolean tripped = false;
- void setup()
- {
- pinMode(blinkPin, OUTPUT); // pin that will blink to your heartbeat!
- pinMode(fadePin, OUTPUT); // pin that will fade to your heartbeat!
- pinMode(alarmPin, OUTPUT);
- Serial.begin(115200); // we agree to talk fast!
- interruptSetup(); // sets up to read Pulse Sensor signal every 2mS
- // UN-COMMENT THE NEXT LINE IF YOU ARE POWERING The Pulse Sensor AT LOW VOLTAGE,
- // AND APPLY THAT VOLTAGE TO THE A-REF PIN
- //analogReference(EXTERNAL);
- }
- void loop()
- {
- sendDataToProcessing('S', Signal); // send Processing the raw Pulse Sensor data
- if (QS == true) // Quantified Self flag is true when arduino finds a heartbeat
- {
- fadeRate = 255; // Set 'fadeRate' Variable to 255 to fade LED with pulse
- sendDataToProcessing('B',BPM); // send heart rate with a 'B' prefix
- sendDataToProcessing('Q',IBI); // send time between beats with a 'Q' prefix
- QS = false; // reset the Quantified Self flag for next time
- sample[bpmCount] = BPM;
- bpmCount += 1;
- if(bpmCount == numSamples)
- {
- firstAverage = getAverageBpm();
- tripped = true;
- bpmCount = 0;
- }
- if(tripped)
- {
- secondAverage = getAverageBpm();
- if(firstAverage - secondAverage > 10)
- {
- alarm = true;
- }
- else
- {
- alarm = false;
- }
- tripped = false;
- }
- Serial.print("count: ");
- Serial.println(bpmCount);
- }
- if(alarm)
- {
- analogWrite(alarmPin, 255); //Sätt igång alarmet
- }
- else
- {
- analogWrite(alarmPin, 0); //Stäng av alarmet
- }
- ledFadeToBeat(); //Fada led:en på lådan
- delay(20);
- }
- void ledFadeToBeat()
- {
- fadeRate -= 15; // set LED fade value
- fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into negative numbers!
- analogWrite(fadePin,fadeRate); // fade LED
- }
- void sendDataToProcessing(char symbol, int data)
- {
- Serial.print(symbol); // symbol prefix tells Processing what type of data is coming
- Serial.println(data); // the data to send culminating in a carriage return
- }
- double getAverageBpm()
- {
- int sum = 0;
- for(int i = 0; i < 10; i++)
- {
- sum += sample[i];
- }
- return (double)sum / numSamples+1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement