Closed karthisl closed 9 years ago
Why did you #define PulseSensor::begin()
?
for calling the library function
This is where the error lies, as the error message you posted tells you. I'm therefore closing this as invalid. Please review your sketch. Post your code on the Arduino forum "Programming Questions" section
thanks for your suggestion
my program //
include "pulse-sensor-arduino.h"
include "Arduino.h"
define PulseSensor::begin()
// VARIABLES int pulsePin = 0; int blinkPin = 13; // pin to blink led at each beat int fadePin = 5; // pin to do fancy classy fading blink at each beat int fadeRate = 0; // used to fade LED on with PWM on fadePin volatile int IBI = 600; // holds the time between beats, must be seeded! volatile int BPM; // used to hold the pulse rate volatile int Signal; // holds the incoming raw data volatile boolean QS = false; // becomes true when Arduino finds a beat
void setup() { pinMode(blinkPin,OUTPUT); // pin that will blink to your heartbeat! pinMode(fadePin,OUTPUT); // pin that will fade to your heartbeat! Serial.begin(115200); // we agree to talk fast!
PulseSensor::begin() } 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
}
ledFadeToBeat(); delay(5000); // take a break } 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 }
my cpp //
include "pulse-sensor-arduino.h"
volatile int rate[10]; // array to hold last ten IBI values volatile unsigned long sampleCounter = 0; // used to determine pulse timing volatile unsigned long lastBeatTime = 0; // used to find IBI volatile int P =512; // used to find peak in pulse wave, seeded volatile int T = 512; // used to find trough in pulse wave, seeded volatile int thresh = 512; // used to find instant moment of heart beat, seeded volatile int amp = 100; // used to hold amplitude of pulse waveform, seeded volatile boolean firstBeat = true; // used to seed rate array so we startup with reasonable BPM volatile boolean secondBeat = false; // used to seed rate array so we startup with reasonable BPM volatile boolean Pulse = false; // true when pulse wave is high, false when it's low volatile int pulsePin;
volatile int PulseSensor::IBI = 600; // holds the time between beats, must be seeded! volatile int PulseSensor::BPM; // used to hold the pulse rate volatile int PulseSensor::Signal; // holds the incoming raw data volatile boolean PulseSensor::QS = false; // becomes true when Arduino finds a beat
void PulseSensor::begin(int pPin) {
pinMode(pulsePin, INPUT); pulsePin = pPin;
TCCR1A = 0x00; TCCR1B = 0x0C; // CTC (Compare match mode) and ClockIO/256 OCR1A = 0x7C; // 2 ms TIMSK1 = 0x02; sei(); // MAKE SURE GLOBAL INTERRUPTS ARE ENABLED }
// THIS IS THE TIMER 1 INTERRUPT SERVICE ROUTINE. // Timer 1 makes sure that we take a reading every 2 miliseconds
ISR(TIMER1_COMPA_vect) { // triggered when Timer1 counts to 124 cli(); // disable interrupts while we do this PulseSensor::Signal = analogRead(pulsePin); // read the Pulse Sensor sampleCounter += 2; // keep track of the time in ms with this variable int N = sampleCounter - lastBeatTime; // monitor the time since the last beat to avoid noise
if(PulseSensor::Signal < thresh && N > (PulseSensor::IBI/5)*3) {
}
if(PulseSensor::Signal > thresh && PulseSensor::Signal > P) { // thresh condition helps avoid noise P = PulseSensor::Signal; // P is the peak } // keep track of highest point in pulse wave
// NOW IT'S TIME TO LOOK FOR THE HEART BEAT // signal surges up in value every time there is a pulse if (N > 250) { // avoid high frequency noise if ( (PulseSensor::Signal > thresh) && (Pulse == false) && (N > (PulseSensor::IBI/5)*3) ) {
Pulse = true; // set the Pulse flag when we think there is a pulse PulseSensor::IBI = sampleCounter - lastBeatTime; // measure time between beats in mS lastBeatTime = sampleCounter; // keep track of time for next pulse
rate[9] = PulseSensor::IBI; // add the latest IBI to the rate array runningTotal += rate[9]; // add the latest IBI to runningTotal runningTotal /= 10; // average the last 10 IBI values PulseSensor::BPM = 60000/runningTotal; // how many beats can fit into a minute? that's BPM! PulseSensor::QS = true; // set Quantified Self flag // QS FLAG IS NOT CLEARED INSIDE THIS ISR }
}
if (PulseSensor::Signal < thresh && Pulse == true) { // when the values are going down, the beat is over Pulse = false; // reset the Pulse flag so we can do it again amp = P - T; // get amplitude of the pulse wave thresh = amp/2 + T; // set thresh at 50% of the amplitude P = thresh; // reset these for next time T = thresh; }
if (N > 2500){ // if 2.5 seconds go by without a beat thresh = 512; // set thresh default P = 512; // set P default T = 512; // set T default lastBeatTime = sampleCounter; // bring the lastBeatTime up to date
firstBeat = true; // set these to avoid noise secondBeat = false; // when we get the heartbeat back }
sei(); // enable interrupts when youre done! } // end isr
my header file
///*
ifndef PULSE_SENSOR_ARDUINO_H
define PULSE_SENSOR_ARDUINO_H
include "Arduino.h"
class PulseSensor { public: static void begin(int pulsePin);
static volatile int BPM; // used to hold the pulse rate static volatile int Signal; // holds the incoming raw data static volatile int IBI; // holds the time between beats, must be seeded! static volatile boolean QS; // becomes true when Arduoino finds a beat. };
endif // PULSE_SENSOR_ARDUINO_H
error shown is
/// In function 'void setup()': error: '::begin' has not been declared note: in expansion of macro 'PulseSensor' error: expected ';' before '::' token Error compiling. ///