3rd year group project. Electronic and Electrical Engineering. Heriot-Watt University. This is the code for the mbed for the Automatic Little Object Organiser (ALOO).

Dependencies:   MCP23017 TCS3472_I2C WattBob_TextLCD mbed

globals.h

Committer:
dreamselec
Date:
2015-12-03
Revision:
31:16e056b9f9e0
Parent:
30:c0bc92d009fe
Child:
32:9a4046224b11

File content as of revision 31:16e056b9f9e0:




#ifndef _globals_h_
#define _globals_h_

#include "Block.h"
#include "mbed.h"
//#include "MCP23017.h"
//#include "fpga.h"

class FPGA;
class TCS3472_I2C;
class MCP23017;
class WattBob_TextLCD;

extern mbed::Serial pc;
extern MCP23017 *i2cport;
extern int kDefaultBaudRate;
extern WattBob_TextLCD *lcd;
//extern SerialBase gParity;
extern int gStopBits;
extern bool connectedToPC;
extern bool runServoTest;
extern bool runBreakBeamTest;
extern bool runColourSensorTest;
extern bool getColourSensorValue;
extern bool getBlockColourValue;
extern float gIntegrationTime;
extern int gToggleServoNumber;
extern int errorMultiplier;
extern int hazReadingCount;
extern bool setNewHazBlock;

const int kCommandBufferSize = 80;
const int kSmallBufferSize = 5;
const float kServoWait = 0.20;

extern float currentMinError[3];
extern float currentMaxError[3];
extern bool pcModeChanged;
#define FOREVER for(;;)

const char CommandTypeValue [3] = {'!', '?', ':'};
const char kCommandTerminator = ';';
enum CommandTypeRaw { InvalidType = -1, Set = 0, Query = 1, Reply = 2 };

const float kMinRedBlock[4] = {4.812, 2.286, 1.316, 1};
const float kMaxRedBlock[4] = {5.474, 3.105, 1.429, 1};
const float kAverageRedBlock[4] = {5.25134482758621, 2.85965517241379, 1.35858620689655, 1};
const float kMinRedError[3] = { 0.389641483105392, 0.383777881434993, 0.0610744881279823};
const float kMaxRedError[3] = { 0.238327377883225, 0.139481384106522, 0.0612648605358003};

// Other colour blocks
const float kMinError[7][3] = {
		{ 0.389641483105392, 0.383777881434993, 0.0500744881279823}, // Red
		{ 0.0359779720380292, 0.0461476412271348, 0.0391255334092747 }, // White
		{ 0.050917996923305, 0.109422428771797, 0.0665409549163153 }, // Blue
		{ 0.0880138969310943, 0.0743612766304789, 0.143658023826209 }, // Green
		{ 0.517256339090836, 0.504177829914356, 0.0752212389380535 }, // Orange
		{ 0.092903676196678, 0.125407698975651, 0.107444827572802 }, // Yellow
		{ 0, 0, 0} // TODO: Add Black
};

const float kMaxError[7][3] = {
		{ 0.238327377883225, 0.139481384106522, 0.0502648605358003},
		{ 0.0231629905458534, 0.0382894017850168, 0.0244999380271382 }, // White
		{ 0.312890306667189, 0.361950218761122, 0.307500801104292 }, // Blue
		{ 0.532136653155761, 0.0508203411966372, 0.0469516468114928 }, // Green
		{ 0.215383578992752, 0.114324911398194, 0.0350882137421786 }, // Orange
		{ 0.055956916957788, 0.0732559590665169, 0.0515512811043425 }, // Yellow
		{ 0, 0, 0} // TODO: Add black
};

const float kAverageValues[7][4] = {
		{5.25134482758621, 2.85965517241379, 1.35858620689655, 1},
		{ 4.10882727272727, 1.39749090909091, 1.54026363636364, 1 },
		{ 2.5782808988764, 0.536730337078651, 0.911662921348315, 1 },
		{ 4.60533333333333, 1.13435185185185, 2.1405, 1 },
		{ 6.51070175438596, 3.52949122807018, 1.86747368421053, 1 },
		{ 6.81846, 2.96481, 2.57239, 1 },
		{ 0, 0, 0, 1 }
};

extern Block defaultHazBlock;
extern Block _HazBlock;
extern FPGA *fpga;

extern TCS3472_I2C rgbSensor;

enum Servos {Stopping = 1, Sorting = 2};
enum StoppingServoPositions {Stop = 0, Go = 1};
enum SortingServoPositions {NonHaz = 0, Haz = 1};
enum Controls { Start = 0, Pause = 1};
enum PCModes { None = -1, Normal = 0, Maintanence = 1};

extern PCModes currentMode;
extern Controls currentState;
void DefaultHazBlock();

int readSwitches();
bool displayAbortDialog();
void displayPCStatus();

void connectToPC(CommandTypeRaw typeRaw=Set);
void disconnectToPC(CommandTypeRaw typeRaw=Set);
void hazBlock(CommandTypeRaw typeRaw);
void getCurrentBlock(CommandTypeRaw typeRaw=Query);

void setIntegrationTimeTo(float integrationTime);
void previewOnPC(bool on);
void testColourSensor(Controls state);

void testServos(Controls state);
void resetServos();

void getPortInfo();
void setPortBaudRate(int baudRate);
void setPortParity(int parity);

void testBreakBeams(Controls state);

void printColourDescription(Colour colour);
void printBlockDescription(Block block);
#endif