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

Committer:
dreamselec
Date:
Thu Dec 17 17:23:24 2015 +0100
Revision:
32:9a4046224b11
Parent:
31:16e056b9f9e0
Comments and clean up.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dreamselec 10:16ba52f8e025 1
dreamselec 32:9a4046224b11 2 //
dreamselec 32:9a4046224b11 3 // globals.h
dreamselec 32:9a4046224b11 4 // Created by Chandan Siyag on 13/11/2015.
dreamselec 32:9a4046224b11 5 //
dreamselec 32:9a4046224b11 6 // Includes all the functions, variables, objects that need to be accessed accross the classes/files.
dreamselec 4:4eebb4de22a7 7 #ifndef _globals_h_
dreamselec 4:4eebb4de22a7 8 #define _globals_h_
dreamselec 2:7a55cb10259f 9
dreamselec 10:16ba52f8e025 10 #include "Block.h"
dreamselec 10:16ba52f8e025 11 #include "mbed.h"
dreamselec 10:16ba52f8e025 12
dreamselec 32:9a4046224b11 13 // Forward declared classes
dreamselec 10:16ba52f8e025 14 class FPGA;
dreamselec 10:16ba52f8e025 15 class TCS3472_I2C;
dreamselec 10:16ba52f8e025 16 class MCP23017;
dreamselec 10:16ba52f8e025 17 class WattBob_TextLCD;
dreamselec 10:16ba52f8e025 18
dreamselec 32:9a4046224b11 19 // External global variables
dreamselec 4:4eebb4de22a7 20 extern mbed::Serial pc;
dreamselec 10:16ba52f8e025 21 extern MCP23017 *i2cport;
dreamselec 7:b6e31bfdb2af 22 extern int kDefaultBaudRate;
dreamselec 10:16ba52f8e025 23 extern WattBob_TextLCD *lcd;
dreamselec 2:7a55cb10259f 24 //extern SerialBase gParity;
dreamselec 2:7a55cb10259f 25 extern int gStopBits;
dreamselec 8:e1da2ae62885 26 extern bool connectedToPC;
dreamselec 10:16ba52f8e025 27 extern bool runServoTest;
dreamselec 23:db91aaa43a9e 28 extern bool runBreakBeamTest;
dreamselec 25:792540d69c49 29 extern bool runColourSensorTest;
dreamselec 25:792540d69c49 30 extern bool getColourSensorValue;
dreamselec 25:792540d69c49 31 extern bool getBlockColourValue;
dreamselec 25:792540d69c49 32 extern float gIntegrationTime;
dreamselec 25:792540d69c49 33 extern int gToggleServoNumber;
dreamselec 26:bbcc25418ffa 34 extern int errorMultiplier;
dreamselec 27:2cb1bdb7ae3d 35 extern int hazReadingCount;
dreamselec 29:9c0339e3c593 36 extern bool setNewHazBlock;
dreamselec 2:7a55cb10259f 37
dreamselec 32:9a4046224b11 38 // Constants
dreamselec 6:98fe30430194 39 const int kCommandBufferSize = 80;
dreamselec 7:b6e31bfdb2af 40 const int kSmallBufferSize = 5;
dreamselec 27:2cb1bdb7ae3d 41 const float kServoWait = 0.20;
dreamselec 2:7a55cb10259f 42
dreamselec 32:9a4046224b11 43 // More external globals vars
dreamselec 26:bbcc25418ffa 44 extern float currentMinError[3];
dreamselec 26:bbcc25418ffa 45 extern float currentMaxError[3];
dreamselec 28:7e4d29977d72 46 extern bool pcModeChanged;
dreamselec 2:7a55cb10259f 47 #define FOREVER for(;;)
dreamselec 2:7a55cb10259f 48
dreamselec 32:9a4046224b11 49 // More constants and enums
dreamselec 6:98fe30430194 50 const char CommandTypeValue [3] = {'!', '?', ':'};
dreamselec 6:98fe30430194 51 const char kCommandTerminator = ';';
dreamselec 8:e1da2ae62885 52 enum CommandTypeRaw { InvalidType = -1, Set = 0, Query = 1, Reply = 2 };
dreamselec 6:98fe30430194 53
dreamselec 32:9a4046224b11 54 // Red block values
dreamselec 20:4e0f0944f28f 55 const float kMinRedBlock[4] = {4.812, 2.286, 1.316, 1};
dreamselec 26:bbcc25418ffa 56 const float kMaxRedBlock[4] = {5.474, 3.105, 1.429, 1};
dreamselec 20:4e0f0944f28f 57 const float kAverageRedBlock[4] = {5.25134482758621, 2.85965517241379, 1.35858620689655, 1};
dreamselec 31:16e056b9f9e0 58 const float kMinRedError[3] = { 0.389641483105392, 0.383777881434993, 0.0610744881279823};
dreamselec 31:16e056b9f9e0 59 const float kMaxRedError[3] = { 0.238327377883225, 0.139481384106522, 0.0612648605358003};
dreamselec 29:9c0339e3c593 60
dreamselec 29:9c0339e3c593 61 // Other colour blocks
dreamselec 29:9c0339e3c593 62 const float kMinError[7][3] = {
dreamselec 30:c0bc92d009fe 63 { 0.389641483105392, 0.383777881434993, 0.0500744881279823}, // Red
dreamselec 29:9c0339e3c593 64 { 0.0359779720380292, 0.0461476412271348, 0.0391255334092747 }, // White
dreamselec 29:9c0339e3c593 65 { 0.050917996923305, 0.109422428771797, 0.0665409549163153 }, // Blue
dreamselec 29:9c0339e3c593 66 { 0.0880138969310943, 0.0743612766304789, 0.143658023826209 }, // Green
dreamselec 29:9c0339e3c593 67 { 0.517256339090836, 0.504177829914356, 0.0752212389380535 }, // Orange
dreamselec 29:9c0339e3c593 68 { 0.092903676196678, 0.125407698975651, 0.107444827572802 }, // Yellow
dreamselec 29:9c0339e3c593 69 { 0, 0, 0} // TODO: Add Black
dreamselec 29:9c0339e3c593 70 };
dreamselec 29:9c0339e3c593 71
dreamselec 29:9c0339e3c593 72 const float kMaxError[7][3] = {
dreamselec 30:c0bc92d009fe 73 { 0.238327377883225, 0.139481384106522, 0.0502648605358003},
dreamselec 29:9c0339e3c593 74 { 0.0231629905458534, 0.0382894017850168, 0.0244999380271382 }, // White
dreamselec 29:9c0339e3c593 75 { 0.312890306667189, 0.361950218761122, 0.307500801104292 }, // Blue
dreamselec 29:9c0339e3c593 76 { 0.532136653155761, 0.0508203411966372, 0.0469516468114928 }, // Green
dreamselec 29:9c0339e3c593 77 { 0.215383578992752, 0.114324911398194, 0.0350882137421786 }, // Orange
dreamselec 29:9c0339e3c593 78 { 0.055956916957788, 0.0732559590665169, 0.0515512811043425 }, // Yellow
dreamselec 30:c0bc92d009fe 79 { 0, 0, 0} // TODO: Add black
dreamselec 29:9c0339e3c593 80 };
dreamselec 29:9c0339e3c593 81
dreamselec 29:9c0339e3c593 82 const float kAverageValues[7][4] = {
dreamselec 30:c0bc92d009fe 83 {5.25134482758621, 2.85965517241379, 1.35858620689655, 1},
dreamselec 29:9c0339e3c593 84 { 4.10882727272727, 1.39749090909091, 1.54026363636364, 1 },
dreamselec 29:9c0339e3c593 85 { 2.5782808988764, 0.536730337078651, 0.911662921348315, 1 },
dreamselec 29:9c0339e3c593 86 { 4.60533333333333, 1.13435185185185, 2.1405, 1 },
dreamselec 29:9c0339e3c593 87 { 6.51070175438596, 3.52949122807018, 1.86747368421053, 1 },
dreamselec 29:9c0339e3c593 88 { 6.81846, 2.96481, 2.57239, 1 },
dreamselec 29:9c0339e3c593 89 { 0, 0, 0, 1 }
dreamselec 29:9c0339e3c593 90 };
dreamselec 20:4e0f0944f28f 91
dreamselec 32:9a4046224b11 92 // External global objects
dreamselec 20:4e0f0944f28f 93 extern Block defaultHazBlock;
dreamselec 9:dc8f155b71c8 94 extern Block _HazBlock;
dreamselec 10:16ba52f8e025 95 extern FPGA *fpga;
dreamselec 10:16ba52f8e025 96
dreamselec 10:16ba52f8e025 97 extern TCS3472_I2C rgbSensor;
dreamselec 9:dc8f155b71c8 98
dreamselec 32:9a4046224b11 99 // Enums to help make code more readable and easier to edit
dreamselec 6:98fe30430194 100 enum Servos {Stopping = 1, Sorting = 2};
dreamselec 6:98fe30430194 101 enum StoppingServoPositions {Stop = 0, Go = 1};
dreamselec 20:4e0f0944f28f 102 enum SortingServoPositions {NonHaz = 0, Haz = 1};
dreamselec 17:af373246bf80 103 enum Controls { Start = 0, Pause = 1};
dreamselec 17:af373246bf80 104 enum PCModes { None = -1, Normal = 0, Maintanence = 1};
dreamselec 17:af373246bf80 105
dreamselec 32:9a4046224b11 106 // External variables
dreamselec 17:af373246bf80 107 extern PCModes currentMode;
dreamselec 18:44a1c1a30166 108 extern Controls currentState;
dreamselec 32:9a4046224b11 109
dreamselec 32:9a4046224b11 110 // Global functions
dreamselec 20:4e0f0944f28f 111 void DefaultHazBlock();
dreamselec 10:16ba52f8e025 112
dreamselec 10:16ba52f8e025 113 int readSwitches();
dreamselec 20:4e0f0944f28f 114 bool displayAbortDialog();
dreamselec 20:4e0f0944f28f 115 void displayPCStatus();
dreamselec 6:98fe30430194 116
dreamselec 8:e1da2ae62885 117 void connectToPC(CommandTypeRaw typeRaw=Set);
dreamselec 8:e1da2ae62885 118 void disconnectToPC(CommandTypeRaw typeRaw=Set);
dreamselec 8:e1da2ae62885 119 void hazBlock(CommandTypeRaw typeRaw);
dreamselec 8:e1da2ae62885 120 void getCurrentBlock(CommandTypeRaw typeRaw=Query);
dreamselec 8:e1da2ae62885 121
dreamselec 15:777390eb5afd 122 void setIntegrationTimeTo(float integrationTime);
dreamselec 8:e1da2ae62885 123 void previewOnPC(bool on);
dreamselec 25:792540d69c49 124 void testColourSensor(Controls state);
dreamselec 8:e1da2ae62885 125
dreamselec 17:af373246bf80 126 void testServos(Controls state);
dreamselec 8:e1da2ae62885 127 void resetServos();
dreamselec 8:e1da2ae62885 128
dreamselec 8:e1da2ae62885 129 void getPortInfo();
dreamselec 8:e1da2ae62885 130 void setPortBaudRate(int baudRate);
dreamselec 14:cf2f255b5560 131 void setPortParity(int parity);
dreamselec 8:e1da2ae62885 132
dreamselec 23:db91aaa43a9e 133 void testBreakBeams(Controls state);
dreamselec 8:e1da2ae62885 134
dreamselec 26:bbcc25418ffa 135 void printColourDescription(Colour colour);
dreamselec 26:bbcc25418ffa 136 void printBlockDescription(Block block);
dreamselec 6:98fe30430194 137 #endif