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:
Thu Sep 18 23:38:11 2014 +0000
Revision:
2:3e7baa3e3fec
Parent:
1:5731f31f96be
Child:
3:078e9a1e8be3
- Revamped whole system and now works without stalling or freezing mid program; - now Object Oriented Based in terms of Devices (inheritance of functions)

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