Alvaro Cassinelli / Mbed 2 deprecated skinGames_forktest

Dependencies:   mbed

Fork of scoreLight_Advanced by Alvaro Cassinelli

Committer:
mbedalvaro
Date:
Sat Apr 28 13:42:14 2012 +0000
Revision:
19:228430f1350e
Parent:
18:d72935b13858
Child:
22:d87317d7ca91
relatively stable. Now need to make commands to control speed/stiffness/color and size of spot form the computer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedalvaro 0:345b3bc7a0ea 1
mbedalvaro 0:345b3bc7a0ea 2 #include "blobConfig.h"
mbedalvaro 0:345b3bc7a0ea 3 #include "hardwareIO.h" // this is in fact only to get to know the initial position of the spots, as well as the mirror limits to set the bounding box for the blobs
mbedalvaro 0:345b3bc7a0ea 4
mbedalvaro 0:345b3bc7a0ea 5 blobConfig::blobConfig(): numBlobs(0) {
mbedalvaro 1:a4050fee11f7 6 //blobArray.clear();// there is no need to do this, the vector does not contains anything here.
mbedalvaro 1:a4050fee11f7 7
mbedalvaro 0:345b3bc7a0ea 8 }
mbedalvaro 0:345b3bc7a0ea 9
mbedalvaro 0:345b3bc7a0ea 10 blobConfig::~blobConfig() {
mbedalvaro 1:a4050fee11f7 11 clearConfig();
mbedalvaro 1:a4050fee11f7 12
mbedalvaro 0:345b3bc7a0ea 13 }
mbedalvaro 0:345b3bc7a0ea 14
mbedalvaro 0:345b3bc7a0ea 15 // =========================================== STANDARD CONFIGURATIONS =============================================================================
mbedalvaro 0:345b3bc7a0ea 16
mbedalvaro 0:345b3bc7a0ea 17 void blobConfig::computeBoundingBox() {
mbedalvaro 1:a4050fee11f7 18 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 19 blobArray[i]->computeBoundingBox();
mbedalvaro 1:a4050fee11f7 20 }
mbedalvaro 0:345b3bc7a0ea 21 }
mbedalvaro 0:345b3bc7a0ea 22
mbedalvaro 0:345b3bc7a0ea 23 void blobConfig::clearConfig() {
mbedalvaro 1:a4050fee11f7 24 for (int i=0; i<blobArray.size(); i++) delete blobArray[i]; // we must delete the pointer created with new, so the memory for the object is liberated (calls its destructor)
mbedalvaro 1:a4050fee11f7 25 blobArray.clear();
mbedalvaro 1:a4050fee11f7 26 numBlobs=0;// this is just equal to blobArray.size()
mbedalvaro 0:345b3bc7a0ea 27 }
mbedalvaro 0:345b3bc7a0ea 28
mbedalvaro 1:a4050fee11f7 29 void blobConfig::addOneElasticLoopRelax() {
mbedalvaro 1:a4050fee11f7 30 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 31 pBlob->createBlob(blobArray.size(), RELAX, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0));
mbedalvaro 1:a4050fee11f7 32 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 33 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 34
mbedalvaro 1:a4050fee11f7 35 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 36 numBlobs=blobArray.size();
mbedalvaro 1:a4050fee11f7 37
mbedalvaro 0:345b3bc7a0ea 38 }
mbedalvaro 0:345b3bc7a0ea 39
mbedalvaro 0:345b3bc7a0ea 40
mbedalvaro 1:a4050fee11f7 41 void blobConfig::addOneElasticLoopContract() {
mbedalvaro 1:a4050fee11f7 42 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 43 pBlob->createBlob(blobArray.size(), CONTRACT, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0));
mbedalvaro 1:a4050fee11f7 44 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 45 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 46
mbedalvaro 1:a4050fee11f7 47 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 48 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 49 }
mbedalvaro 0:345b3bc7a0ea 50
mbedalvaro 1:a4050fee11f7 51 void blobConfig::addOneElasticLoopContractCentral() {
mbedalvaro 1:a4050fee11f7 52 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 53 pBlob->createBlob(blobArray.size(), CONTRACT_CENTRAL, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0));
mbedalvaro 1:a4050fee11f7 54 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 55 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 56
mbedalvaro 1:a4050fee11f7 57 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 58 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 59 }
mbedalvaro 0:345b3bc7a0ea 60
mbedalvaro 19:228430f1350e 61 void blobConfig::addOneElasticLoopContractCentralFast() {
mbedalvaro 19:228430f1350e 62 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 19:228430f1350e 63 pBlob->createBlob(blobArray.size(), CONTRACT_CENTRAL_FAST, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0));
mbedalvaro 19:228430f1350e 64 // add this relaxing loop to the present config:
mbedalvaro 19:228430f1350e 65 blobArray.push_back(pBlob);
mbedalvaro 19:228430f1350e 66
mbedalvaro 19:228430f1350e 67 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 19:228430f1350e 68 numBlobs=blobArray.size();
mbedalvaro 19:228430f1350e 69 }
mbedalvaro 19:228430f1350e 70
mbedalvaro 1:a4050fee11f7 71 void blobConfig::addOneElasticContourFollowing() {
mbedalvaro 1:a4050fee11f7 72
mbedalvaro 1:a4050fee11f7 73 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 74 pBlob->createBlob(blobArray.size(), CONTOUR_FOLLOWING, vector2Df(CENTER_AD_MIRROR_X+100*blobArray.size(), CENTER_AD_MIRROR_Y+100*blobArray.size()), vector2Df(0,0));
mbedalvaro 1:a4050fee11f7 75 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 76 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 77
mbedalvaro 1:a4050fee11f7 78 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 79 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 80 }
mbedalvaro 0:345b3bc7a0ea 81
mbedalvaro 0:345b3bc7a0ea 82
mbedalvaro 1:a4050fee11f7 83 void blobConfig:: addOneElasticContourFollowingFAST() {
mbedalvaro 1:a4050fee11f7 84 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 85 pBlob->createBlob(blobArray.size(), CONTOUR_FOLLOWING_FAST, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0));
mbedalvaro 0:345b3bc7a0ea 86 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 87 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 88
mbedalvaro 1:a4050fee11f7 89 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 90 numBlobs=blobArray.size();
mbedalvaro 1:a4050fee11f7 91 }
mbedalvaro 1:a4050fee11f7 92
mbedalvaro 1:a4050fee11f7 93 void blobConfig::addOneElasticBouncing() {
mbedalvaro 1:a4050fee11f7 94 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 12:0de9cd2bced5 95 pBlob->createBlob(blobArray.size(), BOUNCING, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(1,1));
mbedalvaro 1:a4050fee11f7 96 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 97 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 98
mbedalvaro 1:a4050fee11f7 99 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 100 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 101 }
mbedalvaro 0:345b3bc7a0ea 102
mbedalvaro 1:a4050fee11f7 103 void blobConfig::addOneRigidLoopBouncing() {
mbedalvaro 1:a4050fee11f7 104 rigidLoop* pBlob= new rigidLoop();
mbedalvaro 12:0de9cd2bced5 105 pBlob->createBlob(blobArray.size(), SPOT_BOUNCING, vector2Df(CENTER_AD_MIRROR_X+100*blobArray.size(), CENTER_AD_MIRROR_Y+100*blobArray.size()), vector2Df(0,0));
mbedalvaro 0:345b3bc7a0ea 106 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 107 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 108
mbedalvaro 1:a4050fee11f7 109 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 110 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 111 }
mbedalvaro 0:345b3bc7a0ea 112
mbedalvaro 1:a4050fee11f7 113 void blobConfig::addOneRigidLoopFollowing() {
mbedalvaro 1:a4050fee11f7 114 rigidLoop* pBlob= new rigidLoop();
mbedalvaro 14:0fc33a3a7b4b 115 pBlob->createBlob(blobArray.size(), SPOT_FOLLOWING, vector2Df(CENTER_AD_MIRROR_X+100*blobArray.size(), CENTER_AD_MIRROR_Y+100*blobArray.size()), vector2Df(0,0));
mbedalvaro 1:a4050fee11f7 116 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 117 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 118
mbedalvaro 1:a4050fee11f7 119 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 120 numBlobs=blobArray.size();
mbedalvaro 1:a4050fee11f7 121 }
mbedalvaro 0:345b3bc7a0ea 122
mbedalvaro 5:73cd58b58f95 123 void blobConfig::addOneRigidLoopTest() {
mbedalvaro 5:73cd58b58f95 124 rigidLoop* pBlob= new rigidLoop();
mbedalvaro 12:0de9cd2bced5 125 pBlob->createBlob(blobArray.size(), SPOT_TEST, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0));
mbedalvaro 5:73cd58b58f95 126 // add this relaxing loop to the present config:
mbedalvaro 5:73cd58b58f95 127 blobArray.push_back(pBlob);
mbedalvaro 5:73cd58b58f95 128
mbedalvaro 5:73cd58b58f95 129 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 5:73cd58b58f95 130 numBlobs=blobArray.size();
mbedalvaro 5:73cd58b58f95 131 }
mbedalvaro 5:73cd58b58f95 132
mbedalvaro 0:345b3bc7a0ea 133
mbedalvaro 0:345b3bc7a0ea 134 // ==================================================================================================================================================
mbedalvaro 0:345b3bc7a0ea 135
mbedalvaro 0:345b3bc7a0ea 136
mbedalvaro 1:a4050fee11f7 137 void blobConfig::allKill() { // this put all the blobs in "dead" mode, meaning that neither rendering nor update is done (but they are not deleted).
mbedalvaro 1:a4050fee11f7 138 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 139 blobArray[i]->render = false;
mbedalvaro 1:a4050fee11f7 140 blobArray[i]->standByMode = false;
mbedalvaro 1:a4050fee11f7 141 }
mbedalvaro 1:a4050fee11f7 142 }
mbedalvaro 0:345b3bc7a0ea 143 void blobConfig::allAlive() {
mbedalvaro 1:a4050fee11f7 144 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 145 blobArray[i]->render = true;
mbedalvaro 1:a4050fee11f7 146 blobArray[i]->standByMode = true;
mbedalvaro 1:a4050fee11f7 147 }
mbedalvaro 1:a4050fee11f7 148 }
mbedalvaro 1:a4050fee11f7 149
mbedalvaro 0:345b3bc7a0ea 150 void blobConfig::allStandBy() {
mbedalvaro 1:a4050fee11f7 151 for (int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = true;
mbedalvaro 0:345b3bc7a0ea 152 }
mbedalvaro 0:345b3bc7a0ea 153
mbedalvaro 0:345b3bc7a0ea 154 void blobConfig::allResume() {
mbedalvaro 1:a4050fee11f7 155 for (int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = false;
mbedalvaro 0:345b3bc7a0ea 156 }
mbedalvaro 0:345b3bc7a0ea 157
mbedalvaro 1:a4050fee11f7 158 void blobConfig::allVisible() {
mbedalvaro 1:a4050fee11f7 159 for (int i=0; i<blobArray.size(); i++) blobArray[i]->render = true;
mbedalvaro 0:345b3bc7a0ea 160 }
mbedalvaro 0:345b3bc7a0ea 161
mbedalvaro 0:345b3bc7a0ea 162 void blobConfig::allInvisible() { // note that they may continue to evolve
mbedalvaro 1:a4050fee11f7 163 for (int i=0; i<blobArray.size(); i++) blobArray[i]->render = false;
mbedalvaro 0:345b3bc7a0ea 164 }
mbedalvaro 0:345b3bc7a0ea 165
mbedalvaro 1:a4050fee11f7 166 void blobConfig::update() { // update dynamics of the blob
mbedalvaro 1:a4050fee11f7 167 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 3:b44ff6de81bd 168 if (blobArray[i]->standByMode==false) blobArray[i]->update();
mbedalvaro 1:a4050fee11f7 169 }
mbedalvaro 0:345b3bc7a0ea 170 }
mbedalvaro 0:345b3bc7a0ea 171
mbedalvaro 1:a4050fee11f7 172 void blobConfig::draw() { // draw uses the opengl like renderer (if any), and save projected trajectory in the LaserSensingTrajectory object of each blob
mbedalvaro 1:a4050fee11f7 173 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 174 if (blobArray[i]->render==true) blobArray[i]->draw();
mbedalvaro 1:a4050fee11f7 175 }
mbedalvaro 0:345b3bc7a0ea 176 }
mbedalvaro 0:345b3bc7a0ea 177
mbedalvaro 1:a4050fee11f7 178 void blobConfig::sendConfData() {
mbedalvaro 1:a4050fee11f7 179 // For the time being, only "per blob" data sending:
mbedalvaro 1:a4050fee11f7 180 // (b) Per-spot sending of data (note: both are NOT exclusive; so if we want just packaged data, we need to make all the spot STOP sending data.
mbedalvaro 18:d72935b13858 181 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 182 if (blobArray[i]->render==true) blobArray[i]->sendData(); // a blob that is in stand-by mode may send data (good for testing with a fixed loop)
mbedalvaro 1:a4050fee11f7 183 }
mbedalvaro 0:345b3bc7a0ea 184 }
mbedalvaro 0:345b3bc7a0ea 185
mbedalvaro 0:345b3bc7a0ea 186
mbedalvaro 0:345b3bc7a0ea 187
mbedalvaro 0:345b3bc7a0ea 188