arduino / Arduino

Arduino IDE 1.x
https://www.arduino.cc/en/software
Other
14.15k stars 7.01k forks source link

error while compiling my program to arduino yun #2603

Closed karthisl closed 9 years ago

karthisl commented 9 years ago

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;

                                                 // Initializes Timer1 to throw an interrupt every 2ms.

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

                                                                                 //  find the peak and trough of the pulse wave

if(PulseSensor::Signal < thresh && N > (PulseSensor::IBI/5)*3) {

                                                                       // avoid dichrotic noise by waiting 3/5 of last IBI
if (PulseSensor::Signal < T){                        // T is the trough
  T = PulseSensor::Signal;                         // keep track of lowest point in pulse wave 
}

}

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

  if(secondBeat){                        // if this is the second beat, if secondBeat == TRUE
    secondBeat = false;                  // clear secondBeat flag
    for(int i=0; i<=9; i++){             // seed the running total to get a realisitic BPM at startup
      rate[i] = PulseSensor::IBI;                      
    }
  }

  if(firstBeat){                         // if it's the first time we found a beat, if firstBeat == TRUE
    firstBeat = false;                   // clear firstBeat flag
    secondBeat = true;                   // set the second beat flag
    sei();                               // enable interrupts again
    return;                              // IBI value is unreliable so discard it
  }   

  // keep a running total of the last 10 IBI values
  word runningTotal = 0;                  // clear the runningTotal variable    

  for(int i=0; i<=8; i++){                // shift data in the rate array
    rate[i] = rate[i+1];                  // and drop the oldest IBI value 
    runningTotal += rate[i];              // add up the 9 oldest IBI values
  }

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. ///

ffissore commented 9 years ago

Why did you #define PulseSensor::begin() ?

karthisl26 commented 9 years ago

for calling the library function

ffissore commented 9 years ago

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

karthisl26 commented 9 years ago

thanks for your suggestion