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@32:9a4046224b11, 2015-12-17 (annotated)
- 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?
User | Revision | Line number | New 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 |