problems passing a ServoTimer1 object...


currently, i'm working on class manipulates servo , causes ir sensor take readings. code rotates servo 1 degree increments , averages ten ir sensor measurements 1 average 'distance' reading.

the problem isn't in ir sensor or algorithm used, it's in passing servotimer1 object function manipulated. error is:

in function `irtower::getdistangle()':
c:\documents , settings\...\libraries\irtower\irtower.cpp:27: undefined reference `servotimer1::write(int)'


here's part of code that's giving me troubles:

class declaration of irtower class:
code: [select]

class irtower{
 private:
  int servopin;
  int sensorpin;
 public:
 int distance;
 int angle;
 void init(int); //takes pin sensor connected to
 void getdistangle(servotimer1); //this troublesome function
 
};


and now, code of troublesome function getdistangle(servotimer1):

code: [select]

void irtower::getdistangle(servotimer1 tower) //the hard function
{
 //handles servo rotation , data collection. have 'left' , 'right' center
 tower.write(0); //problem here.
 angle= 0;  
 int distances[90][1];
 int ycomps[90][1];
 for(;angle<=90;angle++)   {
   tower.write(angle);//problem here, too.

//all code below line seems compile okay.

   for(int i(0);i<10;i++) //take ten samples , average them.
   {
     double tempdist = (1/((8*pow(10,-5))*(analogread(sensorpin))))-0.0016; //damnit...probably need @ least float here store these values. start double, try float later.
     distances[angle][1] +=tempdist; //okay, int taking double...a huge no no me personally. need vectors...this should work 'data type' warning.
    delay(10); //little delay give program time stuff    
   }
   distances[angle][1]= (distances[angle][1])/10; //should store final averaged distance
   //store y components
   ycomps[angle][1] = distances[angle][1]*sin((angle+45)*acos(-1)/180); //gets y components
   delay(10); //another little delay.
   //bear in mind angle counting variable @ point. 45 needs added 'true' angle reading.
   //indices on array 0-89 , 0.
 }
 
  //break 3 cases dependent on y comps. ycomps increase (on left wall), y comps stay same (on wall), y comps decrease(on rightt wall)
   int deltaycomps(0); //this value store difference between 2 values. find points 3 cases
   for(angle=0;angle<90;angle++)
  {
    deltaycomps = ycomps[angle-1][1] - ycomps[angle-2][1]; //get delta y 2 previous values.
    //compare delta y between current , 1 previous value. same?
   int currdeltay = ycomps[angle][1] - ycomps[angle-1][1];
   if(currdeltay>(deltaycomps + 3) || currdeltay<(deltaycomps-3)) //the 3 sort of 'fudge' factor here. may need tightened up.
   {
     //if you're in here, value outside of delta range , may threat object.
     //consider sticking 'fine tune' function here, center of can
     distance = distances[angle][1];
     angle +=45; //who knows...maybe actual distance , angle.
   }
   else if(currdeltay<(deltaycomps + 2) && currdeltay>(deltaycomps-2)) //this condition means 2 values within 2 centimeters of each other...enough assume @ wall
     {
       for(;angle<90;angle++)
       {
         if(distances[angle-1][1]> distances[angle][1] + 3) //a previous measurement larger first 1 means you've found can
         {
           distance = distances[angle][1];
           angle +=45;
         }
       }
     }
     else if(currdeltay-deltaycomps <0) //this means y values decreasing in size , you're on 'right' side of platform
     {
       for(;angle<90;angle++)
       {
         if(ycomps[angle-1][1]<ycomps[angle][1]) //previous value smaller current value, previous value must've been threat object
         {
           distance = distances[angle-1][1];
           angle +=44; //angle angle of 'previous' value...the threat object
         }
       }
     }
   else
   {
     //do stuff
   }

}
}


i've put comment ''problem here'' problematic lines of code are. it's 2 places, ask servotimer1 object, tower, something.

and main arduino sketch:

code: [select]

#include "irtower.h"

irtower sensor;
servotimer1 servo;


void setup() {
 serial.begin(9600);           // set serial library @ 9600 bps
 sensor.init(14); //sets ir sensor pin
 servo.attach(9);
}


void loop() {

 
 for(int i=0;i<1;i++)
 {
   sensor.getdistangle(servo);
   servo.write(sensor.angle);
 }
 
}


so basically, cannot declare servotimer1 object in setup loop , manipulate class, if i'm passing member function of class...any suggestions on how remedy this?

thanks guys.

ha..wow...i made rookie mistake here, guys. above problem remedied changing code of main sketch like:

code: [select]

#include "irtower.h"
#include "servotimer1.h" //oops...forgot add this

irtower sensor;
servotimer1 servo;


void setup()
{
 serial.begin(9600);           // set serial library @ 9600 bps
 sensor.init(14); //sets ir sensor pin
 servo.attach(9);
}


void loop()
{
for(int i=0;i<1;i++)
 {
   sensor.getdistangle(servo);
   servo.write(sensor.angle);
 }
 
}


however, no other changes code, error:

o: in function `loop':
undefined reference `irtower::getdistangle(servotimer1)'o: in function `setup':


i'll keep trying hunt 1 down. in meantime, appreciated.

thanks!


Arduino Forum > Forum 2005-2010 (read only) > Software > Syntax & Programs > problems passing a ServoTimer1 object...


arduino

Comments

Popular posts from this blog

CAN'T INSTALL MAMBELFISH 1.5 FROM DIRECTORY - Joomla! Forum - community, help and support

error: expected initializer before 'void'

CPU load monitoring using GPIO and leds - Raspberry Pi Forums