David's dead reckoning code for the LVBots competition on March 6th. Uses the mbed LPC1768, DRV8835, QTR-3RC, and two DC motors with encoders.
Dependencies: PololuEncoder Pacer mbed GeneralDebouncer
turn_sensor.h
- Committer:
- DavidEGrayson
- Date:
- 2019-08-13
- Revision:
- 48:597738b77f77
- Parent:
- 42:96671b71aac5
File content as of revision 48:597738b77f77:
#pragma once
#include <mbed.h>
class TurnSensor
{
// TODO: for production code, you would want a way to set the gyro offset
public:
void reset();
void start();
void update();
int32_t getAngle()
{
return (int32_t)angleUnsigned;
}
uint32_t getAngleUnsigned()
{
return angleUnsigned;
}
int16_t getAngleDegrees()
{
return (((int32_t)angleUnsigned >> 16) * 360) >> 16;
}
int32_t getAngleMillidegrees()
{
return ((int64_t)(int32_t)angleUnsigned * 360000) >> 32;
}
int16_t getRate()
{
return rate;
}
private:
Timer timer;
uint32_t angleUnsigned;
int16_t rate;
uint16_t gyroLastUpdate;
};
// This constant represents a turn of 45 degrees.
const int32_t turnAngle45 = 0x20000000;
// This constant represents a turn of 90 degrees.
const int32_t turnAngle90 = turnAngle45 * 2;
// This constant represents a turn of approximately 1 degree.
const int32_t turnAngle1 = (turnAngle45 + 22) / 45;
David Grayson