David's line following code from the LVBots competition, 2015.

Dependencies:   GeneralDebouncer Pacer PololuEncoder mbed

Fork of DeadReckoning by David Grayson

Committer:
DavidEGrayson
Date:
Thu Apr 16 22:00:15 2015 +0000
Revision:
57:99bec7fab454
Parent:
52:05a8e919ddb0
Doubled the encoder counts for indicating the end of the course because we might have to start a little bit back from the finish line.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DavidEGrayson 44:edcacba44760 1 #pragma once
DavidEGrayson 44:edcacba44760 2
DavidEGrayson 44:edcacba44760 3 #include <mbed.h>
DavidEGrayson 44:edcacba44760 4
DavidEGrayson 44:edcacba44760 5 class TurnSensor
DavidEGrayson 44:edcacba44760 6 {
DavidEGrayson 44:edcacba44760 7 // TODO: for production code, you would want a way to set the gyro offset
DavidEGrayson 44:edcacba44760 8
DavidEGrayson 44:edcacba44760 9 public:
DavidEGrayson 44:edcacba44760 10
DavidEGrayson 50:517c0f0e621f 11 void reset();
DavidEGrayson 44:edcacba44760 12 void start();
DavidEGrayson 44:edcacba44760 13 void update();
DavidEGrayson 44:edcacba44760 14
DavidEGrayson 44:edcacba44760 15 int32_t getAngle()
DavidEGrayson 44:edcacba44760 16 {
DavidEGrayson 44:edcacba44760 17 return (int32_t)angleUnsigned;
DavidEGrayson 44:edcacba44760 18 }
DavidEGrayson 44:edcacba44760 19
DavidEGrayson 52:05a8e919ddb0 20 uint32_t getAngleUnsigned()
DavidEGrayson 52:05a8e919ddb0 21 {
DavidEGrayson 52:05a8e919ddb0 22 return angleUnsigned;
DavidEGrayson 52:05a8e919ddb0 23 }
DavidEGrayson 52:05a8e919ddb0 24
DavidEGrayson 44:edcacba44760 25 int16_t getAngleDegrees()
DavidEGrayson 44:edcacba44760 26 {
DavidEGrayson 44:edcacba44760 27 return (((int32_t)angleUnsigned >> 16) * 360) >> 16;
DavidEGrayson 44:edcacba44760 28 }
DavidEGrayson 44:edcacba44760 29
DavidEGrayson 44:edcacba44760 30 int16_t getRate()
DavidEGrayson 44:edcacba44760 31 {
DavidEGrayson 44:edcacba44760 32 return rate;
DavidEGrayson 44:edcacba44760 33 }
DavidEGrayson 44:edcacba44760 34
DavidEGrayson 44:edcacba44760 35 private:
DavidEGrayson 44:edcacba44760 36
DavidEGrayson 44:edcacba44760 37 Timer timer;
DavidEGrayson 44:edcacba44760 38 uint32_t angleUnsigned;
DavidEGrayson 44:edcacba44760 39 int16_t rate;
DavidEGrayson 44:edcacba44760 40 uint16_t gyroLastUpdate;
DavidEGrayson 50:517c0f0e621f 41 };
DavidEGrayson 50:517c0f0e621f 42
DavidEGrayson 50:517c0f0e621f 43
DavidEGrayson 50:517c0f0e621f 44 // This constant represents a turn of 45 degrees.
DavidEGrayson 50:517c0f0e621f 45 const int32_t turnAngle45 = 0x20000000;
DavidEGrayson 50:517c0f0e621f 46
DavidEGrayson 50:517c0f0e621f 47 // This constant represents a turn of 90 degrees.
DavidEGrayson 50:517c0f0e621f 48 const int32_t turnAngle90 = turnAngle45 * 2;
DavidEGrayson 50:517c0f0e621f 49
DavidEGrayson 50:517c0f0e621f 50 // This constant represents a turn of approximately 1 degree.
DavidEGrayson 50:517c0f0e621f 51 const int32_t turnAngle1 = (turnAngle45 + 22) / 45;