The MBED firmware used on the Chipin sorter, developed over 12 weeks for a 3rd year university systems project. Chipin is a token sorter, it sorts tokens by colours and dispenses them to order through an online booking system and card reader. This program interfaces with an FPGA, PC and LCD screen to control the sorter. The sorter has an operation mode where it can process orders when a card is entered into the machine. There is also a maintenance mode where the device responds to maintenance instructions such as 'dispense all'. More information at http://www.ionsystems.uk/

Dependencies:   MCP23017 TCS3472_I2C WattBob_TextLCD mbed-rtos mbed

Committer:
IonSystems
Date:
Wed Dec 03 17:49:41 2014 +0000
Revision:
24:8868101d01d0
Parent:
23:f9e7e64784be
Child:
27:47a7bc902587
Commented the .h files from top to bottom, got half way through FPGAcomms

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IonSystems 12:814a8fdbb6f7 1 bool operationMode = true; //the MBED starts in operation mode.
IonSystems 23:f9e7e64784be 2
IonSystems 23:f9e7e64784be 3
IonSystems 0:8d54ffcf256e 4 #include "mbed.h"
IonSystems 23:f9e7e64784be 5 Serial pc(USBTX, USBRX);
IonSystems 24:8868101d01d0 6 Serial glcd(p13, p14);
IonSystems 23:f9e7e64784be 7 #include "rtos.h"
IonSystems 15:0c5f20e15b6a 8 #include "Language.h"
IonSystems 15:0c5f20e15b6a 9 DigitalIn languageButton(p30);
IonSystems 15:0c5f20e15b6a 10 Language currentLanguage = ENGLISH;
IonSystems 6:e64796f1f384 11 #include <sstream>
IonSystems 12:814a8fdbb6f7 12 #include <string>
IonSystems 6:e64796f1f384 13 #include "mbedStorage.h"
IonSystems 6:e64796f1f384 14 #include "mbedLCD.h"
IonSystems 7:6ba00694f9cd 15 #include "stateMachine.h"
IonSystems 8:b7771391adc9 16 #include "FPGAcomms.h"
IonSystems 10:8c0696b99692 17 #ifndef serialComm
IonSystems 10:8c0696b99692 18 #define serialComm
IonSystems 10:8c0696b99692 19 #include "serialCommunication.h"
IonSystems 10:8c0696b99692 20 #endif
IonSystems 23:f9e7e64784be 21
IonSystems 23:f9e7e64784be 22
IonSystems 23:f9e7e64784be 23 DigitalOut led1(LED1);
IonSystems 23:f9e7e64784be 24 DigitalOut led2(LED2);
IonSystems 23:f9e7e64784be 25 DigitalOut led3(LED3);
IonSystems 23:f9e7e64784be 26 DigitalOut led4(LED4);
IonSystems 5:644bca33c1ca 27
IonSystems 7:6ba00694f9cd 28 StateMachine stateMachine;
IonSystems 7:6ba00694f9cd 29
IonSystems 6:e64796f1f384 30 //Boolean values to easily enable and disable certain features for individual testing
IonSystems 6:e64796f1f384 31 bool colourSensor = true;
IonSystems 6:e64796f1f384 32 bool cardReader = true;
IonSystems 6:e64796f1f384 33 bool sorter = true;
IonSystems 6:e64796f1f384 34 bool dispensor = true;
IonSystems 10:8c0696b99692 35 bool testFunctions = true;
IonSystems 10:8c0696b99692 36 bool serialComms = true;
IonSystems 6:e64796f1f384 37
IonSystems 24:8868101d01d0 38 int mode = 0;
IonSystems 18:12e2c82a5a6c 39 int maintenanceModeSelect = 0;
IonSystems 12:814a8fdbb6f7 40
IonSystems 24:8868101d01d0 41
IonSystems 10:8c0696b99692 42
IonSystems 23:f9e7e64784be 43 bool buttonPressed(int buttonNumber)
IonSystems 23:f9e7e64784be 44 {
IonSystems 23:f9e7e64784be 45 if(buttonNumber > -1 && buttonNumber < 4) {
IonSystems 18:12e2c82a5a6c 46 return par_port->read_bit(buttonNumber + 8);
IonSystems 18:12e2c82a5a6c 47 }
IonSystems 18:12e2c82a5a6c 48 return false;
IonSystems 18:12e2c82a5a6c 49 }
IonSystems 23:f9e7e64784be 50
IonSystems 23:f9e7e64784be 51 void checkSortDispenseButtons()
IonSystems 23:f9e7e64784be 52 {
IonSystems 23:f9e7e64784be 53
IonSystems 23:f9e7e64784be 54 if(buttonPressed(3)) {
IonSystems 24:8868101d01d0 55 mode = !mode;
IonSystems 23:f9e7e64784be 56 }
IonSystems 23:f9e7e64784be 57
IonSystems 23:f9e7e64784be 58 /*
IonSystems 23:f9e7e64784be 59 if(mode == 0) { //Dispense Mode
IonSystems 11:06f6e82b40a8 60 printLCD("Dispense Mode");
IonSystems 22:8f11d1c178ab 61 operationMode=false;
IonSystems 23:f9e7e64784be 62 if(buttonPressed(0)) {
IonSystems 19:78d4b78fa736 63 printLCD("Red Button pressed");
IonSystems 18:12e2c82a5a6c 64 dispense(RED);
IonSystems 23:f9e7e64784be 65 } else if(buttonPressed(1)) {
IonSystems 19:78d4b78fa736 66 printLCD("Green Button pressed");
IonSystems 18:12e2c82a5a6c 67 dispense(GREEN);
IonSystems 23:f9e7e64784be 68 } else if(buttonPressed(2)) {
IonSystems 19:78d4b78fa736 69 printLCD("Blue Button pressed");
IonSystems 18:12e2c82a5a6c 70 dispense(BLUE);
IonSystems 10:8c0696b99692 71 }
IonSystems 23:f9e7e64784be 72
IonSystems 23:f9e7e64784be 73 } *//*else if(mode == 1) { //Sort Mode
IonSystems 24:8868101d01d0 74 printLCD("Sort Mode");
IonSystems 24:8868101d01d0 75 operationMode=false;
IonSystems 24:8868101d01d0 76 if(buttonPressed(0)) {
IonSystems 24:8868101d01d0 77 log("Red Button pressed");
IonSystems 24:8868101d01d0 78 sort(RED);
IonSystems 24:8868101d01d0 79 } else if(buttonPressed(1)) {
IonSystems 24:8868101d01d0 80 log("Green Button pressed");
IonSystems 24:8868101d01d0 81 sort(GREEN);
IonSystems 24:8868101d01d0 82 } else if(buttonPressed(2)) {
IonSystems 24:8868101d01d0 83 log("Blue Button pressed");
IonSystems 24:8868101d01d0 84 sort(BLUE);
IonSystems 24:8868101d01d0 85 }
IonSystems 23:f9e7e64784be 86
IonSystems 24:8868101d01d0 87 }*//* else if(mode == 2) { //Bin/Recycle Mode
IonSystems 24:8868101d01d0 88 printLCD("Bin/Recycle Mode");
IonSystems 24:8868101d01d0 89 operationMode=false;
IonSystems 24:8868101d01d0 90 if(buttonPressed(0)) {
IonSystems 24:8868101d01d0 91 log("Bin button pressed");
IonSystems 24:8868101d01d0 92 sort(BIN);
IonSystems 24:8868101d01d0 93 } else if(buttonPressed(1)) {
IonSystems 24:8868101d01d0 94 log("Recycle Button");
IonSystems 24:8868101d01d0 95 recycle();
IonSystems 24:8868101d01d0 96 }
IonSystems 24:8868101d01d0 97 } */
IonSystems 23:f9e7e64784be 98 /*else if(mode == 4) { //Card Reader Mode
IonSystems 23:f9e7e64784be 99 operationMode= true;
IonSystems 23:f9e7e64784be 100 if(cardReader && cardDetect) {
IonSystems 23:f9e7e64784be 101 cardAcquisition();
IonSystems 23:f9e7e64784be 102
IonSystems 23:f9e7e64784be 103 }*/
IonSystems 24:8868101d01d0 104 if(mode == 0) { //Storage Mode
IonSystems 23:f9e7e64784be 105 operationMode=true;
IonSystems 23:f9e7e64784be 106 stringstream ss;
IonSystems 24:8868101d01d0 107 ss << "Operation: " << "R:" << redAmount << "G:" << greenAmount << "B:" << blueAmount << "RE:" << recycleAmount;
IonSystems 23:f9e7e64784be 108 string tmp = ss.str();
IonSystems 23:f9e7e64784be 109 printLCD(tmp.c_str());
IonSystems 23:f9e7e64784be 110 wait(0.1);
IonSystems 23:f9e7e64784be 111 if(buttonPressed(0)) {
IonSystems 24:8868101d01d0 112 //log("Dispense all button pressed");
IonSystems 23:f9e7e64784be 113 dispenseAll();
IonSystems 23:f9e7e64784be 114 } else if(buttonPressed(1)) {
IonSystems 24:8868101d01d0 115 //log("Clear stored numbers button pressed");
IonSystems 23:f9e7e64784be 116 writeFile(0,0,0,recycleAmount);
IonSystems 23:f9e7e64784be 117 redAmount = 0;
IonSystems 23:f9e7e64784be 118 greenAmount = 0;
IonSystems 23:f9e7e64784be 119 blueAmount = 0;
IonSystems 23:f9e7e64784be 120 printLCD("Cleared values");
IonSystems 23:f9e7e64784be 121
IonSystems 23:f9e7e64784be 122 } else if(buttonPressed(2)) {
IonSystems 24:8868101d01d0 123 //log("Increment all stored values by 2.");
IonSystems 23:f9e7e64784be 124 redAmount += 2;
IonSystems 23:f9e7e64784be 125 greenAmount += 2;
IonSystems 23:f9e7e64784be 126 blueAmount += 2;
IonSystems 23:f9e7e64784be 127 writeFile(redAmount,greenAmount,blueAmount,recycleAmount);
IonSystems 23:f9e7e64784be 128
IonSystems 23:f9e7e64784be 129 printLCD("set values to 2");
IonSystems 23:f9e7e64784be 130
IonSystems 23:f9e7e64784be 131 }
IonSystems 24:8868101d01d0 132 } else if(mode == 1) {
IonSystems 22:8f11d1c178ab 133 operationMode = false;
IonSystems 18:12e2c82a5a6c 134 stringstream ss;
IonSystems 18:12e2c82a5a6c 135 ss << maintenanceModeSelect;
IonSystems 18:12e2c82a5a6c 136 string mainModeSelect = ss.str();
IonSystems 23:f9e7e64784be 137 printLCD("Maintenance: " + mainModeSelect);
IonSystems 17:6a0bb0ad5bb4 138 wait(0.1); //Maintenance Mode
IonSystems 17:6a0bb0ad5bb4 139 //printLCD("Maintenance Mode");
IonSystems 23:f9e7e64784be 140 if(buttonPressed(0)) { //Next maintenance function
IonSystems 18:12e2c82a5a6c 141 maintenanceModeSelect++;
IonSystems 23:f9e7e64784be 142 if(maintenanceModeSelect > 13) maintenanceModeSelect = 0;
IonSystems 23:f9e7e64784be 143 } else if(buttonPressed(1)) { //Previous maintenance function
IonSystems 18:12e2c82a5a6c 144 maintenanceModeSelect--;
IonSystems 23:f9e7e64784be 145 if(maintenanceModeSelect < 0) maintenanceModeSelect = 13;
IonSystems 23:f9e7e64784be 146 } else if(buttonPressed(2)) { //Process Instruction
IonSystems 23:f9e7e64784be 147 switch(maintenanceModeSelect) {
IonSystems 23:f9e7e64784be 148 case 0://RB_LEFT:
IonSystems 23:f9e7e64784be 149 printLCD("Moving Red/Blue Slider left.");
IonSystems 23:f9e7e64784be 150 maintain(RB_LEFT);
IonSystems 13:0661d658d9d1 151 break;
IonSystems 23:f9e7e64784be 152
IonSystems 23:f9e7e64784be 153 case 1://RB_CENTRE:
IonSystems 23:f9e7e64784be 154 printLCD("Centering Red/Blue Slider.");
IonSystems 23:f9e7e64784be 155 maintain(RB_CENTRE);
IonSystems 13:0661d658d9d1 156 break;
IonSystems 23:f9e7e64784be 157
IonSystems 23:f9e7e64784be 158 case 2://RB_RIGHT:
IonSystems 23:f9e7e64784be 159 printLCD("Moving Red/Blue Slider right.");
IonSystems 23:f9e7e64784be 160 maintain(RB_RIGHT);
IonSystems 13:0661d658d9d1 161 break;
IonSystems 23:f9e7e64784be 162
IonSystems 23:f9e7e64784be 163 case 3://GO_UP:
IonSystems 23:f9e7e64784be 164 printLCD("Moving Green Slider up.");
IonSystems 23:f9e7e64784be 165 maintain(GO_UP);
IonSystems 13:0661d658d9d1 166 break;
IonSystems 23:f9e7e64784be 167
IonSystems 23:f9e7e64784be 168 case 4://GO_CENTRE:
IonSystems 23:f9e7e64784be 169 printLCD("Centering Green Slider.");
IonSystems 23:f9e7e64784be 170 maintain(GO_CENTRE);
IonSystems 13:0661d658d9d1 171 break;
IonSystems 23:f9e7e64784be 172
IonSystems 23:f9e7e64784be 173 case 5://GO_DOWN:
IonSystems 23:f9e7e64784be 174 printLCD("Moving Green Slider down.");
IonSystems 23:f9e7e64784be 175 maintain(GO_DOWN);
IonSystems 13:0661d658d9d1 176 break;
IonSystems 23:f9e7e64784be 177
IonSystems 23:f9e7e64784be 178 case 6://BR_LEFT:
IonSystems 23:f9e7e64784be 179 printLCD("Moving Bin Slider left.");
IonSystems 23:f9e7e64784be 180 maintain(BR_LEFT);
IonSystems 13:0661d658d9d1 181 break;
IonSystems 23:f9e7e64784be 182
IonSystems 23:f9e7e64784be 183 case 7://BR_RIGHT:
IonSystems 23:f9e7e64784be 184 printLCD("Moving Bin Slider right.");
IonSystems 23:f9e7e64784be 185 maintain(BR_RIGHT);
IonSystems 13:0661d658d9d1 186 break;
IonSystems 23:f9e7e64784be 187
IonSystems 23:f9e7e64784be 188 case 8://R_PUSH:
IonSystems 23:f9e7e64784be 189 printLCD("Pushing red dispensor");
IonSystems 23:f9e7e64784be 190 maintain(R_PUSH);
IonSystems 13:0661d658d9d1 191 break;
IonSystems 23:f9e7e64784be 192
IonSystems 23:f9e7e64784be 193 case 9://R_HOME:
IonSystems 23:f9e7e64784be 194 printLCD("Homing red dispensor");
IonSystems 23:f9e7e64784be 195 maintain(R_HOME);
IonSystems 13:0661d658d9d1 196 break;
IonSystems 23:f9e7e64784be 197
IonSystems 23:f9e7e64784be 198 case 10://GB_LEFT:
IonSystems 23:f9e7e64784be 199 printLCD("Pushing green dispensor");
IonSystems 23:f9e7e64784be 200 maintain(GB_LEFT);
IonSystems 13:0661d658d9d1 201 break;
IonSystems 23:f9e7e64784be 202
IonSystems 23:f9e7e64784be 203 case 11://GB_CENTRE:
IonSystems 23:f9e7e64784be 204 printLCD("Centre green/blue dispensor");
IonSystems 23:f9e7e64784be 205 maintain(GB_CENTRE);
IonSystems 13:0661d658d9d1 206 break;
IonSystems 23:f9e7e64784be 207
IonSystems 23:f9e7e64784be 208 case 12://GB_RIGHT:
IonSystems 23:f9e7e64784be 209 printLCD("Pushing blue dispensor");
IonSystems 23:f9e7e64784be 210 maintain(GB_RIGHT );
IonSystems 13:0661d658d9d1 211 break;
IonSystems 23:f9e7e64784be 212
IonSystems 23:f9e7e64784be 213 case 13: //MaintenanceEND
IonSystems 23:f9e7e64784be 214 printLCD("Ending Maintenance Mode");
IonSystems 23:f9e7e64784be 215 maintain(maintenanceEND);
IonSystems 22:8f11d1c178ab 216 break;
IonSystems 23:f9e7e64784be 217
IonSystems 23:f9e7e64784be 218
IonSystems 12:814a8fdbb6f7 219 }
IonSystems 23:f9e7e64784be 220 printLCD("Ready for next command");
IonSystems 23:f9e7e64784be 221 wait(1);
IonSystems 9:8d78eb55ad5e 222 }
IonSystems 23:f9e7e64784be 223 }
IonSystems 23:f9e7e64784be 224
IonSystems 23:f9e7e64784be 225 }
IonSystems 23:f9e7e64784be 226
IonSystems 23:f9e7e64784be 227 void changeLanguage()
IonSystems 23:f9e7e64784be 228 {
IonSystems 17:6a0bb0ad5bb4 229 currentLanguage = nextLanguage(currentLanguage); //Change the language on teh MBED.
IonSystems 17:6a0bb0ad5bb4 230 sendLanguageCharacter(); //Tell PC to change language
IonSystems 18:12e2c82a5a6c 231 //Change Language //Tell Arduino to change language.
IonSystems 17:6a0bb0ad5bb4 232 wait(1);
IonSystems 23:f9e7e64784be 233 }
IonSystems 23:f9e7e64784be 234
IonSystems 23:f9e7e64784be 235
IonSystems 23:f9e7e64784be 236 void sortFunction()
IonSystems 23:f9e7e64784be 237 {
IonSystems 24:8868101d01d0 238 Thread::wait(100);
IonSystems 24:8868101d01d0 239 Colour colour = readColourSensor();
IonSystems 24:8868101d01d0 240 Thread::wait(100);
IonSystems 23:f9e7e64784be 241 Colour colour2 = readColourSensor();
IonSystems 23:f9e7e64784be 242 if(colour != colour2) {
IonSystems 23:f9e7e64784be 243 return;
IonSystems 23:f9e7e64784be 244 }
IonSystems 24:8868101d01d0 245 if(colour == BIN) {
IonSystems 24:8868101d01d0 246 Thread::wait(100);
IonSystems 23:f9e7e64784be 247 Colour binCheck = readColourSensor();
IonSystems 23:f9e7e64784be 248 if(binCheck != colour) {
IonSystems 23:f9e7e64784be 249 return;
IonSystems 23:f9e7e64784be 250 }
IonSystems 23:f9e7e64784be 251 }
IonSystems 23:f9e7e64784be 252
IonSystems 23:f9e7e64784be 253 /* Tries to prevent a colour mis-read. When a chip is read as NONE,
IonSystems 23:f9e7e64784be 254 the chip may be falling down the tube as the reading was taken. The chip may
IonSystems 23:f9e7e64784be 255 also be out of position on the slider. Ignoring the next reading is trying to
IonSystems 23:f9e7e64784be 256 prevent a mis-read being valid.*/
IonSystems 23:f9e7e64784be 257
IonSystems 23:f9e7e64784be 258
IonSystems 24:8868101d01d0 259 //log("Sorting colour");
IonSystems 24:8868101d01d0 260 sort(colour);
IonSystems 23:f9e7e64784be 261 }
IonSystems 23:f9e7e64784be 262
IonSystems 23:f9e7e64784be 263 void sortMode(void const* args)
IonSystems 23:f9e7e64784be 264 {
IonSystems 24:8868101d01d0 265
IonSystems 24:8868101d01d0 266 while(colourSensor && sorter) {
IonSystems 24:8868101d01d0 267 if(operationMode) {
IonSystems 23:f9e7e64784be 268 led2 = 1;
IonSystems 23:f9e7e64784be 269 sortFunction();
IonSystems 23:f9e7e64784be 270 led2 = 0;
IonSystems 23:f9e7e64784be 271 Thread::wait(50);
IonSystems 23:f9e7e64784be 272 }
IonSystems 23:f9e7e64784be 273 }
IonSystems 23:f9e7e64784be 274 }
IonSystems 23:f9e7e64784be 275 bool pcReady = false;
IonSystems 23:f9e7e64784be 276 void dispenseFunction()
IonSystems 23:f9e7e64784be 277 {
IonSystems 23:f9e7e64784be 278 if(!pcReady) {
IonSystems 23:f9e7e64784be 279 if(pc.getc() == '*') {
IonSystems 23:f9e7e64784be 280 pcReady = true;
IonSystems 23:f9e7e64784be 281 }
IonSystems 23:f9e7e64784be 282 } else {
IonSystems 24:8868101d01d0 283 //Check language button
IonSystems 24:8868101d01d0 284 if(languageButton) {
IonSystems 24:8868101d01d0 285 changeLanguage();
IonSystems 24:8868101d01d0 286 }
IonSystems 23:f9e7e64784be 287 if(cardReader && cardDetect) {
IonSystems 23:f9e7e64784be 288 //Read card
IonSystems 23:f9e7e64784be 289 int cardNumber = cardAcquisition();
IonSystems 23:f9e7e64784be 290
IonSystems 23:f9e7e64784be 291 //Send message to pc
IonSystems 23:f9e7e64784be 292 pc.putc('*');
IonSystems 23:f9e7e64784be 293 wait(0.5);
IonSystems 24:8868101d01d0 294
IonSystems 24:8868101d01d0 295 //Send card number to pc
IonSystems 23:f9e7e64784be 296 pc.printf("%i\n",cardNumber);
IonSystems 24:8868101d01d0 297
IonSystems 23:f9e7e64784be 298 int red = 0;
IonSystems 23:f9e7e64784be 299 int green = 0;
IonSystems 23:f9e7e64784be 300 int blue = 0;
IonSystems 24:8868101d01d0 301
IonSystems 24:8868101d01d0 302 //Get order from pc
IonSystems 23:f9e7e64784be 303 red = (int) pc.getc() - '0';
IonSystems 23:f9e7e64784be 304 green = (int) pc.getc() - '0';
IonSystems 23:f9e7e64784be 305 blue = (int) pc.getc() - '0';
IonSystems 24:8868101d01d0 306
IonSystems 24:8868101d01d0 307 //Check if there are enough chips to dispense order
IonSystems 24:8868101d01d0 308 Thread::wait(100);
IonSystems 24:8868101d01d0 309 if(red > redAmount || green > greenAmount || blue > blueAmount) {
IonSystems 24:8868101d01d0 310 //If not then do not dispense
IonSystems 24:8868101d01d0 311 pc.putc('<');
IonSystems 24:8868101d01d0 312 pcReady = false;
IonSystems 24:8868101d01d0 313 } else if(red ==0 && green == 0 && blue ==0){
IonSystems 24:8868101d01d0 314 pc.putc('@');
IonSystems 24:8868101d01d0 315 pcReady = false;
IonSystems 24:8868101d01d0 316 }else {
IonSystems 24:8868101d01d0 317 //Otherwise there are enough tokens so dispense the order
IonSystems 24:8868101d01d0 318 pc.putc('>');
IonSystems 24:8868101d01d0 319
IonSystems 24:8868101d01d0 320 //Display order on LCD
IonSystems 24:8868101d01d0 321 glcd.putc(27);
IonSystems 24:8868101d01d0 322 glcd.putc(18);
IonSystems 24:8868101d01d0 323 glcd.putc(red + '0');
IonSystems 24:8868101d01d0 324 glcd.putc(green + '0');
IonSystems 24:8868101d01d0 325 glcd.putc(blue + '0');
IonSystems 24:8868101d01d0 326 glcd.putc(255);
IonSystems 24:8868101d01d0 327
IonSystems 24:8868101d01d0 328 //Dispense Order
IonSystems 24:8868101d01d0 329 dispenseOrder(red,green,blue);
IonSystems 24:8868101d01d0 330
IonSystems 24:8868101d01d0 331 //Display finished dispensing on lcd
IonSystems 24:8868101d01d0 332 glcd.putc(27);
IonSystems 24:8868101d01d0 333 glcd.putc(19);
IonSystems 24:8868101d01d0 334 glcd.putc(255);
IonSystems 24:8868101d01d0 335
IonSystems 24:8868101d01d0 336 //Reset pc ready
IonSystems 24:8868101d01d0 337 pcReady = false;
IonSystems 24:8868101d01d0 338 wait(1);
IonSystems 24:8868101d01d0 339 pc.putc('(');
IonSystems 24:8868101d01d0 340 }
IonSystems 24:8868101d01d0 341
IonSystems 23:f9e7e64784be 342 }
IonSystems 23:f9e7e64784be 343 }
IonSystems 23:f9e7e64784be 344 }
IonSystems 23:f9e7e64784be 345
IonSystems 23:f9e7e64784be 346 void dispenseMode(void const* args)
IonSystems 23:f9e7e64784be 347 {
IonSystems 24:8868101d01d0 348
IonSystems 24:8868101d01d0 349 while(true) {
IonSystems 24:8868101d01d0 350 if(operationMode) {
IonSystems 23:f9e7e64784be 351 led3 = 1;
IonSystems 23:f9e7e64784be 352 dispenseFunction();
IonSystems 23:f9e7e64784be 353 led3 =0;
IonSystems 24:8868101d01d0 354 Thread::wait(50);
IonSystems 23:f9e7e64784be 355 }
IonSystems 24:8868101d01d0 356
IonSystems 23:f9e7e64784be 357 }
IonSystems 23:f9e7e64784be 358 }
IonSystems 23:f9e7e64784be 359
IonSystems 23:f9e7e64784be 360
IonSystems 23:f9e7e64784be 361 int main()
IonSystems 23:f9e7e64784be 362 {
IonSystems 23:f9e7e64784be 363 led1 = 0;
IonSystems 18:12e2c82a5a6c 364 setupLCD();
IonSystems 18:12e2c82a5a6c 365 printLCD("Welcome to the Chipin Sorter");
IonSystems 24:8868101d01d0 366 Thread::wait(1000);
IonSystems 12:814a8fdbb6f7 367 readChipNumbers();
IonSystems 12:814a8fdbb6f7 368 printStoredChipValues();
IonSystems 23:f9e7e64784be 369 printLCD("Resetting all sliders");
IonSystems 23:f9e7e64784be 370 maintain(maintenanceEND);
IonSystems 24:8868101d01d0 371 printLCD("");
IonSystems 24:8868101d01d0 372 Thread::wait(1000);
IonSystems 24:8868101d01d0 373 sendLanguageCharacter();
IonSystems 23:f9e7e64784be 374
IonSystems 23:f9e7e64784be 375 Thread sortThread(sortMode);
IonSystems 24:8868101d01d0 376 if(!languageButton){
IonSystems 24:8868101d01d0 377 operationMode = true;
IonSystems 24:8868101d01d0 378 mode = 0;
IonSystems 24:8868101d01d0 379
IonSystems 24:8868101d01d0 380 }else{
IonSystems 24:8868101d01d0 381 operationMode = false;
IonSystems 24:8868101d01d0 382 mode = 1;
IonSystems 24:8868101d01d0 383 }
IonSystems 24:8868101d01d0 384 Thread dispenseThread(dispenseMode);
IonSystems 23:f9e7e64784be 385 while(true) {
IonSystems 23:f9e7e64784be 386 led1 = 1;
IonSystems 23:f9e7e64784be 387 led4 = cardDetect;
IonSystems 23:f9e7e64784be 388
IonSystems 24:8868101d01d0 389 if(!operationMode) {
IonSystems 10:8c0696b99692 390 checkSerial();
IonSystems 23:f9e7e64784be 391 }
IonSystems 23:f9e7e64784be 392 if(testFunctions) checkSortDispenseButtons();
IonSystems 24:8868101d01d0 393 Thread::wait(100);
IonSystems 23:f9e7e64784be 394 led1=0;
IonSystems 24:8868101d01d0 395 Thread::wait(100);
IonSystems 23:f9e7e64784be 396 }
IonSystems 10:8c0696b99692 397 }
IonSystems 23:f9e7e64784be 398
IonSystems 23:f9e7e64784be 399
IonSystems 23:f9e7e64784be 400
IonSystems 17:6a0bb0ad5bb4 401
IonSystems 23:f9e7e64784be 402
IonSystems 3:97668a4cd69d 403
IonSystems 23:f9e7e64784be 404
IonSystems 23:f9e7e64784be 405