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

Dependencies:   GeneralDebouncer Pacer PololuEncoder mbed

Fork of DeadReckoning by David Grayson

Committer:
DavidEGrayson
Date:
Wed Apr 15 22:53:33 2015 +0000
Revision:
50:517c0f0e621f
Parent:
44:edcacba44760
Child:
52:05a8e919ddb0
got it to detect roughly when it gets back to the center, but then I tried to make it fancier and it stopped working

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 44:edcacba44760 20 int16_t getAngleDegrees()
DavidEGrayson 44:edcacba44760 21 {
DavidEGrayson 44:edcacba44760 22 return (((int32_t)angleUnsigned >> 16) * 360) >> 16;
DavidEGrayson 44:edcacba44760 23 }
DavidEGrayson 44:edcacba44760 24
DavidEGrayson 44:edcacba44760 25 int16_t getRate()
DavidEGrayson 44:edcacba44760 26 {
DavidEGrayson 44:edcacba44760 27 return rate;
DavidEGrayson 44:edcacba44760 28 }
DavidEGrayson 44:edcacba44760 29
DavidEGrayson 44:edcacba44760 30 private:
DavidEGrayson 44:edcacba44760 31
DavidEGrayson 44:edcacba44760 32 Timer timer;
DavidEGrayson 44:edcacba44760 33 uint32_t angleUnsigned;
DavidEGrayson 44:edcacba44760 34 int16_t rate;
DavidEGrayson 44:edcacba44760 35 uint16_t gyroLastUpdate;
DavidEGrayson 50:517c0f0e621f 36 };
DavidEGrayson 50:517c0f0e621f 37
DavidEGrayson 50:517c0f0e621f 38
DavidEGrayson 50:517c0f0e621f 39 // This constant represents a turn of 45 degrees.
DavidEGrayson 50:517c0f0e621f 40 const int32_t turnAngle45 = 0x20000000;
DavidEGrayson 50:517c0f0e621f 41
DavidEGrayson 50:517c0f0e621f 42 // This constant represents a turn of 90 degrees.
DavidEGrayson 50:517c0f0e621f 43 const int32_t turnAngle90 = turnAngle45 * 2;
DavidEGrayson 50:517c0f0e621f 44
DavidEGrayson 50:517c0f0e621f 45 // This constant represents a turn of approximately 1 degree.
DavidEGrayson 50:517c0f0e621f 46 const int32_t turnAngle1 = (turnAngle45 + 22) / 45;