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 03 15:50:14 2015 +0000
Revision:
31:16e056b9f9e0
Parent:
30:c0bc92d009fe
Child:
32:9a4046224b11
Fixed different colour detection algorithm. Detects all colours correctly.; Final code used for exhibition.

Who changed what in which revision?

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