Autonomous Navigation and 2D Mapping

Hello guys, i want your help with programming of my arduino uno. I'm trying to upload the code of the Autonomous Navigation and 2D Mapping robot from the site Arduino Project Hub.

#include <Wire.h>
#include <HMC5883L.h>
#include <NewPing.h>

NewPing sonar1(A0, A1, 100);
NewPing sonar2(A2, A3, 100);
NewPing sonar3(A4, A5, 100);

HMC5883L compass;


//Motor pins
int d1=8; 
int  val2=82,val=90;
int d2=9;
int brake1=4;
int brake2=12;
int op1=5;
int op2=7;
int pwm1=6;
int pwm2=11;
int td=35;

int error = 0;
String s="",s1,s2,s3;
//Final heading hard coded
/* 
 *  0   -> N
 *  90  -> E
 *  180 -> S
 *  270 -> W
 */
int fin_heading=0, curr_heading;
int m11=3,m12=4,m21=5,m22=6;
//Global variables
int t=2,e=7; //HCSR04 control pins
int d,dt; //Distance calculated
//int servoPin=9;
int trans[1000], count =0;
int dis1,dis2,dis3;
//Distance acquire
void distance()
{
  dis1=sonar1.ping_cm();
  dis2=sonar2.ping_cm();
  dis3=sonar3.ping_cm();
  
}
void heading()
{
  MagnetometerRaw raw = compass.readRawAxis();
  MagnetometerScaled scaled = compass.readScaledAxis();
  int MilliGauss_OnThe_XAxis = scaled.XAxis;
  float heading = atan2(scaled.YAxis, scaled.XAxis);
  float declinationAngle = -0.0457;
  heading += declinationAngle;
  if(heading < 0)
    heading += 2*PI;
  // Check for wrap due to addition of declination.
  if(heading > 2*PI)
    heading -= 2*PI;
  // Convert radians to degrees for readability.
  float headingDegrees = heading * 180/M_PI;
  curr_heading=(int)headingDegrees;
  delay(66); 
}

void setup()
{
  Serial.begin(9600);
  pinMode(d1,OUTPUT);
  pinMode(d2,OUTPUT);
  pinMode(brake1,OUTPUT);
  pinMode(brake2,OUTPUT);
  pinMode(op1,OUTPUT);
  pinMode(op2,OUTPUT);
  pinMode(pwm1,OUTPUT);
  pinMode(pwm2,OUTPUT);
  Wire.begin();
  error = compass.setScale(1.3); 
  error = compass.setMeasurementMode(MEASUREMENT_CONTINUOUS); 
}

void loop() 
{
  String sc="+";
  heading();
  distance();
  s1=String(dis1);
  s2=String(dis2);
  s3=String(dis3);
  String head=String((int)curr_heading);
  //String head="360";
  s=sc+s1+sc+s2+sc+s3+sc+head+"arg";
  Serial.print(s);
  Serial.println();
  //Algorithm
  char cd='f';
  cd= dist_empty();
  switch(cd)
  {
    
    case 'l':
    left();
    delay(420);
    stoop();
    delay(100);
    break;
    case 'r': right();
    delay(420);
    stoop();
    delay(100);
    break;
    case 'f': forward();
    delay(150);
    stoop();
    delay(100);
    break;
    default: stoop();
  }
  Serial.println(cd);
  delay(100);
}
char dist_empty()
{
  //Follow RHR
  td=18;
  if(dis1<td&&dis1!=0)
  {
    if(dis2>td||dis2==0)
    return 'l';
    else if(dis3>td||dis3==0)
    return 'r';
    else
    return 's';
  }
  else
  {
    /*if(dis3<=10)
    return 'l';//a=l
    else if(dis2<=10)
    return 'r';//b=r
    else*/
    return 'f';
  }
}
void left()
{
  digitalWrite(brake2,LOW);
      analogWrite(pwm2,val);
      digitalWrite(d1,HIGH);
      analogWrite(pwm1,val);
      digitalWrite(d2,LOW);
      digitalWrite(brake1,LOW);
      digitalWrite(op1,LOW);
      digitalWrite(op2,LOW);
}
void right()
{
 digitalWrite(brake2,LOW);
      analogWrite(pwm2,val);
      digitalWrite(d1,LOW);
      analogWrite(pwm1,val);
      digitalWrite(d2,HIGH);
      digitalWrite(brake1,LOW);
      digitalWrite(op1,LOW);
      digitalWrite(op2,LOW);
}
void forward()
{
  digitalWrite(d1,LOW);
      analogWrite(pwm1,val);
      digitalWrite(brake2,LOW);
      analogWrite(pwm2,val2);
      digitalWrite(d2,LOW);
      digitalWrite(brake1,LOW);
      digitalWrite(op1,LOW);
      digitalWrite(op2,LOW);  
}
void stoop()
{
   digitalWrite(brake2,HIGH);
      digitalWrite(d1,LOW);
      digitalWrite(d2,LOW);
      digitalWrite(brake1,HIGH);
      digitalWrite(op1,LOW);
      digitalWrite(op2,LOW);
      analogWrite(pwm1, 0);
      analogWrite(pwm2, 0);
}

