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:
Thu Dec 04 22:05:18 2014 +0000
Revision:
27:47a7bc902587
Parent:
24:8868101d01d0
Child:
28:bdf2bf56f97b
Done all commenting, just need to do main.cpp comments

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