New project

Dependencies:   mbed TextLCD

Committer:
jasminealice
Date:
Wed Jun 13 20:50:26 2018 +0000
Revision:
23:bb57966cb776
Parent:
22:c024b20a0e2d
Child:
24:418711ed8c52
Last changes 13/6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jasminealice 0:57cbecaac770 1 #include "mbed.h"
Kwame 2:9bb410612929 2 #include "TextLCD.h"
jasminealice 18:f5824ba95892 3 #include "MCP23017.h"
jasminealice 18:f5824ba95892 4 #include "Train.h"
jasminealice 20:32ba0a5f2d02 5 #include "Switch.h"
jasminealice 20:32ba0a5f2d02 6 #include "Track.h"
jasminealice 21:31647d80614f 7 #include "Detector.h"
jasminealice 22:c024b20a0e2d 8 #include "MCP23017.h"
KwamsC 10:cda57976225f 9
jasminealice 16:55c3c5727f14 10 //Board 1
jasminealice 16:55c3c5727f14 11 /*----------------------------------------------------------------------------
jasminealice 16:55c3c5727f14 12 Pin definitions
jasminealice 16:55c3c5727f14 13 *----------------------------------------------------------------------------*/
jasminealice 17:b7b5f40cebff 14 DigitalOut Track(p20); // train track
jasminealice 17:b7b5f40cebff 15
jasminealice 23:bb57966cb776 16 DigitalOut myled1(LED1), myled2(LED2), myled3(LED3), myled4(LED4);
jasminealice 23:bb57966cb776 17 DigitalOut externalLed1(p15), externalLed2(p16), externalLed3(p17), externalLed4(p18);
KwamsC 14:a5fd98a957e6 18 TextLCD lcd(p22, p21, p23, p24, p25, p26); // lcd
KwamsC 14:a5fd98a957e6 19
jasminealice 23:bb57966cb776 20 DigitalIn sw1(p29), sw2(p30), sw3(p11), sw4(p12);
jasminealice 21:31647d80614f 21
jasminealice 16:55c3c5727f14 22 //InterruptIn sw1(p5);
jasminealice 23:bb57966cb776 23 InterruptIn int0(p13), int1(p14);
jasminealice 22:c024b20a0e2d 24 I2C i2c(p28, p27);
jasminealice 18:f5824ba95892 25 MCP23017 *mcp;
jasminealice 17:b7b5f40cebff 26
jasminealice 17:b7b5f40cebff 27 /*----------------------------------------------------------------------------
jasminealice 17:b7b5f40cebff 28 Addresses
jasminealice 17:b7b5f40cebff 29 *----------------------------------------------------------------------------*/
jasminealice 21:31647d80614f 30 const unsigned int DCCaddress_silver = 0x01;
jasminealice 21:31647d80614f 31 const unsigned int DCCaddress_red = 0x03;
jasminealice 17:b7b5f40cebff 32 const unsigned int DCCaddress_switch = 0x06;
KwamsC 14:a5fd98a957e6 33
KwamsC 14:a5fd98a957e6 34 /*----------------------------------------------------------------------------
KwamsC 14:a5fd98a957e6 35 Train movement
KwamsC 14:a5fd98a957e6 36 *----------------------------------------------------------------------------*/
KwamsC 14:a5fd98a957e6 37 //move backwards/reverse
jasminealice 21:31647d80614f 38 const unsigned int DCCinst_reverse = 0x48; //reverse speed
KwamsC 14:a5fd98a957e6 39
jasminealice 15:8d96f7a06103 40 //speed dial forward
jasminealice 21:31647d80614f 41 const unsigned int DCCinst_step2 = 0x72; //step 2
jasminealice 18:f5824ba95892 42 //const unsigned int DCCinst_step4 = 0x73; //step 4
jasminealice 18:f5824ba95892 43 //const unsigned int DCCinst_step6 = 0x68; //step 6 1/4 speed
jasminealice 16:55c3c5727f14 44 const unsigned int DCCinst_step13 = 0x78; //step 13 1/2 speed
jasminealice 18:f5824ba95892 45 //const unsigned int DCCinst_step20 = 0x75; //step 20 3/4 speed
jasminealice 18:f5824ba95892 46 //const unsigned int DCCinst_step28 = 0x7F; //step 28 Full speed
jasminealice 17:b7b5f40cebff 47 const unsigned int DCCinst_switch1 = 0x81; //Activate switch1
jasminealice 17:b7b5f40cebff 48 const unsigned int DCCinst_switch2 = 0x82; //Activate switch2
jasminealice 17:b7b5f40cebff 49 const unsigned int DCCinst_switch3 = 0x84; //Activate switch3
jasminealice 17:b7b5f40cebff 50 const unsigned int DCCinst_switch4 = 0x88; //Activate switch4
jasminealice 17:b7b5f40cebff 51 const unsigned int DCCinst_deactive_switch = 0x80; //Deactivate switches
KwamsC 14:a5fd98a957e6 52 //stop
jasminealice 16:55c3c5727f14 53 const unsigned int DCCinst_stop = 0x40; //forward and stop 01100000
KwamsC 10:cda57976225f 54
jasminealice 17:b7b5f40cebff 55 /*----------------------------------------------------------------------------
jasminealice 17:b7b5f40cebff 56 Function definitions
jasminealice 17:b7b5f40cebff 57 *----------------------------------------------------------------------------*/
jasminealice 17:b7b5f40cebff 58 bool readSwitch(DigitalIn theSwitch);
jasminealice 23:bb57966cb776 59 int convertHextoDec(int pos, int intnr);
jasminealice 23:bb57966cb776 60 bool checkDetector(int inter);
jasminealice 22:c024b20a0e2d 61 void init_mcp();
jasminealice 23:bb57966cb776 62 void init_interrupt();
jasminealice 23:bb57966cb776 63 Train& assignTrain(int pos);
KwamsC 10:cda57976225f 64
jasminealice 21:31647d80614f 65 //Trains
jasminealice 23:bb57966cb776 66 Train redTrain(DCCaddress_red, DCCinst_step13, 12);
jasminealice 23:bb57966cb776 67 Train silverTrain(DCCaddress_silver,DCCinst_step13, 2);
jasminealice 21:31647d80614f 68 //Switches
jasminealice 21:31647d80614f 69 Switch switch1(DCCaddress_switch,DCCinst_switch1);
jasminealice 21:31647d80614f 70 //Switch switch2(DCCaddress_switch,DCCinst_switch2);
jasminealice 21:31647d80614f 71 Switch switch3(DCCaddress_switch,DCCinst_switch3);
jasminealice 21:31647d80614f 72 Switch switch4(DCCaddress_switch,DCCinst_switch4);
jasminealice 21:31647d80614f 73 //Detectors
jasminealice 23:bb57966cb776 74 Detector dect(false);
jasminealice 21:31647d80614f 75
jasminealice 23:bb57966cb776 76 // Detectors address
jasminealice 23:bb57966cb776 77 /*
jasminealice 23:bb57966cb776 78 d0 = 0xfe //254
jasminealice 23:bb57966cb776 79 d1 = 0xfd //253
jasminealice 23:bb57966cb776 80 d2 = fb //251
jasminealice 23:bb57966cb776 81 d3 = f7 //247
jasminealice 23:bb57966cb776 82 d4 = ef //239
jasminealice 23:bb57966cb776 83 d5 = df //223
jasminealice 23:bb57966cb776 84 d6 = bf //191
jasminealice 23:bb57966cb776 85 d7 = 7f //255
jasminealice 23:bb57966cb776 86 d8 = 0xfe //254
jasminealice 23:bb57966cb776 87 d9 = fd
jasminealice 23:bb57966cb776 88 d10 = fb
jasminealice 23:bb57966cb776 89 d11 = f7
jasminealice 23:bb57966cb776 90 d12 = ef
jasminealice 23:bb57966cb776 91 d13 = df
jasminealice 23:bb57966cb776 92 */
jasminealice 16:55c3c5727f14 93 /*----------------------------------------------------------------------------
jasminealice 16:55c3c5727f14 94 Main
jasminealice 16:55c3c5727f14 95 *----------------------------------------------------------------------------*/
jasminealice 16:55c3c5727f14 96 int main() {
jasminealice 22:c024b20a0e2d 97 lcd.printf("Start journey");
jasminealice 22:c024b20a0e2d 98 init_mcp();
jasminealice 23:bb57966cb776 99 init_interrupt();
jasminealice 23:bb57966cb776 100
jasminealice 23:bb57966cb776 101
jasminealice 23:bb57966cb776 102 vector<int> res;
jasminealice 23:bb57966cb776 103 res.push_back(2);
jasminealice 23:bb57966cb776 104 res.push_back(4);
jasminealice 21:31647d80614f 105 dect.reserveDetector(res); //Run trains counterclockwise and reserve the
jasminealice 23:bb57966cb776 106 vector<int> res2;
jasminealice 23:bb57966cb776 107 res2.push_back(12);
jasminealice 23:bb57966cb776 108 res2.push_back(6);
jasminealice 21:31647d80614f 109 dect.reserveDetector(res2);//detectors in front
jasminealice 23:bb57966cb776 110 redTrain.Stop();
jasminealice 23:bb57966cb776 111 silverTrain.Stop();
jasminealice 23:bb57966cb776 112
jasminealice 21:31647d80614f 113 while(1){
jasminealice 23:bb57966cb776 114 redTrain.sendCommand();
jasminealice 23:bb57966cb776 115 silverTrain.sendCommand();
jasminealice 23:bb57966cb776 116 /*if(readSwitch(sw1)){ //Control switches
jasminealice 23:bb57966cb776 117 switch1.switchOn();
jasminealice 20:32ba0a5f2d02 118 lcd.printf("Switch 1 on");
jasminealice 20:32ba0a5f2d02 119 //switch2.switchOn(); // Need to turn it off immediately!!!
jasminealice 20:32ba0a5f2d02 120 switch3.switchOn();
jasminealice 23:bb57966cb776 121 switch4.switchOn();
jasminealice 22:c024b20a0e2d 122
jasminealice 20:32ba0a5f2d02 123
jasminealice 23:bb57966cb776 124 }*/
jasminealice 22:c024b20a0e2d 125 /*else{
jasminealice 20:32ba0a5f2d02 126 //DCC_send_command(DCCaddress_switch,DCCinst_deactive_switch,10);
jasminealice 20:32ba0a5f2d02 127 switch1.switchOff();
jasminealice 20:32ba0a5f2d02 128 //switch2.switchOff();
jasminealice 20:32ba0a5f2d02 129 switch3.switchOff();
jasminealice 20:32ba0a5f2d02 130 switch4.switchOff();
jasminealice 20:32ba0a5f2d02 131 lcd.printf("Switch 1 off");
jasminealice 20:32ba0a5f2d02 132
jasminealice 23:bb57966cb776 133 }*/
jasminealice 20:32ba0a5f2d02 134
jasminealice 23:bb57966cb776 135 /*if(readSwitch(sw2)){ //run train
jasminealice 21:31647d80614f 136 redTrain.goForward();
jasminealice 21:31647d80614f 137 silverTrain.goForward();
jasminealice 20:32ba0a5f2d02 138 }
jasminealice 20:32ba0a5f2d02 139 else
jasminealice 20:32ba0a5f2d02 140 {
jasminealice 21:31647d80614f 141 redTrain.Stop();
jasminealice 21:31647d80614f 142 silverTrain.Stop();
jasminealice 23:bb57966cb776 143 }*/
jasminealice 21:31647d80614f 144 if(!readSwitch(sw3)){ //Change speed
jasminealice 23:bb57966cb776 145 lcd.printf("Go forward");
jasminealice 23:bb57966cb776 146 redTrain.changeSpeed(DCCinst_step13);
jasminealice 23:bb57966cb776 147 silverTrain.changeSpeed(DCCinst_step13);
jasminealice 21:31647d80614f 148
jasminealice 22:c024b20a0e2d 149 }
jasminealice 23:bb57966cb776 150
jasminealice 23:bb57966cb776 151 //TODO: Check if train is not moving and then call function checkdetector
jasminealice 23:bb57966cb776 152
jasminealice 22:c024b20a0e2d 153 }
jasminealice 16:55c3c5727f14 154 }
KwamsC 10:cda57976225f 155
KwamsC 14:a5fd98a957e6 156 /*----------------------------------------------------------------------------
KwamsC 14:a5fd98a957e6 157 Functions
KwamsC 14:a5fd98a957e6 158 *----------------------------------------------------------------------------*/
jasminealice 23:bb57966cb776 159 int convertHextoDec(int pos, int intnr){
jasminealice 23:bb57966cb776 160 int newPos;
jasminealice 23:bb57966cb776 161 switch(pos){
jasminealice 23:bb57966cb776 162 case 0xfe:
jasminealice 23:bb57966cb776 163 newPos = 0;
jasminealice 23:bb57966cb776 164 break;
jasminealice 23:bb57966cb776 165 case 0xfd:
jasminealice 23:bb57966cb776 166 newPos = 1;
jasminealice 23:bb57966cb776 167 break;
jasminealice 23:bb57966cb776 168 case 0xfb:
jasminealice 23:bb57966cb776 169 newPos = 2;
jasminealice 23:bb57966cb776 170 break;
jasminealice 23:bb57966cb776 171 case 0xf7:
jasminealice 23:bb57966cb776 172 newPos = 3;
jasminealice 23:bb57966cb776 173 break;
jasminealice 23:bb57966cb776 174 case 0xef:
jasminealice 23:bb57966cb776 175 newPos = 4;
jasminealice 23:bb57966cb776 176 break;
jasminealice 23:bb57966cb776 177 case 0xdf:
jasminealice 23:bb57966cb776 178 newPos = 5;
jasminealice 23:bb57966cb776 179 break;
jasminealice 23:bb57966cb776 180 case 0xbf:
jasminealice 23:bb57966cb776 181 newPos = 6;
jasminealice 23:bb57966cb776 182 break;
jasminealice 23:bb57966cb776 183 case 0x7f:
jasminealice 23:bb57966cb776 184 newPos = 7;
jasminealice 23:bb57966cb776 185 break;
jasminealice 23:bb57966cb776 186 default:
jasminealice 23:bb57966cb776 187 return -1;
jasminealice 23:bb57966cb776 188 }
jasminealice 23:bb57966cb776 189
jasminealice 23:bb57966cb776 190 if(intnr == 1)
jasminealice 23:bb57966cb776 191 newPos += 8;
jasminealice 23:bb57966cb776 192 return newPos;
jasminealice 23:bb57966cb776 193 }
jasminealice 21:31647d80614f 194
jasminealice 23:bb57966cb776 195 Train& assignTrain(int pos){
jasminealice 23:bb57966cb776 196
jasminealice 21:31647d80614f 197 //Check which train got the interupt
jasminealice 21:31647d80614f 198 if(redTrain.checkInterupt(pos)){
jasminealice 21:31647d80614f 199 redTrain.setPosition(pos);
jasminealice 23:bb57966cb776 200 //lcd.cls();
jasminealice 23:bb57966cb776 201 //lcd.printf("Red train!");
jasminealice 23:bb57966cb776 202 return redTrain;
jasminealice 21:31647d80614f 203 }
jasminealice 21:31647d80614f 204 else if(silverTrain.checkInterupt(pos)){
jasminealice 21:31647d80614f 205 silverTrain.setPosition(pos);
jasminealice 23:bb57966cb776 206 //lcd.cls();
jasminealice 23:bb57966cb776 207 //lcd.printf("Silver train!");
jasminealice 23:bb57966cb776 208 return silverTrain;
jasminealice 21:31647d80614f 209 }
jasminealice 23:bb57966cb776 210
jasminealice 23:bb57966cb776 211 }
jasminealice 23:bb57966cb776 212
jasminealice 23:bb57966cb776 213 bool checkDetector(int inter){
jasminealice 23:bb57966cb776 214 lcd.cls();
jasminealice 23:bb57966cb776 215 int pos;
jasminealice 23:bb57966cb776 216 wait_us(100);
jasminealice 23:bb57966cb776 217 if (inter == 0){
jasminealice 23:bb57966cb776 218 //Read from first one
jasminealice 23:bb57966cb776 219 pos = mcp->_read(INTCAPA);
jasminealice 23:bb57966cb776 220 pos = convertHextoDec(pos, 0);
jasminealice 21:31647d80614f 221 }
jasminealice 23:bb57966cb776 222 else if (inter == 1){
jasminealice 23:bb57966cb776 223 //Read from second one
jasminealice 23:bb57966cb776 224 pos = mcp->_read(INTCAPB);
jasminealice 23:bb57966cb776 225 pos = convertHextoDec(pos, 1);
jasminealice 23:bb57966cb776 226 }
jasminealice 23:bb57966cb776 227 else
jasminealice 23:bb57966cb776 228 //PROBLEM
jasminealice 23:bb57966cb776 229 lcd.printf("Fail to detect int");
jasminealice 23:bb57966cb776 230
jasminealice 23:bb57966cb776 231 Train currTrain = assignTrain(pos);
jasminealice 21:31647d80614f 232
jasminealice 21:31647d80614f 233 switch(pos){
jasminealice 21:31647d80614f 234 case 0:
jasminealice 21:31647d80614f 235 case 1:
jasminealice 22:c024b20a0e2d 236 //Slow down
jasminealice 21:31647d80614f 237 case 2:
jasminealice 21:31647d80614f 238 //IF Clock 2->1
jasminealice 21:31647d80614f 239 //Disable Switch2
jasminealice 21:31647d80614f 240 //Free 3,4,9
jasminealice 21:31647d80614f 241 //Move forward
jasminealice 21:31647d80614f 242 //IF CC
jasminealice 21:31647d80614f 243 //Check if 4 or 3 is reserved
jasminealice 21:31647d80614f 244 //IF NOT randomize which way to go
jasminealice 21:31647d80614f 245 //0.3 chance to enable the switch2, reserve 3,9 and go
jasminealice 21:31647d80614f 246 //0.7 chance to disable switch2, reserve 4 and go
jasminealice 21:31647d80614f 247 //IF 4 is reserved
jasminealice 21:31647d80614f 248 //Enable switch2, reserve 3,9 and go
jasminealice 21:31647d80614f 249 //IF 3 reserved
jasminealice 21:31647d80614f 250 //Disable switch2, reserve 4 and go
jasminealice 21:31647d80614f 251 case 3:
jasminealice 21:31647d80614f 252 //Clock: Goes from 3 to 2
jasminealice 21:31647d80614f 253 //Enable switch2
jasminealice 21:31647d80614f 254 //Reserve 0,1,2, 12, 13
jasminealice 21:31647d80614f 255 //Go forward
jasminealice 21:31647d80614f 256 //Other Clock: Goes from 3->9
jasminealice 21:31647d80614f 257 //disable switch2
jasminealice 21:31647d80614f 258 //free 0,1,2,12,13
jasminealice 21:31647d80614f 259 //Go forward
jasminealice 21:31647d80614f 260 case 4:
jasminealice 23:bb57966cb776 261 lcd.printf("At 4");
jasminealice 23:bb57966cb776 262 if(currTrain.isClockwise()) //IF Clock goes towards 2
jasminealice 23:bb57966cb776 263 {
jasminealice 23:bb57966cb776 264 int arr [4] = {5,6,7,8};
jasminealice 23:bb57966cb776 265 vector<int> detectors(arr, arr + sizeof(arr) / sizeof(int));
jasminealice 23:bb57966cb776 266 dect.clearReservation(detectors); //free nr 5,6, 7, 8
jasminealice 23:bb57966cb776 267 //switch2.switchOff(); //Turn of switch2
jasminealice 23:bb57966cb776 268 if(dect.checkReservation(2)){ //Check if 2 is reserved
jasminealice 23:bb57966cb776 269 currTrain.Stop(); //IF yes STOP
jasminealice 23:bb57966cb776 270 }
jasminealice 23:bb57966cb776 271 else{
jasminealice 23:bb57966cb776 272 int arr [5] = {0,1,2,12,13};//else reserve 12,13,0,1,2
jasminealice 23:bb57966cb776 273 vector<int> detectors(arr, arr + sizeof(arr) / sizeof(int));
jasminealice 23:bb57966cb776 274 dect.reserveDetector(detectors);
jasminealice 23:bb57966cb776 275 currTrain.changeSpeed(DCCinst_step13); //go forward
jasminealice 23:bb57966cb776 276 }
jasminealice 23:bb57966cb776 277 }
jasminealice 23:bb57966cb776 278 else{ //IF CC :goes towards 6
jasminealice 23:bb57966cb776 279 int arr [5] = {0,1,2,12,13};
jasminealice 23:bb57966cb776 280 vector<int> detectors(arr, arr + sizeof(arr) / sizeof(int));
jasminealice 23:bb57966cb776 281 dect.clearReservation(detectors); //free nr 0,1,2,12,13
jasminealice 23:bb57966cb776 282 switch3.switchOn(); //Turn on switch3
jasminealice 23:bb57966cb776 283
jasminealice 23:bb57966cb776 284 if(dect.checkReservation(6)){ //Check if 6 is reserved
jasminealice 23:bb57966cb776 285 lcd.printf("stop");
jasminealice 23:bb57966cb776 286 currTrain.Stop(); //IF yes STOP
jasminealice 23:bb57966cb776 287 lcd.cls();
jasminealice 23:bb57966cb776 288 lcd.printf("Currtrain: ");
jasminealice 23:bb57966cb776 289 lcd.printf("%d", currTrain.getSpeed());
jasminealice 23:bb57966cb776 290 lcd.printf("\n Redtrain: ");
jasminealice 23:bb57966cb776 291 lcd.printf("%d", redTrain.getSpeed());
jasminealice 23:bb57966cb776 292
jasminealice 23:bb57966cb776 293 }
jasminealice 23:bb57966cb776 294 else{
jasminealice 23:bb57966cb776 295 int arr [3] = {6,7,8};
jasminealice 23:bb57966cb776 296 vector<int> detectors(arr, arr + sizeof(arr) / sizeof(int));
jasminealice 23:bb57966cb776 297 dect.reserveDetector(detectors); //else reserve 6,7,8 and go forward
jasminealice 23:bb57966cb776 298 currTrain.changeSpeed(DCCinst_step13);
jasminealice 23:bb57966cb776 299 }
jasminealice 23:bb57966cb776 300
jasminealice 23:bb57966cb776 301 }
jasminealice 23:bb57966cb776 302 break;
jasminealice 21:31647d80614f 303 case 5:
jasminealice 21:31647d80614f 304 //Clock: Goes from 5->6
jasminealice 21:31647d80614f 305 //Enable switch3
jasminealice 21:31647d80614f 306 //Reserve 6,7,8
jasminealice 21:31647d80614f 307 //Go forward
jasminealice 21:31647d80614f 308 //Other Clock: Goes from 5->11
jasminealice 21:31647d80614f 309 //disable switch3
jasminealice 21:31647d80614f 310 //free 6,7,8
jasminealice 21:31647d80614f 311 //Go forward
jasminealice 21:31647d80614f 312 case 6:
jasminealice 21:31647d80614f 313 //IF CC
jasminealice 21:31647d80614f 314 //Disable switch3
jasminealice 21:31647d80614f 315 //Free 4,5,11
jasminealice 21:31647d80614f 316 //Move forward
jasminealice 21:31647d80614f 317 //IF Clock
jasminealice 21:31647d80614f 318 //Check if 4 or 5 is reserved
jasminealice 21:31647d80614f 319 //IF NOT randomize which way to go
jasminealice 21:31647d80614f 320 //0.3 chance to enable the switch3, reserve 5,11 and go
jasminealice 21:31647d80614f 321 //0.7 chance to disable switch3, reserve 4 and go
jasminealice 21:31647d80614f 322 //IF 4 is reserved
jasminealice 21:31647d80614f 323 //Enable switch3, reserve 5,11 and go
jasminealice 21:31647d80614f 324 //IF 5 reserved
jasminealice 21:31647d80614f 325 //Disable switch3, reserve 4 and go
jasminealice 21:31647d80614f 326
jasminealice 21:31647d80614f 327
jasminealice 21:31647d80614f 328 case 7:
jasminealice 21:31647d80614f 329 case 8:
jasminealice 21:31647d80614f 330 //IF Clock 8->7
jasminealice 21:31647d80614f 331 //Disable switch4
jasminealice 21:31647d80614f 332 //Free 3,9,10
jasminealice 21:31647d80614f 333 //Move forward
jasminealice 21:31647d80614f 334 //IF CC
jasminealice 21:31647d80614f 335 //Check if 9 or 10 is reserved
jasminealice 21:31647d80614f 336 //IF NOT randomize which way to go
jasminealice 21:31647d80614f 337 //0.3 chance to enable the switch4, reserve 3,9 and go
jasminealice 21:31647d80614f 338 //0.7 chance to disable switch4, reserve 10 and go
jasminealice 21:31647d80614f 339 //IF 10 is reserved
jasminealice 21:31647d80614f 340 //Enable switch4, reserve 3,9 and go
jasminealice 21:31647d80614f 341 //IF 9 reserved
jasminealice 21:31647d80614f 342 //Disable switch4, reserve 10 and go
jasminealice 21:31647d80614f 343 case 9:
jasminealice 21:31647d80614f 344 //Clock: Goes from 9 to 8
jasminealice 21:31647d80614f 345 //Enable switch4
jasminealice 21:31647d80614f 346 //Reserve 6,7,8
jasminealice 21:31647d80614f 347 //Go forward
jasminealice 21:31647d80614f 348 //Other Clock: Goes from 9->3
jasminealice 21:31647d80614f 349 //disable switch4
jasminealice 21:31647d80614f 350 //free 6,7,8
jasminealice 21:31647d80614f 351 //Go forward
jasminealice 21:31647d80614f 352 case 10:
jasminealice 21:31647d80614f 353 //IF CC
jasminealice 21:31647d80614f 354 //free nr 6,7,8,9
jasminealice 21:31647d80614f 355 //Turn off switch1
jasminealice 21:31647d80614f 356 //Check if 12 is reserved
jasminealice 21:31647d80614f 357 //IF yes STOP
jasminealice 21:31647d80614f 358 //else reserve 12,13,0,1,2 and go forward
jasminealice 21:31647d80614f 359 //IF Clock
jasminealice 21:31647d80614f 360 //Free nr 0,1,2,11, 12, 13
jasminealice 21:31647d80614f 361 //Turn off switch4
jasminealice 21:31647d80614f 362 //Check if 8 is reserved
jasminealice 21:31647d80614f 363 //IF yes STOP
jasminealice 21:31647d80614f 364 //else reserve 6,7,8 go forward
jasminealice 21:31647d80614f 365 case 11:
jasminealice 21:31647d80614f 366 //Clock: Goes from 11 to 12
jasminealice 21:31647d80614f 367 //Enable switch1
jasminealice 21:31647d80614f 368 //Reserve 0,1,2, 12, 13
jasminealice 21:31647d80614f 369 //Go forward
jasminealice 21:31647d80614f 370 //Other Clock: Goes from 11->5
jasminealice 21:31647d80614f 371 //disable switch1
jasminealice 21:31647d80614f 372 //free 0,1,2,12,13
jasminealice 21:31647d80614f 373 //Go forward
jasminealice 21:31647d80614f 374 case 12:
jasminealice 21:31647d80614f 375 //IF CC: 12->13
jasminealice 21:31647d80614f 376 //Disable switch1
jasminealice 21:31647d80614f 377 //Free 5,10,11
jasminealice 21:31647d80614f 378 //Move forward
jasminealice 21:31647d80614f 379 //IF Clock
jasminealice 21:31647d80614f 380 //Check if 11 or 10 is reserved
jasminealice 21:31647d80614f 381 //IF NOT randomize which way to go
jasminealice 21:31647d80614f 382 //0.3 chance to enable switch1, reserve 5,11 and go
jasminealice 21:31647d80614f 383 //0.7 chance to disable switch1, reserve 10 and go
jasminealice 21:31647d80614f 384 //IF 10 is reserved
jasminealice 21:31647d80614f 385 //Enable switch1, reserve 5,11 and go
jasminealice 21:31647d80614f 386 //IF 11 reserved
jasminealice 21:31647d80614f 387 //Disable switch1,reserve 10 and go
jasminealice 21:31647d80614f 388 case 13:
jasminealice 21:31647d80614f 389
jasminealice 23:bb57966cb776 390 //lcd.printf("In case ");
jasminealice 23:bb57966cb776 391 //lcd.printf("%d", pos);
jasminealice 21:31647d80614f 392 break;
jasminealice 21:31647d80614f 393 default:
jasminealice 21:31647d80614f 394 lcd.printf("Not in a valid case");
jasminealice 21:31647d80614f 395 break;
jasminealice 21:31647d80614f 396 }
jasminealice 21:31647d80614f 397
jasminealice 23:bb57966cb776 398 mcp->_read(GPIOA);
jasminealice 23:bb57966cb776 399 mcp->_read(GPIOB);
jasminealice 21:31647d80614f 400 return true;
jasminealice 15:8d96f7a06103 401 }
jasminealice 15:8d96f7a06103 402
jasminealice 17:b7b5f40cebff 403 bool readSwitch(DigitalIn theSwitch){
jasminealice 17:b7b5f40cebff 404 int val = theSwitch.read();
jasminealice 22:c024b20a0e2d 405 //lcd.printf("%d", val);
jasminealice 16:55c3c5727f14 406 if(val == 1)
jasminealice 16:55c3c5727f14 407 return true;
jasminealice 16:55c3c5727f14 408 else
jasminealice 16:55c3c5727f14 409 return false;
tanjinamicky 13:78a2481fd65b 410 }
tanjinamicky 13:78a2481fd65b 411
jasminealice 22:c024b20a0e2d 412 void init_mcp() {
jasminealice 22:c024b20a0e2d 413 // Initialisation of MCP registers,documentation on registers is availableatNiels/Jacco/Natalia
jasminealice 22:c024b20a0e2d 414 mcp = new MCP23017(i2c, 0x40);
jasminealice 22:c024b20a0e2d 415 mcp->_write(IODIRA, (unsigned char )0xff);
jasminealice 22:c024b20a0e2d 416 mcp->_write(IODIRB, (unsigned char )0xff);
jasminealice 22:c024b20a0e2d 417 mcp->_write(IPOLA, (unsigned char )0x00);
jasminealice 22:c024b20a0e2d 418 mcp->_write(IPOLB, (unsigned char )0x00);
jasminealice 22:c024b20a0e2d 419 mcp->_write(DEFVALA, (unsigned char )0xff);
jasminealice 22:c024b20a0e2d 420 mcp->_write(DEFVALB, (unsigned char )0xff);
jasminealice 22:c024b20a0e2d 421 mcp->_write(INTCONA, (unsigned char )0xff);
jasminealice 22:c024b20a0e2d 422 mcp->_write(INTCONB, (unsigned char )0xff);
jasminealice 22:c024b20a0e2d 423 mcp->_write(IOCONA, (unsigned char )0x2);
jasminealice 22:c024b20a0e2d 424 mcp->_write(IOCONB, (unsigned char )0x2);
jasminealice 22:c024b20a0e2d 425 mcp->_write(GPPUA, (unsigned char )0xff);
jasminealice 22:c024b20a0e2d 426 mcp->_write(GPPUB, (unsigned char )0xff);
jasminealice 18:f5824ba95892 427 }
jasminealice 23:bb57966cb776 428 void passZero(){
jasminealice 23:bb57966cb776 429 checkDetector(0);
jasminealice 23:bb57966cb776 430 }
jasminealice 22:c024b20a0e2d 431
jasminealice 23:bb57966cb776 432 void passOne(){
jasminealice 23:bb57966cb776 433 checkDetector(1);
jasminealice 23:bb57966cb776 434 }
jasminealice 23:bb57966cb776 435
jasminealice 23:bb57966cb776 436 void init_interrupt() {
jasminealice 22:c024b20a0e2d 437 // Clear current interrupts
jasminealice 22:c024b20a0e2d 438 mcp->_read(GPIOA);
jasminealice 22:c024b20a0e2d 439 mcp->_read(GPIOB);
jasminealice 22:c024b20a0e2d 440 // Register callbacks
jasminealice 23:bb57966cb776 441 int0.fall(&passZero);
jasminealice 23:bb57966cb776 442 int1.fall(&passOne);
jasminealice 22:c024b20a0e2d 443 // Enable interrupts on MCP
jasminealice 22:c024b20a0e2d 444 mcp->_write(GPINTENA, (unsigned char )0xff);
jasminealice 22:c024b20a0e2d 445 mcp->_write(GPINTENB, (unsigned char )0xff);// Ready to go!
jasminealice 22:c024b20a0e2d 446 }