Compass Program
#include <LSM303.h>
#include <Servo.h>
LSM303 compass;
Servo LeftMotor;
Servo RightMotor;
Servo BallMotor;
int stopp = 100;
int forward = 70;
int backward = 130;
void setup()
{
Serial.begin(9600);
Wire.begin();
compass.init();
compass.enableDefault();
LeftMotor.attach(3);
RightMotor.attach(2);
BallMotor.attach(4);
compass.m_min = (LSM303::vector<int16_t>){-32767, -32767, -32767};
compass.m_max = (LSM303::vector<int16_t>){+32767, +32767, +32767};
}
void loop()
{
int dir = compass.heading();
Serial.println(dir);
face(180);
}
void face (int val)
{
int dir = 0;
while(true)
{
compass.read();
dir = compass.heading();
Serial.println(dir);
if(dir > (val+5))
{
turnleft();
}
else if(dir < (val-5))
{
turnright();
}
else
{
nospeed();
delay(50);
break;
}
}
}
//motor movement functions
void goforward()
{
RightMotor.write(backward);
LeftMotor.write(forward);
delay(1);
}
void gobackward()
{
RightMotor.write(forward);
LeftMotor.write(backward);
delay (1);
}
void nospeed()
{
RightMotor.write(stopp);
LeftMotor.write(stopp);
delay (1);
}
void turnleft()
{
RightMotor.write(backward);
LeftMotor.write(backward);
delay (1);
}
void turnright()
{
RightMotor.write(forward);
LeftMotor.write(forward);
delay(1);
}
void ballmotor()
{
BallMotor.write(forward);
delay(1);
}