Component Test's Software to work with "Universal Controller Box" - Software is an interpreter or "compiler" for programs to be done with a .txt file and read off of the SD Card

Dependencies:   BridgeDriver FrontPanelButtons MCP23017 SDFileSystem TextLCD mbed

Committer:
mehatfie
Date:
Tue Sep 16 18:27:41 2014 +0000
Revision:
1:5731f31f96be
Parent:
0:22618cf06f45
Child:
2:3e7baa3e3fec
- Noticed having issues with code in terms of memory(?); - Loop functionality works fine; - Depending on the number of cycles, the code will randomly freeze up. Same thing happens if you extend the number of tasks within the loop, and decrease count

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mehatfie 0:22618cf06f45 1
mehatfie 0:22618cf06f45 2 #include "mbed.h"
mehatfie 0:22618cf06f45 3 #include "LocalPinNames.h"
mehatfie 0:22618cf06f45 4 #include "BridgeDriver.h"
mehatfie 0:22618cf06f45 5 #include "FrontPanelButtons.h"
mehatfie 0:22618cf06f45 6 #include "TextLCD.h"
mehatfie 0:22618cf06f45 7 #include "SDFileSystem.h"
mehatfie 0:22618cf06f45 8 #include "Initialization.hpp"
mehatfie 0:22618cf06f45 9 //#include "DeviceClasses.h"
mehatfie 0:22618cf06f45 10 #include "Device.hpp"
mehatfie 0:22618cf06f45 11 //#include "Motor.hpp"
mehatfie 0:22618cf06f45 12 //#include "VoltageDriver.hpp"
mehatfie 0:22618cf06f45 13 #include "TextFile.h"
mehatfie 0:22618cf06f45 14 #include <stdio.h>
mehatfie 0:22618cf06f45 15 #include <string>
mehatfie 0:22618cf06f45 16 #include <stdlib.h>
mehatfie 0:22618cf06f45 17 #include <iostream>
mehatfie 0:22618cf06f45 18 #include <fstream>
mehatfie 0:22618cf06f45 19 #include <vector>
mehatfie 0:22618cf06f45 20 using std::string;
mehatfie 0:22618cf06f45 21
mehatfie 0:22618cf06f45 22 //const int MAX_LINE_LENGTH = 100;
mehatfie 0:22618cf06f45 23 struct Line lineData;
mehatfie 0:22618cf06f45 24 //Device devices[15];
mehatfie 0:22618cf06f45 25 DeviceData devices[15];
mehatfie 0:22618cf06f45 26
mehatfie 1:5731f31f96be 27 FrontPanelButtons buttons(&i2c);
mehatfie 1:5731f31f96be 28
mehatfie 0:22618cf06f45 29 //extern "C" void mbed_reset(); //enable software reset of code
mehatfie 0:22618cf06f45 30 /*
mehatfie 0:22618cf06f45 31 http://stackoverflow.com/questions/3081289/how-to-read-a-line-from-a-text-file-in-c-c
mehatfie 0:22618cf06f45 32 http://stackoverflow.com/questions/12475915/rewind-stream-pointer-to-the-line-back
mehatfie 0:22618cf06f45 33
mehatfie 0:22618cf06f45 34 recurrsive
mehatfie 0:22618cf06f45 35 */
mehatfie 0:22618cf06f45 36
mehatfie 1:5731f31f96be 37
mehatfie 1:5731f31f96be 38
mehatfie 1:5731f31f96be 39 int interpretCommand(FILE *);
mehatfie 1:5731f31f96be 40 int loopCommand(FILE *);
mehatfie 1:5731f31f96be 41
mehatfie 1:5731f31f96be 42 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 43 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 44 /*************************** <FUNCTION: resetLineData> **************************/
mehatfie 1:5731f31f96be 45 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 46 /**********************************************************************************************************************************/
mehatfie 0:22618cf06f45 47 void resetLineData(){
mehatfie 0:22618cf06f45 48
mehatfie 0:22618cf06f45 49 lineData.fullLine = NULL;
mehatfie 0:22618cf06f45 50 lineData.lineNumber = 0;
mehatfie 0:22618cf06f45 51 lineData.numWords = 0;
mehatfie 0:22618cf06f45 52 }
mehatfie 0:22618cf06f45 53
mehatfie 0:22618cf06f45 54
mehatfie 0:22618cf06f45 55
mehatfie 1:5731f31f96be 56 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 57 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 58 /************************ <FUNCTION: cyclePrograms> *****************************/
mehatfie 1:5731f31f96be 59 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 60 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 61
mehatfie 0:22618cf06f45 62 int cyclePrograms(string files[], int SIZE, int currIndex, int direction){
mehatfie 0:22618cf06f45 63
mehatfie 0:22618cf06f45 64 int nextIndex = 0;
mehatfie 0:22618cf06f45 65 switch(direction){
mehatfie 0:22618cf06f45 66 case 0: //Cycle Back one File
mehatfie 0:22618cf06f45 67 if ((currIndex - 1) < 0)
mehatfie 0:22618cf06f45 68 nextIndex = SIZE - 1;
mehatfie 0:22618cf06f45 69 else
mehatfie 0:22618cf06f45 70 nextIndex = currIndex - 1;
mehatfie 0:22618cf06f45 71 break;
mehatfie 0:22618cf06f45 72 case 1: //Cycle Forward one File
mehatfie 0:22618cf06f45 73 if ((currIndex + 1) >= SIZE)
mehatfie 0:22618cf06f45 74 nextIndex = 0;
mehatfie 0:22618cf06f45 75 else
mehatfie 0:22618cf06f45 76 nextIndex = currIndex + 1;
mehatfie 0:22618cf06f45 77 break;
mehatfie 0:22618cf06f45 78 case -1: //set the selectedFile to the currIndex (used for initialization)
mehatfie 0:22618cf06f45 79 nextIndex = currIndex;
mehatfie 0:22618cf06f45 80 break;
mehatfie 0:22618cf06f45 81 }
mehatfie 0:22618cf06f45 82
mehatfie 0:22618cf06f45 83 //Output file on Display
mehatfie 0:22618cf06f45 84 lcd.setAddress(0,3);
mehatfie 0:22618cf06f45 85 lcd.printf(" "); // Clear the Line using Spaces (Emptyness) - Note one line is 20 Characters
mehatfie 0:22618cf06f45 86 wait(.2);
mehatfie 0:22618cf06f45 87 lcd.setAddress(0,3);
mehatfie 0:22618cf06f45 88 lcd.printf("%s",files[nextIndex]);
mehatfie 0:22618cf06f45 89
mehatfie 0:22618cf06f45 90 return nextIndex; // Return the file index in the Array
mehatfie 0:22618cf06f45 91 }
mehatfie 0:22618cf06f45 92
mehatfie 1:5731f31f96be 93
mehatfie 1:5731f31f96be 94 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 95 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 96 /************************** <FUNCTION: resize_StringArr> ************************/
mehatfie 1:5731f31f96be 97 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 98 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 99
mehatfie 0:22618cf06f45 100 string* resize_StringArr(string oldArr[], int newSize) {
mehatfie 0:22618cf06f45 101
mehatfie 0:22618cf06f45 102 string newArr[newSize];
mehatfie 0:22618cf06f45 103 memcpy(newArr, oldArr, newSize * sizeof(string));
mehatfie 0:22618cf06f45 104
mehatfie 0:22618cf06f45 105 return newArr;
mehatfie 0:22618cf06f45 106 }
mehatfie 0:22618cf06f45 107
mehatfie 0:22618cf06f45 108
mehatfie 1:5731f31f96be 109 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 110 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 111 /************************** <FUNCTION: loopCommand> *****************************/
mehatfie 1:5731f31f96be 112 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 113 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 114
mehatfie 1:5731f31f96be 115 int loopCommand(FILE *selectedFile){
mehatfie 1:5731f31f96be 116
mehatfie 1:5731f31f96be 117 char *loopCondition = lineData.word[1];
mehatfie 1:5731f31f96be 118 int loopConditionValue = atoi(loopCondition);
mehatfie 1:5731f31f96be 119 int loopStartAddress = 0, loopLineNumber = 0;
mehatfie 1:5731f31f96be 120 int firstLineOfLoop = 1;
mehatfie 1:5731f31f96be 121
mehatfie 1:5731f31f96be 122 int counter = 0;
mehatfie 1:5731f31f96be 123 while (counter < loopConditionValue){
mehatfie 1:5731f31f96be 124
mehatfie 1:5731f31f96be 125 getNextLine(selectedFile);
mehatfie 1:5731f31f96be 126 /*lcd.setAddress(0,2);
mehatfie 1:5731f31f96be 127 lcd.printf("wrd1: %s", lineData.word[0]);
mehatfie 1:5731f31f96be 128 lcd.setAddress(0,3);
mehatfie 1:5731f31f96be 129 lcd.printf("TEST012 ");*/
mehatfie 1:5731f31f96be 130
mehatfie 1:5731f31f96be 131 int checkEnd = interpretCommand(selectedFile);
mehatfie 1:5731f31f96be 132 /*lcd.setAddress(0,3);
mehatfie 1:5731f31f96be 133 lcd.printf("TEST022 ");
mehatfie 1:5731f31f96be 134 wait(2);*/
mehatfie 1:5731f31f96be 135
mehatfie 1:5731f31f96be 136 if (firstLineOfLoop){
mehatfie 1:5731f31f96be 137 loopStartAddress = lineData.lineAddress; //Save the Line Address
mehatfie 1:5731f31f96be 138 loopLineNumber = lineData.lineNumber; //Save the Line Number
mehatfie 1:5731f31f96be 139 firstLineOfLoop = 0;
mehatfie 1:5731f31f96be 140 /* lcd.setAddress(0,2);
mehatfie 1:5731f31f96be 141 lcd.printf("ldLN: %d, ldLA: %d", lineData.lineNumber, lineData.lineAddress);
mehatfie 1:5731f31f96be 142 lcd.setAddress(0,3);
mehatfie 1:5731f31f96be 143 lcd.printf("lln: %d, lsa: %d", loopLineNumber, loopStartAddress);
mehatfie 1:5731f31f96be 144 wait(3);*/
mehatfie 1:5731f31f96be 145 }
mehatfie 1:5731f31f96be 146
mehatfie 1:5731f31f96be 147 //Increase the loop counter and go back to the beginning of the loop
mehatfie 1:5731f31f96be 148 if (checkEnd == 1){
mehatfie 1:5731f31f96be 149 lcd.setAddress(0,2);
mehatfie 1:5731f31f96be 150 lcd.printf("%dldLN: %d, ldLA: %d", counter, lineData.lineNumber, lineData.lineAddress);
mehatfie 1:5731f31f96be 151 lcd.setAddress(0,3);
mehatfie 1:5731f31f96be 152 lcd.printf("%dlln: %d, lsa: %d", counter, loopLineNumber, loopStartAddress);
mehatfie 1:5731f31f96be 153 wait(3);
mehatfie 1:5731f31f96be 154
mehatfie 1:5731f31f96be 155 counter++;
mehatfie 1:5731f31f96be 156 fseek(selectedFile, loopStartAddress, SEEK_SET);
mehatfie 1:5731f31f96be 157 lineData.lineNumber = loopLineNumber - 1;
mehatfie 1:5731f31f96be 158 }
mehatfie 1:5731f31f96be 159 }
mehatfie 1:5731f31f96be 160
mehatfie 1:5731f31f96be 161 lcd.setAddress(0,3);
mehatfie 1:5731f31f96be 162 lcd.printf("TEST1 ");
mehatfie 1:5731f31f96be 163
mehatfie 1:5731f31f96be 164 return 1;
mehatfie 1:5731f31f96be 165 }
mehatfie 1:5731f31f96be 166
mehatfie 1:5731f31f96be 167 /*
mehatfie 1:5731f31f96be 168 Make LOOP function
mehatfie 1:5731f31f96be 169 - All you need to do is remember (val = ftell(fp)) the beginning of the line you're currently reading.
mehatfie 1:5731f31f96be 170 - If it turns out to be a LOOP call, then you simply send that remembered value to the LOOP function, and it will continue to LOOP back to that position until the condition is met.
mehatfie 1:5731f31f96be 171
mehatfie 1:5731f31f96be 172
mehatfie 1:5731f31f96be 173 func LOOP (FILE *fp, int loopStart){
mehatfie 1:5731f31f96be 174
mehatfie 1:5731f31f96be 175 string conditions;
mehatfie 1:5731f31f96be 176 fseek(fp, loopStart, SEEK_SET);
mehatfie 1:5731f31f96be 177 fgets(conditions, MAX_LINE_LENGTH, fp);
mehatfie 1:5731f31f96be 178
mehatfie 1:5731f31f96be 179 int numCycles = interpretLoopCondtions();
mehatfie 1:5731f31f96be 180
mehatfie 1:5731f31f96be 181 int i = 0;
mehatfie 1:5731f31f96be 182 int checkEndLoop = 0;
mehatfie 1:5731f31f96be 183 while (i < numCycles) {
mehatfie 1:5731f31f96be 184
mehatfie 1:5731f31f96be 185 checkEndLoop = interpretLine(fp); //if end Loop return ____ (1?), return 0 on success
mehatfie 1:5731f31f96be 186 if (checkEndLoop) //if it's not the end of the loop, the counter will not increase and we'll just interpret the next line
mehatfie 1:5731f31f96be 187 i++;
mehatfie 1:5731f31f96be 188 }
mehatfie 1:5731f31f96be 189 } //loop conditions met, return to main code
mehatfie 1:5731f31f96be 190
mehatfie 1:5731f31f96be 191
mehatfie 1:5731f31f96be 192 */
mehatfie 1:5731f31f96be 193
mehatfie 1:5731f31f96be 194 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 195 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 196 /************************* <FUNCTION: interpretCommand> *************************/
mehatfie 1:5731f31f96be 197 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 198 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 199
mehatfie 1:5731f31f96be 200 int interpretCommand(FILE *selectedFile){
mehatfie 1:5731f31f96be 201
mehatfie 1:5731f31f96be 202 if (strncmp(lineData.word[0],"device", 6) == 0){
mehatfie 1:5731f31f96be 203
mehatfie 1:5731f31f96be 204 int i = 0, deviceFound = -1;
mehatfie 1:5731f31f96be 205 for (i = 0; i < numDevices; i++)
mehatfie 1:5731f31f96be 206 if (strncmp(lineData.word[2], DeviceNames[i], strlen(DeviceNames[i])) == 0)
mehatfie 1:5731f31f96be 207 deviceFound = i;
mehatfie 1:5731f31f96be 208
mehatfie 1:5731f31f96be 209 //if the device type does not match any known type, error out
mehatfie 1:5731f31f96be 210 if (deviceFound == -1){
mehatfie 1:5731f31f96be 211 //Error Out since the device Name was not matched with anything *************************
mehatfie 1:5731f31f96be 212 }
mehatfie 1:5731f31f96be 213
mehatfie 1:5731f31f96be 214 //Add device to the array of devices and initialize it
mehatfie 1:5731f31f96be 215 else
mehatfie 1:5731f31f96be 216 addDevice(deviceFound);
mehatfie 1:5731f31f96be 217 }
mehatfie 1:5731f31f96be 218
mehatfie 1:5731f31f96be 219 else if (strncmp(lineData.word[0],"delay", 5) == 0){
mehatfie 1:5731f31f96be 220 char *duration = lineData.word[1];
mehatfie 1:5731f31f96be 221 int durationValue = atoi(duration);
mehatfie 1:5731f31f96be 222
mehatfie 1:5731f31f96be 223 if (durationValue){
mehatfie 1:5731f31f96be 224 timer.reset();
mehatfie 1:5731f31f96be 225 timer.start();
mehatfie 1:5731f31f96be 226 while (timer.read_ms() < durationValue); //Do Nothing while the timer has not reached the duration
mehatfie 1:5731f31f96be 227 timer.stop(); //Stop the Timer
mehatfie 1:5731f31f96be 228 }
mehatfie 1:5731f31f96be 229 else{
mehatfie 1:5731f31f96be 230 //Error Out
mehatfie 1:5731f31f96be 231 return -1;
mehatfie 1:5731f31f96be 232 }
mehatfie 1:5731f31f96be 233 }
mehatfie 1:5731f31f96be 234
mehatfie 1:5731f31f96be 235 else if (strncmp(lineData.word[0],"loop", 4) == 0){
mehatfie 1:5731f31f96be 236 int checkLoopEnd = loopCommand(selectedFile);
mehatfie 1:5731f31f96be 237 lcd.setAddress(0,3);
mehatfie 1:5731f31f96be 238 lcd.printf("TEST2 ");
mehatfie 1:5731f31f96be 239 if (checkLoopEnd == 1)
mehatfie 1:5731f31f96be 240 return 1;
mehatfie 1:5731f31f96be 241 }
mehatfie 1:5731f31f96be 242
mehatfie 1:5731f31f96be 243 else if (strncmp(lineData.word[0],"end", 3) == 0){
mehatfie 1:5731f31f96be 244 if (strncmp(lineData.word[1],"program", 7) == 0)
mehatfie 1:5731f31f96be 245 return 0;
mehatfie 1:5731f31f96be 246 else if (strncmp(lineData.word[1],"loop", 4) == 0)
mehatfie 1:5731f31f96be 247 return 1;
mehatfie 1:5731f31f96be 248 }
mehatfie 1:5731f31f96be 249
mehatfie 1:5731f31f96be 250 //not a keyword so check if it's a localName for a device
mehatfie 1:5731f31f96be 251 else{
mehatfie 1:5731f31f96be 252
mehatfie 1:5731f31f96be 253 int i = 0, deviceFound = -1;
mehatfie 1:5731f31f96be 254 for (i = 0; i < currNumDevices; i++){
mehatfie 1:5731f31f96be 255 if (strncmp(lineData.word[0], devices[i].name, strlen(devices[i].name)) == 0)
mehatfie 1:5731f31f96be 256 deviceFound = i;
mehatfie 1:5731f31f96be 257 }
mehatfie 1:5731f31f96be 258
mehatfie 1:5731f31f96be 259 //no device was found that matched the local name, and this is also the last error check, meaning it can match no other potential keywords
mehatfie 1:5731f31f96be 260 if (deviceFound == -1){
mehatfie 1:5731f31f96be 261 lcd.setAddress(0,3);
mehatfie 1:5731f31f96be 262 lcd.printf("Final ERROR!");
mehatfie 1:5731f31f96be 263 wait(10);
mehatfie 1:5731f31f96be 264 }
mehatfie 1:5731f31f96be 265
mehatfie 1:5731f31f96be 266 //Local Name matches a device, send line to that device in order to process the functionality
mehatfie 1:5731f31f96be 267 else
mehatfie 1:5731f31f96be 268 addDevice(deviceFound);//devices[deviceFound].interpret();
mehatfie 1:5731f31f96be 269 }
mehatfie 1:5731f31f96be 270
mehatfie 1:5731f31f96be 271 return -1;
mehatfie 1:5731f31f96be 272 }
mehatfie 1:5731f31f96be 273
mehatfie 1:5731f31f96be 274
mehatfie 1:5731f31f96be 275 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 276 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 277 /****************************** <FUNCTION: main> ********************************/
mehatfie 1:5731f31f96be 278 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 279 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 280
mehatfie 0:22618cf06f45 281 int main() {
mehatfie 0:22618cf06f45 282
mehatfie 0:22618cf06f45 283 fullInit(); //Initialize anything that's required to run the code (LCD)
mehatfie 0:22618cf06f45 284
mehatfie 0:22618cf06f45 285 /******************************************************************************/
mehatfie 0:22618cf06f45 286 /*** <Get all the Potential Programs> ***/
mehatfie 0:22618cf06f45 287 /******************************************************************************/
mehatfie 0:22618cf06f45 288 int numTextFiles = 0;
mehatfie 0:22618cf06f45 289 string tempTextFiles[25]; //Assuming Maximum of 25 txt files will be on the SD Card
mehatfie 0:22618cf06f45 290 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 291
mehatfie 0:22618cf06f45 292 vector<string> filenames = readFileNames("/sd");
mehatfie 0:22618cf06f45 293 numTextFiles = getFileNamesWithoutExt(tempTextFiles, filenames);
mehatfie 0:22618cf06f45 294 string *textFiles = resize_StringArr(tempTextFiles, numTextFiles); //Resize Array
mehatfie 0:22618cf06f45 295
mehatfie 1:5731f31f96be 296 //delete[] tempTextFiles; //free previous array
mehatfie 0:22618cf06f45 297
mehatfie 0:22618cf06f45 298
mehatfie 0:22618cf06f45 299 /******************************************************************************/
mehatfie 0:22618cf06f45 300 /*** <Select the Program txt File> ***/
mehatfie 0:22618cf06f45 301 /******************************************************************************/
mehatfie 0:22618cf06f45 302 int fileSelected = 0, selectedFileIndex = 0;
mehatfie 0:22618cf06f45 303
mehatfie 0:22618cf06f45 304 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 305 lcd.setAddress(0,1);
mehatfie 0:22618cf06f45 306 lcd.printf("Select Your Program");
mehatfie 0:22618cf06f45 307 lcd.setAddress(0,2);
mehatfie 0:22618cf06f45 308 lcd.printf("Num Programs = %d", numTextFiles);
mehatfie 0:22618cf06f45 309
mehatfie 0:22618cf06f45 310 uint8_t lastButState;
mehatfie 0:22618cf06f45 311 lcd.setCursor(TextLCD::CurOn_BlkOn); //turn blinking cursor on
mehatfie 0:22618cf06f45 312
mehatfie 0:22618cf06f45 313 selectedFileIndex = cyclePrograms(textFiles, numTextFiles, selectedFileIndex, -1); //Initialize the first file to the screen
mehatfie 0:22618cf06f45 314 while(!fileSelected) {
mehatfie 0:22618cf06f45 315
mehatfie 0:22618cf06f45 316 uint8_t curButState = buttons.readBus();
mehatfie 0:22618cf06f45 317 if(curButState != lastButState){
mehatfie 0:22618cf06f45 318 lastButState = curButState;
mehatfie 0:22618cf06f45 319 if(buttons.readRight())
mehatfie 0:22618cf06f45 320 selectedFileIndex = cyclePrograms(textFiles, numTextFiles, selectedFileIndex, 1);
mehatfie 0:22618cf06f45 321 else if(buttons.readLeft())
mehatfie 0:22618cf06f45 322 selectedFileIndex = cyclePrograms(textFiles, numTextFiles, selectedFileIndex, 0);
mehatfie 0:22618cf06f45 323 else if(buttons.readSel())
mehatfie 0:22618cf06f45 324 fileSelected = 1;
mehatfie 0:22618cf06f45 325 }
mehatfie 0:22618cf06f45 326 }
mehatfie 0:22618cf06f45 327
mehatfie 0:22618cf06f45 328 char selectedFileName[50];
mehatfie 0:22618cf06f45 329 strcpy(selectedFileName, textFiles[selectedFileIndex].c_str());
mehatfie 0:22618cf06f45 330
mehatfie 0:22618cf06f45 331 /******************************************************************************/
mehatfie 0:22618cf06f45 332 /*** <Open the Program txt File> ***/
mehatfie 0:22618cf06f45 333 /******************************************************************************/
mehatfie 0:22618cf06f45 334
mehatfie 0:22618cf06f45 335 //Create the string of the full directory and path to the program txt file
mehatfie 0:22618cf06f45 336 char selectedFileFullName[100] = "/sd/"; //Assuming that no directory and file name will be longer than 100 characters
mehatfie 0:22618cf06f45 337 strcat(selectedFileFullName, selectedFileName);
mehatfie 0:22618cf06f45 338 strcat(selectedFileFullName, ".txt");
mehatfie 0:22618cf06f45 339
mehatfie 0:22618cf06f45 340 FILE *selectedFile = fopen(selectedFileFullName, "r");
mehatfie 0:22618cf06f45 341 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 342
mehatfie 0:22618cf06f45 343 if(selectedFile == NULL) {
mehatfie 0:22618cf06f45 344 lcd.setAddress(0,0);
mehatfie 0:22618cf06f45 345 lcd.printf("Invalid");
mehatfie 0:22618cf06f45 346 wait(10);
mehatfie 0:22618cf06f45 347 }
mehatfie 0:22618cf06f45 348
mehatfie 0:22618cf06f45 349
mehatfie 0:22618cf06f45 350 while(1){
mehatfie 0:22618cf06f45 351
mehatfie 0:22618cf06f45 352 resetLineData();
mehatfie 0:22618cf06f45 353
mehatfie 0:22618cf06f45 354 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 355 lcd.setAddress(0,0);
mehatfie 0:22618cf06f45 356 lcd.printf("Program: %s", selectedFileName);
mehatfie 0:22618cf06f45 357
mehatfie 0:22618cf06f45 358
mehatfie 0:22618cf06f45 359 /******************************************************************************/
mehatfie 0:22618cf06f45 360 /*** <Start Running through the Program txt File Lines> ***/
mehatfie 0:22618cf06f45 361 /******************************************************************************/
mehatfie 0:22618cf06f45 362
mehatfie 0:22618cf06f45 363 int endOfFile = 0;
mehatfie 0:22618cf06f45 364
mehatfie 0:22618cf06f45 365 while (!endOfFile){
mehatfie 0:22618cf06f45 366
mehatfie 0:22618cf06f45 367 getNextLine(selectedFile);
mehatfie 1:5731f31f96be 368 int checkEnd = interpretCommand(selectedFile);
mehatfie 0:22618cf06f45 369
mehatfie 1:5731f31f96be 370 lcd.setAddress(0,3);
mehatfie 1:5731f31f96be 371 lcd.printf("TEST3 ");
mehatfie 1:5731f31f96be 372
mehatfie 1:5731f31f96be 373 if (checkEnd == 0)
mehatfie 1:5731f31f96be 374 endOfFile = 1;
mehatfie 0:22618cf06f45 375 }
mehatfie 0:22618cf06f45 376
mehatfie 0:22618cf06f45 377
mehatfie 0:22618cf06f45 378 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 379 lcd.setAddress(0,0);
mehatfie 0:22618cf06f45 380 lcd.printf("END OF PROGRAM");
mehatfie 0:22618cf06f45 381 lcd.setAddress(0,2);
mehatfie 0:22618cf06f45 382 lcd.printf("To Restart...");
mehatfie 0:22618cf06f45 383 lcd.setAddress(0,3);
mehatfie 0:22618cf06f45 384 lcd.printf("Press BACK");
mehatfie 0:22618cf06f45 385
mehatfie 0:22618cf06f45 386 while(!buttons.readBack());
mehatfie 0:22618cf06f45 387
mehatfie 0:22618cf06f45 388 lcd.setAddress(0,1);
mehatfie 0:22618cf06f45 389 rewind(selectedFile);
mehatfie 0:22618cf06f45 390 }
mehatfie 0:22618cf06f45 391
mehatfie 0:22618cf06f45 392
mehatfie 0:22618cf06f45 393 /***** Cycle through txt lines and remember last lines ******/
mehatfie 0:22618cf06f45 394 /*
mehatfie 0:22618cf06f45 395 int running = 0, selectedFile = 0;
mehatfie 0:22618cf06f45 396 int locCount = 0, tempSpot = 0;
mehatfie 0:22618cf06f45 397 int loc[4];
mehatfie 0:22618cf06f45 398 char line[32];
mehatfie 0:22618cf06f45 399 uint8_t lastButState;
mehatfie 0:22618cf06f45 400
mehatfie 0:22618cf06f45 401
mehatfie 0:22618cf06f45 402 while(1){
mehatfie 0:22618cf06f45 403 lcd.setCursor(TextLCD::CurOn_BlkOn); //turn blinking cursor on
mehatfie 0:22618cf06f45 404 while(!running) {
mehatfie 0:22618cf06f45 405 uint8_t curButState = buttons.readBus();
mehatfie 0:22618cf06f45 406
mehatfie 0:22618cf06f45 407 if(curButState != lastButState){
mehatfie 0:22618cf06f45 408 switch(lastButState = curButState){
mehatfie 0:22618cf06f45 409 case 0x1F: //right
mehatfie 0:22618cf06f45 410
mehatfie 0:22618cf06f45 411 loc[locCount] = ftell(fp);
mehatfie 0:22618cf06f45 412
mehatfie 0:22618cf06f45 413 if (locCount >= 3)
mehatfie 0:22618cf06f45 414 locCount = 0;
mehatfie 0:22618cf06f45 415 else
mehatfie 0:22618cf06f45 416 locCount++;
mehatfie 0:22618cf06f45 417
mehatfie 0:22618cf06f45 418 //tempSpot = ftell(fp);
mehatfie 0:22618cf06f45 419 fgets(line, 32, fp);
mehatfie 0:22618cf06f45 420
mehatfie 0:22618cf06f45 421 lcd.setAddress(0,1);
mehatfie 0:22618cf06f45 422 lcd.printf("L: %s", line);
mehatfie 0:22618cf06f45 423 wait(0.2);
mehatfie 0:22618cf06f45 424 break;
mehatfie 0:22618cf06f45 425 case 0x2F: //left
mehatfie 0:22618cf06f45 426
mehatfie 0:22618cf06f45 427 if (locCount == 0) {
mehatfie 0:22618cf06f45 428 locCount = 3;
mehatfie 0:22618cf06f45 429 fseek(fp, loc[locCount], SEEK_SET);
mehatfie 0:22618cf06f45 430 }
mehatfie 0:22618cf06f45 431 else {
mehatfie 0:22618cf06f45 432 fseek(fp, loc[locCount - 1], SEEK_SET);
mehatfie 0:22618cf06f45 433 locCount--;
mehatfie 0:22618cf06f45 434 }
mehatfie 0:22618cf06f45 435 fgets(line, 32, fp);
mehatfie 0:22618cf06f45 436 lcd.setAddress(0,1);
mehatfie 0:22618cf06f45 437 lcd.printf("L: %s", line);
mehatfie 0:22618cf06f45 438 wait(0.2);
mehatfie 0:22618cf06f45 439 break;
mehatfie 0:22618cf06f45 440 }
mehatfie 0:22618cf06f45 441 }
mehatfie 0:22618cf06f45 442 }
mehatfie 0:22618cf06f45 443 }
mehatfie 0:22618cf06f45 444 */
mehatfie 0:22618cf06f45 445
mehatfie 0:22618cf06f45 446
mehatfie 0:22618cf06f45 447
mehatfie 0:22618cf06f45 448
mehatfie 0:22618cf06f45 449
mehatfie 0:22618cf06f45 450 /******* Select the Program txt File ***********/
mehatfie 0:22618cf06f45 451 /*
mehatfie 0:22618cf06f45 452 int numTextFiles = 0;
mehatfie 0:22618cf06f45 453 string tempTextFiles[25]; //Assuming Maximum of 25 txt files will be on the SD Card
mehatfie 0:22618cf06f45 454 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 455 readFileNames("/sd");
mehatfie 0:22618cf06f45 456 numTextFiles = getFileNamesWithoutExt(tempTextFiles);
mehatfie 0:22618cf06f45 457
mehatfie 0:22618cf06f45 458 string *textFiles = resize_StringArr(tempTextFiles, numTextFiles); //Resize Array
mehatfie 0:22618cf06f45 459 //delete [] tempTextFiles; //free previous array
mehatfie 0:22618cf06f45 460
mehatfie 0:22618cf06f45 461
mehatfie 0:22618cf06f45 462 int running = 0, selectedFile = 0;
mehatfie 0:22618cf06f45 463
mehatfie 0:22618cf06f45 464 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 465 lcd.setAddress(0,1);
mehatfie 0:22618cf06f45 466 lcd.printf("Select Your Program");
mehatfie 0:22618cf06f45 467 lcd.setAddress(0,2);
mehatfie 0:22618cf06f45 468 lcd.printf("Num Programs = %d", numTextFiles);
mehatfie 0:22618cf06f45 469
mehatfie 0:22618cf06f45 470 uint8_t lastButState;
mehatfie 0:22618cf06f45 471 while(1){
mehatfie 0:22618cf06f45 472 lcd.setCursor(TextLCD::CurOn_BlkOn); //turn blinking cursor on
mehatfie 0:22618cf06f45 473 while(!running) {
mehatfie 0:22618cf06f45 474 uint8_t curButState = buttons.readBus();
mehatfie 0:22618cf06f45 475
mehatfie 0:22618cf06f45 476 if(curButState != lastButState){
mehatfie 0:22618cf06f45 477 switch(lastButState = curButState){
mehatfie 0:22618cf06f45 478 case 0x1F: //right
mehatfie 0:22618cf06f45 479 selectedFile = cyclePrograms(textFiles, numTextFiles, selectedFile, 1);
mehatfie 0:22618cf06f45 480 break;
mehatfie 0:22618cf06f45 481 case 0x2F: //left
mehatfie 0:22618cf06f45 482 selectedFile = cyclePrograms(textFiles, numTextFiles, selectedFile, 0);
mehatfie 0:22618cf06f45 483 break;
mehatfie 0:22618cf06f45 484 }
mehatfie 0:22618cf06f45 485 }
mehatfie 0:22618cf06f45 486 }
mehatfie 0:22618cf06f45 487 }
mehatfie 0:22618cf06f45 488
mehatfie 0:22618cf06f45 489 */
mehatfie 0:22618cf06f45 490
mehatfie 0:22618cf06f45 491
mehatfie 0:22618cf06f45 492
mehatfie 0:22618cf06f45 493
mehatfie 0:22618cf06f45 494 }
mehatfie 0:22618cf06f45 495
mehatfie 0:22618cf06f45 496
mehatfie 0:22618cf06f45 497
mehatfie 0:22618cf06f45 498
mehatfie 0:22618cf06f45 499
mehatfie 0:22618cf06f45 500
mehatfie 0:22618cf06f45 501
mehatfie 0:22618cf06f45 502
mehatfie 0:22618cf06f45 503
mehatfie 0:22618cf06f45 504 /*float speed = 0.5;
mehatfie 0:22618cf06f45 505 while(1){
mehatfie 0:22618cf06f45 506 bridges.drive(1, -1*speed);
mehatfie 0:22618cf06f45 507 wait(2);
mehatfie 0:22618cf06f45 508 bridges.drive(1, speed);
mehatfie 0:22618cf06f45 509 wait(2);
mehatfie 0:22618cf06f45 510 }*/
mehatfie 0:22618cf06f45 511
mehatfie 0:22618cf06f45 512 //BridgeDriver::MOTOR_A