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:
Sat Nov 29 16:32:57 2014 +0000
Revision:
23:f9e7e64784be
Parent:
22:8f11d1c178ab
Child:
24:8868101d01d0
might be working

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 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 23:f9e7e64784be 37 int mode = 5;
IonSystems 18:12e2c82a5a6c 38 int maintenanceModeSelect = 0;
IonSystems 12:814a8fdbb6f7 39
IonSystems 14:31ba3e56c788 40 Colour lastColour = NONE;
IonSystems 17:6a0bb0ad5bb4 41 Colour colourStore = NONE;
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 23:f9e7e64784be 55 mode++;
IonSystems 23:f9e7e64784be 56 if(mode >= 7) mode = 0;
IonSystems 23:f9e7e64784be 57 }
IonSystems 23:f9e7e64784be 58
IonSystems 23:f9e7e64784be 59 /*
IonSystems 23:f9e7e64784be 60 if(mode == 0) { //Dispense Mode
IonSystems 11:06f6e82b40a8 61 printLCD("Dispense Mode");
IonSystems 22:8f11d1c178ab 62 operationMode=false;
IonSystems 23:f9e7e64784be 63 if(buttonPressed(0)) {
IonSystems 19:78d4b78fa736 64 printLCD("Red Button pressed");
IonSystems 18:12e2c82a5a6c 65 dispense(RED);
IonSystems 23:f9e7e64784be 66 } else if(buttonPressed(1)) {
IonSystems 19:78d4b78fa736 67 printLCD("Green Button pressed");
IonSystems 18:12e2c82a5a6c 68 dispense(GREEN);
IonSystems 23:f9e7e64784be 69 } else if(buttonPressed(2)) {
IonSystems 19:78d4b78fa736 70 printLCD("Blue Button pressed");
IonSystems 18:12e2c82a5a6c 71 dispense(BLUE);
IonSystems 10:8c0696b99692 72 }
IonSystems 23:f9e7e64784be 73
IonSystems 23:f9e7e64784be 74 } *//*else if(mode == 1) { //Sort Mode
IonSystems 23:f9e7e64784be 75 printLCD("Sort Mode");
IonSystems 23:f9e7e64784be 76 operationMode=false;
IonSystems 23:f9e7e64784be 77 if(buttonPressed(0)) {
IonSystems 23:f9e7e64784be 78 log("Red Button pressed");
IonSystems 23:f9e7e64784be 79 sort(RED);
IonSystems 23:f9e7e64784be 80 } else if(buttonPressed(1)) {
IonSystems 23:f9e7e64784be 81 log("Green Button pressed");
IonSystems 23:f9e7e64784be 82 sort(GREEN);
IonSystems 23:f9e7e64784be 83 } else if(buttonPressed(2)) {
IonSystems 23:f9e7e64784be 84 log("Blue Button pressed");
IonSystems 23:f9e7e64784be 85 sort(BLUE);
IonSystems 23:f9e7e64784be 86 }
IonSystems 23:f9e7e64784be 87
IonSystems 23:f9e7e64784be 88 }*//* else if(mode == 2) { //Bin/Recycle Mode
IonSystems 23:f9e7e64784be 89 printLCD("Bin/Recycle Mode");
IonSystems 23:f9e7e64784be 90 operationMode=false;
IonSystems 23:f9e7e64784be 91 if(buttonPressed(0)) {
IonSystems 23:f9e7e64784be 92 log("Bin button pressed");
IonSystems 23:f9e7e64784be 93 sort(BIN);
IonSystems 23:f9e7e64784be 94 } else if(buttonPressed(1)) {
IonSystems 23:f9e7e64784be 95 log("Recycle Button");
IonSystems 23:f9e7e64784be 96 recycle();
IonSystems 23:f9e7e64784be 97 }
IonSystems 23:f9e7e64784be 98 } */
IonSystems 23:f9e7e64784be 99 /*else if(mode == 4) { //Card Reader Mode
IonSystems 23:f9e7e64784be 100 operationMode= true;
IonSystems 23:f9e7e64784be 101 if(cardReader && cardDetect) {
IonSystems 23:f9e7e64784be 102 cardAcquisition();
IonSystems 23:f9e7e64784be 103
IonSystems 23:f9e7e64784be 104 }*/
IonSystems 23:f9e7e64784be 105 if(mode == 5) { //Storage Mode
IonSystems 23:f9e7e64784be 106 operationMode=true;
IonSystems 23:f9e7e64784be 107 stringstream ss;
IonSystems 23:f9e7e64784be 108 ss << "Stored Values " << "R:" << redAmount << "G:" << greenAmount << "B:" << blueAmount << "R:" << recycleAmount;
IonSystems 23:f9e7e64784be 109 string tmp = ss.str();
IonSystems 23:f9e7e64784be 110 printLCD(tmp.c_str());
IonSystems 23:f9e7e64784be 111 wait(0.1);
IonSystems 23:f9e7e64784be 112 if(buttonPressed(0)) {
IonSystems 23:f9e7e64784be 113 log("Dispense all button pressed");
IonSystems 23:f9e7e64784be 114 dispenseAll();
IonSystems 23:f9e7e64784be 115 } else if(buttonPressed(1)) {
IonSystems 23:f9e7e64784be 116 log("Clear stored numbers button pressed");
IonSystems 23:f9e7e64784be 117 writeFile(0,0,0,recycleAmount);
IonSystems 23:f9e7e64784be 118 redAmount = 0;
IonSystems 23:f9e7e64784be 119 greenAmount = 0;
IonSystems 23:f9e7e64784be 120 blueAmount = 0;
IonSystems 23:f9e7e64784be 121 printLCD("Cleared values");
IonSystems 23:f9e7e64784be 122
IonSystems 23:f9e7e64784be 123 } else if(buttonPressed(2)) {
IonSystems 23:f9e7e64784be 124 log("Increment all stored values by 2.");
IonSystems 23:f9e7e64784be 125 redAmount += 2;
IonSystems 23:f9e7e64784be 126 greenAmount += 2;
IonSystems 23:f9e7e64784be 127 blueAmount += 2;
IonSystems 23:f9e7e64784be 128 writeFile(redAmount,greenAmount,blueAmount,recycleAmount);
IonSystems 23:f9e7e64784be 129
IonSystems 23:f9e7e64784be 130 printLCD("set values to 2");
IonSystems 23:f9e7e64784be 131
IonSystems 23:f9e7e64784be 132 }
IonSystems 23:f9e7e64784be 133 } else if(mode == 6) {
IonSystems 22:8f11d1c178ab 134 operationMode = false;
IonSystems 18:12e2c82a5a6c 135 stringstream ss;
IonSystems 18:12e2c82a5a6c 136 ss << maintenanceModeSelect;
IonSystems 18:12e2c82a5a6c 137 string mainModeSelect = ss.str();
IonSystems 23:f9e7e64784be 138 printLCD("Maintenance: " + mainModeSelect);
IonSystems 17:6a0bb0ad5bb4 139 wait(0.1); //Maintenance Mode
IonSystems 17:6a0bb0ad5bb4 140 //printLCD("Maintenance Mode");
IonSystems 23:f9e7e64784be 141 if(buttonPressed(0)) { //Next maintenance function
IonSystems 18:12e2c82a5a6c 142 maintenanceModeSelect++;
IonSystems 23:f9e7e64784be 143 if(maintenanceModeSelect > 13) maintenanceModeSelect = 0;
IonSystems 23:f9e7e64784be 144 } else if(buttonPressed(1)) { //Previous maintenance function
IonSystems 18:12e2c82a5a6c 145 maintenanceModeSelect--;
IonSystems 23:f9e7e64784be 146 if(maintenanceModeSelect < 0) maintenanceModeSelect = 13;
IonSystems 23:f9e7e64784be 147 } else if(buttonPressed(2)) { //Process Instruction
IonSystems 23:f9e7e64784be 148 switch(maintenanceModeSelect) {
IonSystems 23:f9e7e64784be 149 case 0://RB_LEFT:
IonSystems 23:f9e7e64784be 150 printLCD("Moving Red/Blue Slider left.");
IonSystems 23:f9e7e64784be 151 maintain(RB_LEFT);
IonSystems 13:0661d658d9d1 152 break;
IonSystems 23:f9e7e64784be 153
IonSystems 23:f9e7e64784be 154 case 1://RB_CENTRE:
IonSystems 23:f9e7e64784be 155 printLCD("Centering Red/Blue Slider.");
IonSystems 23:f9e7e64784be 156 maintain(RB_CENTRE);
IonSystems 13:0661d658d9d1 157 break;
IonSystems 23:f9e7e64784be 158
IonSystems 23:f9e7e64784be 159 case 2://RB_RIGHT:
IonSystems 23:f9e7e64784be 160 printLCD("Moving Red/Blue Slider right.");
IonSystems 23:f9e7e64784be 161 maintain(RB_RIGHT);
IonSystems 13:0661d658d9d1 162 break;
IonSystems 23:f9e7e64784be 163
IonSystems 23:f9e7e64784be 164 case 3://GO_UP:
IonSystems 23:f9e7e64784be 165 printLCD("Moving Green Slider up.");
IonSystems 23:f9e7e64784be 166 maintain(GO_UP);
IonSystems 13:0661d658d9d1 167 break;
IonSystems 23:f9e7e64784be 168
IonSystems 23:f9e7e64784be 169 case 4://GO_CENTRE:
IonSystems 23:f9e7e64784be 170 printLCD("Centering Green Slider.");
IonSystems 23:f9e7e64784be 171 maintain(GO_CENTRE);
IonSystems 13:0661d658d9d1 172 break;
IonSystems 23:f9e7e64784be 173
IonSystems 23:f9e7e64784be 174 case 5://GO_DOWN:
IonSystems 23:f9e7e64784be 175 printLCD("Moving Green Slider down.");
IonSystems 23:f9e7e64784be 176 maintain(GO_DOWN);
IonSystems 13:0661d658d9d1 177 break;
IonSystems 23:f9e7e64784be 178
IonSystems 23:f9e7e64784be 179 case 6://BR_LEFT:
IonSystems 23:f9e7e64784be 180 printLCD("Moving Bin Slider left.");
IonSystems 23:f9e7e64784be 181 maintain(BR_LEFT);
IonSystems 13:0661d658d9d1 182 break;
IonSystems 23:f9e7e64784be 183
IonSystems 23:f9e7e64784be 184 case 7://BR_RIGHT:
IonSystems 23:f9e7e64784be 185 printLCD("Moving Bin Slider right.");
IonSystems 23:f9e7e64784be 186 maintain(BR_RIGHT);
IonSystems 13:0661d658d9d1 187 break;
IonSystems 23:f9e7e64784be 188
IonSystems 23:f9e7e64784be 189 case 8://R_PUSH:
IonSystems 23:f9e7e64784be 190 printLCD("Pushing red dispensor");
IonSystems 23:f9e7e64784be 191 maintain(R_PUSH);
IonSystems 13:0661d658d9d1 192 break;
IonSystems 23:f9e7e64784be 193
IonSystems 23:f9e7e64784be 194 case 9://R_HOME:
IonSystems 23:f9e7e64784be 195 printLCD("Homing red dispensor");
IonSystems 23:f9e7e64784be 196 maintain(R_HOME);
IonSystems 13:0661d658d9d1 197 break;
IonSystems 23:f9e7e64784be 198
IonSystems 23:f9e7e64784be 199 case 10://GB_LEFT:
IonSystems 23:f9e7e64784be 200 printLCD("Pushing green dispensor");
IonSystems 23:f9e7e64784be 201 maintain(GB_LEFT);
IonSystems 13:0661d658d9d1 202 break;
IonSystems 23:f9e7e64784be 203
IonSystems 23:f9e7e64784be 204 case 11://GB_CENTRE:
IonSystems 23:f9e7e64784be 205 printLCD("Centre green/blue dispensor");
IonSystems 23:f9e7e64784be 206 maintain(GB_CENTRE);
IonSystems 13:0661d658d9d1 207 break;
IonSystems 23:f9e7e64784be 208
IonSystems 23:f9e7e64784be 209 case 12://GB_RIGHT:
IonSystems 23:f9e7e64784be 210 printLCD("Pushing blue dispensor");
IonSystems 23:f9e7e64784be 211 maintain(GB_RIGHT );
IonSystems 13:0661d658d9d1 212 break;
IonSystems 23:f9e7e64784be 213
IonSystems 23:f9e7e64784be 214 case 13: //MaintenanceEND
IonSystems 23:f9e7e64784be 215 printLCD("Ending Maintenance Mode");
IonSystems 23:f9e7e64784be 216 maintain(maintenanceEND);
IonSystems 22:8f11d1c178ab 217 break;
IonSystems 23:f9e7e64784be 218
IonSystems 23:f9e7e64784be 219
IonSystems 12:814a8fdbb6f7 220 }
IonSystems 23:f9e7e64784be 221 printLCD("Ready for next command");
IonSystems 23:f9e7e64784be 222 wait(1);
IonSystems 9:8d78eb55ad5e 223 }
IonSystems 23:f9e7e64784be 224 }
IonSystems 23:f9e7e64784be 225
IonSystems 23:f9e7e64784be 226 }
IonSystems 23:f9e7e64784be 227
IonSystems 23:f9e7e64784be 228 void changeLanguage()
IonSystems 23:f9e7e64784be 229 {
IonSystems 17:6a0bb0ad5bb4 230 currentLanguage = nextLanguage(currentLanguage); //Change the language on teh MBED.
IonSystems 17:6a0bb0ad5bb4 231 sendLanguageCharacter(); //Tell PC to change language
IonSystems 18:12e2c82a5a6c 232 //Change Language //Tell Arduino to change language.
IonSystems 17:6a0bb0ad5bb4 233 wait(1);
IonSystems 23:f9e7e64784be 234 }
IonSystems 23:f9e7e64784be 235
IonSystems 23:f9e7e64784be 236
IonSystems 23:f9e7e64784be 237 void sortFunction()
IonSystems 23:f9e7e64784be 238 {
IonSystems 23:f9e7e64784be 239 Colour colour = readColourSensor();
IonSystems 23:f9e7e64784be 240 Colour colour2 = readColourSensor();
IonSystems 23:f9e7e64784be 241 if(colour != colour2) {
IonSystems 23:f9e7e64784be 242 return;
IonSystems 23:f9e7e64784be 243 }
IonSystems 23:f9e7e64784be 244
IonSystems 23:f9e7e64784be 245 if(colour == BIN) {
IonSystems 23:f9e7e64784be 246 Colour binCheck = readColourSensor();
IonSystems 23:f9e7e64784be 247 if(binCheck != colour) {
IonSystems 23:f9e7e64784be 248 return;
IonSystems 23:f9e7e64784be 249 }
IonSystems 23:f9e7e64784be 250 }
IonSystems 23:f9e7e64784be 251 lastColour = colourStore;
IonSystems 23:f9e7e64784be 252 colourStore = colour;
IonSystems 23:f9e7e64784be 253
IonSystems 23:f9e7e64784be 254 /* Tries to prevent a colour mis-read. When a chip is read as NONE,
IonSystems 23:f9e7e64784be 255 the chip may be falling down the tube as the reading was taken. The chip may
IonSystems 23:f9e7e64784be 256 also be out of position on the slider. Ignoring the next reading is trying to
IonSystems 23:f9e7e64784be 257 prevent a mis-read being valid.*/
IonSystems 23:f9e7e64784be 258
IonSystems 23:f9e7e64784be 259 if(lastColour == NONE) {
IonSystems 23:f9e7e64784be 260
IonSystems 23:f9e7e64784be 261 return;
IonSystems 23:f9e7e64784be 262 }
IonSystems 23:f9e7e64784be 263 if(sorter) sort(colour);
IonSystems 23:f9e7e64784be 264 }
IonSystems 23:f9e7e64784be 265
IonSystems 23:f9e7e64784be 266 void sortMode(void const* args)
IonSystems 23:f9e7e64784be 267 {
IonSystems 23:f9e7e64784be 268 if(operationMode) {
IonSystems 23:f9e7e64784be 269 while(true && colourSensor && sorter) {
IonSystems 23:f9e7e64784be 270 led2 = 1;
IonSystems 23:f9e7e64784be 271 sortFunction();
IonSystems 23:f9e7e64784be 272 led2 = 0;
IonSystems 23:f9e7e64784be 273 Thread::wait(50);
IonSystems 23:f9e7e64784be 274 }
IonSystems 23:f9e7e64784be 275 }
IonSystems 23:f9e7e64784be 276 }
IonSystems 23:f9e7e64784be 277 bool pcReady = false;
IonSystems 23:f9e7e64784be 278 void dispenseFunction()
IonSystems 23:f9e7e64784be 279 {
IonSystems 23:f9e7e64784be 280 if(!pcReady) {
IonSystems 23:f9e7e64784be 281 if(pc.getc() == '*') {
IonSystems 23:f9e7e64784be 282 pcReady = true;
IonSystems 23:f9e7e64784be 283 }
IonSystems 23:f9e7e64784be 284 } else {
IonSystems 23:f9e7e64784be 285 if(cardReader && cardDetect) {
IonSystems 23:f9e7e64784be 286 //Read card
IonSystems 23:f9e7e64784be 287 int cardNumber = cardAcquisition();
IonSystems 23:f9e7e64784be 288
IonSystems 23:f9e7e64784be 289 //Send message to pc
IonSystems 23:f9e7e64784be 290 pc.putc('*');
IonSystems 23:f9e7e64784be 291 wait(0.5);
IonSystems 23:f9e7e64784be 292 //log("sending card number to pc");
IonSystems 23:f9e7e64784be 293 pc.printf("%i\n",cardNumber);
IonSystems 23:f9e7e64784be 294 int red = 0;
IonSystems 23:f9e7e64784be 295 int green = 0;
IonSystems 23:f9e7e64784be 296 int blue = 0;
IonSystems 23:f9e7e64784be 297 //log("getting rgb from pc");
IonSystems 23:f9e7e64784be 298 red = (int) pc.getc() - '0';
IonSystems 23:f9e7e64784be 299 green = (int) pc.getc() - '0';
IonSystems 23:f9e7e64784be 300 blue = (int) pc.getc() - '0';
IonSystems 23:f9e7e64784be 301 //log("recieved from pc");
IonSystems 23:f9e7e64784be 302 //log("dispensing order");
IonSystems 23:f9e7e64784be 303 dispenseOrder(red,green,blue);
IonSystems 23:f9e7e64784be 304 //log("order dispensed");
IonSystems 23:f9e7e64784be 305 pcReady = false;
IonSystems 23:f9e7e64784be 306 pc.putc('(');
IonSystems 23:f9e7e64784be 307 }
IonSystems 23:f9e7e64784be 308 }
IonSystems 23:f9e7e64784be 309 }
IonSystems 23:f9e7e64784be 310
IonSystems 23:f9e7e64784be 311 void dispenseMode(void const* args)
IonSystems 23:f9e7e64784be 312 {
IonSystems 23:f9e7e64784be 313 if(operationMode) {
IonSystems 23:f9e7e64784be 314 while(true) {
IonSystems 23:f9e7e64784be 315 led3 = 1;
IonSystems 23:f9e7e64784be 316 dispenseFunction();
IonSystems 23:f9e7e64784be 317 led3 =0;
IonSystems 23:f9e7e64784be 318 }
IonSystems 23:f9e7e64784be 319 }
IonSystems 23:f9e7e64784be 320 }
IonSystems 23:f9e7e64784be 321
IonSystems 23:f9e7e64784be 322
IonSystems 23:f9e7e64784be 323 int main()
IonSystems 23:f9e7e64784be 324 {
IonSystems 23:f9e7e64784be 325 led1 = 0;
IonSystems 18:12e2c82a5a6c 326 setupLCD();
IonSystems 18:12e2c82a5a6c 327 printLCD("Welcome to the Chipin Sorter");
IonSystems 18:12e2c82a5a6c 328 wait(1);
IonSystems 12:814a8fdbb6f7 329 readChipNumbers();
IonSystems 12:814a8fdbb6f7 330 printStoredChipValues();
IonSystems 23:f9e7e64784be 331 printLCD("Resetting all sliders");
IonSystems 23:f9e7e64784be 332 maintain(maintenanceEND);
IonSystems 23:f9e7e64784be 333 wait(1);
IonSystems 23:f9e7e64784be 334
IonSystems 23:f9e7e64784be 335 Thread sortThread(sortMode);
IonSystems 23:f9e7e64784be 336 Thread dispenseThread(dispenseMode);
IonSystems 23:f9e7e64784be 337
IonSystems 23:f9e7e64784be 338
IonSystems 23:f9e7e64784be 339 while(true) {
IonSystems 23:f9e7e64784be 340 led1 = 1;
IonSystems 23:f9e7e64784be 341 led4 = cardDetect;
IonSystems 23:f9e7e64784be 342
IonSystems 23:f9e7e64784be 343 if(serialComms) {
IonSystems 10:8c0696b99692 344 checkSerial();
IonSystems 23:f9e7e64784be 345 }
IonSystems 23:f9e7e64784be 346
IonSystems 23:f9e7e64784be 347 if(testFunctions) checkSortDispenseButtons();
IonSystems 23:f9e7e64784be 348
IonSystems 18:12e2c82a5a6c 349 if(languageButton) changeLanguage();
IonSystems 23:f9e7e64784be 350
IonSystems 23:f9e7e64784be 351 led1=0;
IonSystems 23:f9e7e64784be 352 //Thread::wait(50);
IonSystems 23:f9e7e64784be 353 }
IonSystems 10:8c0696b99692 354 }
IonSystems 23:f9e7e64784be 355
IonSystems 23:f9e7e64784be 356
IonSystems 23:f9e7e64784be 357
IonSystems 17:6a0bb0ad5bb4 358
IonSystems 23:f9e7e64784be 359
IonSystems 3:97668a4cd69d 360
IonSystems 23:f9e7e64784be 361
IonSystems 23:f9e7e64784be 362