the arduino shows me a lot of errors like:

Arduino: 1.6.9 Hourly Build 2016/05/09 06:33 (Windows 10), Board: "Arduino/Genuino Uno"

C:\Users\Charalampos\Downloads\genesis_A01\genesis_A01.ino: In function 'void heading()':

genesis_A01:51: error: 'class HMC5883L' has no member named 'readRawAxis'

MagnetometerRaw raw = compass.readRawAxis();

^

genesis_A01:52: error: 'class HMC5883L' has no member named 'readScaledAxis'

MagnetometerScaled scaled = compass.readScaledAxis();

C:\Users\Charalampos\Downloads\genesis_A01\genesis_A01.ino: In function 'void setup()':

genesis_A01:80: error: 'class HMC5883L' has no member named 'setScale'

error = compass.setScale(1.3); ^

genesis_A01:81: error: 'class HMC5883L' has no member named 'setMeasurementMode'

error = compass.setMeasurementMode(MEASUREMENT_CONTINUOUS); ^

genesis_A01:81: error: 'MEASUREMENT_CONTINUOUS' was not declared in this scope

error = compass.setMeasurementMode(MEASUREMENT_CONTINUOUS); ^
exit status 1
'class HMC5883L' has no member named 'readRawAxis'

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

i dont know much things in programming of arduino. Can someone help me? thanks

(deleted)

documents/arduino/libraries

(deleted)

It looks like you may have a version of the HMC5883L library that is different from the one used in the code you downloaded. I have found several references to an HMC5883L library having "ReadRawAxis" instead of "readRawAxis". You may have to update the code you downloaded to work with your version of the library.

can you sent me the correct directory? i've made the changes with readRawAxis in the .cpp file of the directory and the keywords. i have these errors:

Arduino: 1.6.5 (Windows 8.1), Board: "Arduino Leonardo"

genesis_A01.ino: In function 'void heading()':
genesis_A01:51: error: 'class HMC5883L' has no member named 'readRawAxis'
genesis_A01:52: error: 'class HMC5883L' has no member named 'readScaledAxis'
genesis_A01.ino: In function 'void setup()':
genesis_A01:80: error: 'class HMC5883L' has no member named 'setScale'
genesis_A01:81: error: 'class HMC5883L' has no member named 'setMeasurementMode'
genesis_A01:81: error: 'MEASUREMENT_CONTINUOUS' was not declared in this scope
'class HMC5883L' has no member named 'readRawAxis'

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.

The project specifies the SeeedStudio "Grove - 3-Axis Digital Compass" (SKU: 101020034):
http://www.seeedstudio.com/depot/Grove-3Axis-Digital-Compass-p-759.html

That page has links to two different libraries:

It looks like the second one is the one that matches the project sources. You should use that one.

thank you, problem solved from your first comment. Although i want to ask several things. firstly, the program when i verify it says '''MEASUREMENT_CONTINUOUS' was not declared in this scope'' so i have to set it as something like float or int. any ideas? secondly, is it possible to use an arduino motorshield istead of that one used in that project (rki 1341 motorshield).if yes, what changes i have to do in the code.

charalambos10:
the program when i verify it says '''MEASUREMENT_CONTINUOUS' was not declared in this scope'' so i have to set it as something like float or int. any ideas?

That constant is defined in the library that matches the project. Switch to that library and the problem will go away.

charalambos10:
secondly, is it possible to use an arduino motorshield istead of that one used in that project (rki 1341 motorshield).if yes, what changes i have to do in the code.

You probably have to change the definitions of d1, d2, brake1, brake2, pwm1, and pwm2. Those are the motor control pins. You'll have to read the documentation for the motorshield to see what pins it uses and what it uses them for. You may have to move some of the other pins around if they conflict with motorshield pins.