/**************************************************************************
TapeSensors.c
ME 218B Project Hats Off
Team Firefox
March 7, 2010
Robot uses 7 tape sensors to track and align with tape on the
floor.
***************************************************************************/
/*-------------------------- Include Files
-------------------------------*/
#include
"TapeSensors.h"
typedef
enum { WHITE = 0,
BLACK =
1
} TAPE_Color_t;
/*-------------------------- Module Definitions
-----------------------------*/
/*-------------------------- Module Functions
-----------------------------*/
/*-------------------------- Module Variables
-----------------------------*/
static
TAPE_Color_t lastReads[]
= {0,0,0,0,0,0,0}; //1 = black, 0
= white
//keeps track of last read for each sensor for hysteresis
/*-------------------------- Module Cal Variables
-------------------------*/
const static int thresWhite = 230; // white threshold =
150
const static int thresBlack = 320; // black threshold =
300
char
Tape_isBlack(TAPE_Sensor_t tapeNum) {
int rawValue;
rawValue =
ADS12_ReadADPin(tapeNum);
if (lastReads[tapeNum] == WHITE) {
if
(rawValue > thresBlack) lastReads[tapeNum] = BLACK;
}
else
{
if
(rawValue < thresWhite) lastReads[tapeNum] = WHITE;
}
return (lastReads[tapeNum] == BLACK);
}
char
Tape_isParallel(void) {
return
(Tape_isBlack(FRONT) && Tape_isBlack(CENTER) && Tape_isBlack(REAR));
}
char
Tape_isPerp(void) {
return
(Tape_isBlack(CENTER) && Tape_isBlack(CENTER_LEFT) && Tape_isBlack(CENTER_RIGHT));
}
TAPE_TrackStatus_t Tape_getTrackStatus(void) {
char combo;
combo =
4*Tape_isBlack(FRONT_LEFT) + 2*Tape_isBlack(FRONT) + Tape_isBlack(FRONT_RIGHT);
switch(combo) {
case
0: return LOST; break;
case
1: return WAY_LEFT; break;
case
2: return ALIGNED; break;
case
3: return LIL_LEFT; break;
case
4: return WAY_RIGHT; break;
case
5: return ERROR; break;
case
6: return LIL_RIGHT; break;
case
7: return INTERSECTION; break;
}
}