aboutsummaryrefslogtreecommitdiff
path: root/libraries/Robot_Control/examples/explore/R04_Compass/R04_Compass.ino
blob: a7a7315f50fce469820a059d045613649d5c9759 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/* Robot Compass

 The robot has an on-board compass module, with
 which it can tell the direction the robot is 
 facing. This sketch will make sure the robot 
 goes towards a certain direction. 
 
 Beware, magnets will interfere with the compass
 readings.

 Circuit:
 * Arduino Robot
 
 created 1 May 2013
 by X. Yang
 modified 12 May 2013
 by D. Cuartielles
 
 This example is in the public domain
 */

// include the robot library
#include <ArduinoRobot.h>

int speedLeft;
int speedRight;
int compassValue;
int direc = 180;  //Direction the robot is heading

void setup() {
  // initialize the modules
  Robot.begin();
  Robot.beginTFT();
  Robot.beginSD();
  Robot.displayLogos();
}

void loop() { 
  // read the compass orientation
  compassValue = Robot.compassRead();
  
  // how many degrees are we off
  int diff = compassValue-direc;
  
  // modify degress 
  if(diff > 180)
    diff = -360+diff;
  else if(diff < -180)
    diff = 360+diff;
    
  // Make the robot turn to its proper orientation
  diff = map(diff, -180, 180, -255, 255);
  
  if(diff > 0) {
    // keep the right wheel spinning, 
    // change the speed of the left wheel 
    speedLeft = 255-diff;
    speedRight = 255;
  } else {
    // keep the right left spinning,
    // change the speed of the left wheel   
    speedLeft = 255;
    speedRight = 255+diff;
  }
  // write out to the motors
  Robot.motorsWrite(speedLeft, speedRight);

  // draw the orientation on the screen
  Robot.drawCompass(compassValue);
}