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:
Fri Sep 19 00:46:26 2014 +0000
Revision:
3:078e9a1e8be3
Parent:
2:3e7baa3e3fec
Child:
4:86d0d04cc055
- Working properly for Motor, Voltage_Driver, and looping; - successful looping and program completion; - organizing for more readable and understandable code is starting

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 devices.push_back(Device::newDevice(deviceFound, lineData.word[1], lineData));
mehatfie 2:3e7baa3e3fec 176 devices.back()->name = lineData.word[1];
mehatfie 2:3e7baa3e3fec 177 }
mehatfie 1:5731f31f96be 178 }
mehatfie 1:5731f31f96be 179
mehatfie 2:3e7baa3e3fec 180 else if (lineData.word[0].compare("delay") == 0){
mehatfie 2:3e7baa3e3fec 181 string duration = lineData.word[1];
mehatfie 2:3e7baa3e3fec 182 int durationValue = 0;
mehatfie 2:3e7baa3e3fec 183 sscanf(duration.c_str(), "%d", &durationValue);
mehatfie 1:5731f31f96be 184
mehatfie 1:5731f31f96be 185 if (durationValue){
mehatfie 1:5731f31f96be 186 timer.reset();
mehatfie 1:5731f31f96be 187 timer.start();
mehatfie 1:5731f31f96be 188 while (timer.read_ms() < durationValue); //Do Nothing while the timer has not reached the duration
mehatfie 1:5731f31f96be 189 timer.stop(); //Stop the Timer
mehatfie 1:5731f31f96be 190 }
mehatfie 1:5731f31f96be 191 else{
mehatfie 1:5731f31f96be 192 //Error Out
mehatfie 1:5731f31f96be 193 return -1;
mehatfie 1:5731f31f96be 194 }
mehatfie 1:5731f31f96be 195 }
mehatfie 1:5731f31f96be 196
mehatfie 2:3e7baa3e3fec 197 else if (lineData.word[0].compare("loop") == 0){
mehatfie 2:3e7baa3e3fec 198 int checkLoopEnd = loopCommand(selectedFile, lineData);
mehatfie 1:5731f31f96be 199 if (checkLoopEnd == 1)
mehatfie 1:5731f31f96be 200 return 1;
mehatfie 1:5731f31f96be 201 }
mehatfie 1:5731f31f96be 202
mehatfie 2:3e7baa3e3fec 203 else if (lineData.word[0].compare("end") == 0){
mehatfie 2:3e7baa3e3fec 204 if (lineData.word[1].compare("program") == 0){
mehatfie 1:5731f31f96be 205 return 0;
mehatfie 2:3e7baa3e3fec 206 }
mehatfie 2:3e7baa3e3fec 207 else if (lineData.word[1].compare("loop") == 0){
mehatfie 1:5731f31f96be 208 return 1;
mehatfie 2:3e7baa3e3fec 209 }
mehatfie 1:5731f31f96be 210 }
mehatfie 1:5731f31f96be 211
mehatfie 1:5731f31f96be 212 //not a keyword so check if it's a localName for a device
mehatfie 1:5731f31f96be 213 else{
mehatfie 1:5731f31f96be 214
mehatfie 1:5731f31f96be 215 int i = 0, deviceFound = -1;
mehatfie 2:3e7baa3e3fec 216 for (i = 0; i < devices.size(); i++){
mehatfie 2:3e7baa3e3fec 217 if (lineData.word[0].compare(devices[i]->name) == 0)
mehatfie 1:5731f31f96be 218 deviceFound = i;
mehatfie 1:5731f31f96be 219 }
mehatfie 1:5731f31f96be 220
mehatfie 1:5731f31f96be 221 //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 222 if (deviceFound == -1){
mehatfie 1:5731f31f96be 223 lcd.setAddress(0,3);
mehatfie 1:5731f31f96be 224 lcd.printf("Final ERROR!");
mehatfie 1:5731f31f96be 225 wait(10);
mehatfie 1:5731f31f96be 226 }
mehatfie 1:5731f31f96be 227
mehatfie 1:5731f31f96be 228 //Local Name matches a device, send line to that device in order to process the functionality
mehatfie 2:3e7baa3e3fec 229 else{
mehatfie 2:3e7baa3e3fec 230 //addDevice(deviceFound);
mehatfie 2:3e7baa3e3fec 231 devices[deviceFound]->interpret(lineData);
mehatfie 2:3e7baa3e3fec 232 }
mehatfie 1:5731f31f96be 233 }
mehatfie 1:5731f31f96be 234
mehatfie 1:5731f31f96be 235 return -1;
mehatfie 1:5731f31f96be 236 }
mehatfie 1:5731f31f96be 237
mehatfie 1:5731f31f96be 238
mehatfie 1:5731f31f96be 239 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 240 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 241 /****************************** <FUNCTION: main> ********************************/
mehatfie 1:5731f31f96be 242 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 243 /**********************************************************************************************************************************/
mehatfie 1:5731f31f96be 244
mehatfie 0:22618cf06f45 245 int main() {
mehatfie 0:22618cf06f45 246
mehatfie 0:22618cf06f45 247 fullInit(); //Initialize anything that's required to run the code (LCD)
mehatfie 0:22618cf06f45 248
mehatfie 2:3e7baa3e3fec 249 struct Line lineData;
mehatfie 2:3e7baa3e3fec 250 resetLineData(lineData);
mehatfie 2:3e7baa3e3fec 251
mehatfie 0:22618cf06f45 252 /******************************************************************************/
mehatfie 0:22618cf06f45 253 /*** <Get all the Potential Programs> ***/
mehatfie 0:22618cf06f45 254 /******************************************************************************/
mehatfie 0:22618cf06f45 255 int numTextFiles = 0;
mehatfie 2:3e7baa3e3fec 256 vector<string> textFiles; //Assuming Maximum of 25 txt files will be on the SD Card
mehatfie 2:3e7baa3e3fec 257 vector<string> filenames = readFileNames("/sd");
mehatfie 2:3e7baa3e3fec 258 numTextFiles = getFileNamesWithoutExt(textFiles, filenames);
mehatfie 0:22618cf06f45 259
mehatfie 0:22618cf06f45 260
mehatfie 0:22618cf06f45 261 /******************************************************************************/
mehatfie 0:22618cf06f45 262 /*** <Select the Program txt File> ***/
mehatfie 0:22618cf06f45 263 /******************************************************************************/
mehatfie 0:22618cf06f45 264 int fileSelected = 0, selectedFileIndex = 0;
mehatfie 0:22618cf06f45 265
mehatfie 0:22618cf06f45 266 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 267 lcd.setAddress(0,1);
mehatfie 0:22618cf06f45 268 lcd.printf("Select Your Program");
mehatfie 0:22618cf06f45 269 lcd.setAddress(0,2);
mehatfie 0:22618cf06f45 270 lcd.printf("Num Programs = %d", numTextFiles);
mehatfie 0:22618cf06f45 271
mehatfie 0:22618cf06f45 272 uint8_t lastButState;
mehatfie 0:22618cf06f45 273 lcd.setCursor(TextLCD::CurOn_BlkOn); //turn blinking cursor on
mehatfie 2:3e7baa3e3fec 274
mehatfie 0:22618cf06f45 275 selectedFileIndex = cyclePrograms(textFiles, numTextFiles, selectedFileIndex, -1); //Initialize the first file to the screen
mehatfie 0:22618cf06f45 276 while(!fileSelected) {
mehatfie 0:22618cf06f45 277
mehatfie 0:22618cf06f45 278 uint8_t curButState = buttons.readBus();
mehatfie 0:22618cf06f45 279 if(curButState != lastButState){
mehatfie 0:22618cf06f45 280 lastButState = curButState;
mehatfie 0:22618cf06f45 281 if(buttons.readRight())
mehatfie 0:22618cf06f45 282 selectedFileIndex = cyclePrograms(textFiles, numTextFiles, selectedFileIndex, 1);
mehatfie 0:22618cf06f45 283 else if(buttons.readLeft())
mehatfie 0:22618cf06f45 284 selectedFileIndex = cyclePrograms(textFiles, numTextFiles, selectedFileIndex, 0);
mehatfie 0:22618cf06f45 285 else if(buttons.readSel())
mehatfie 0:22618cf06f45 286 fileSelected = 1;
mehatfie 0:22618cf06f45 287 }
mehatfie 0:22618cf06f45 288 }
mehatfie 0:22618cf06f45 289
mehatfie 0:22618cf06f45 290 char selectedFileName[50];
mehatfie 0:22618cf06f45 291 strcpy(selectedFileName, textFiles[selectedFileIndex].c_str());
mehatfie 0:22618cf06f45 292
mehatfie 0:22618cf06f45 293 /******************************************************************************/
mehatfie 0:22618cf06f45 294 /*** <Open the Program txt File> ***/
mehatfie 0:22618cf06f45 295 /******************************************************************************/
mehatfie 0:22618cf06f45 296
mehatfie 0:22618cf06f45 297 //Create the string of the full directory and path to the program txt file
mehatfie 0:22618cf06f45 298 char selectedFileFullName[100] = "/sd/"; //Assuming that no directory and file name will be longer than 100 characters
mehatfie 0:22618cf06f45 299 strcat(selectedFileFullName, selectedFileName);
mehatfie 0:22618cf06f45 300 strcat(selectedFileFullName, ".txt");
mehatfie 0:22618cf06f45 301
mehatfie 0:22618cf06f45 302 FILE *selectedFile = fopen(selectedFileFullName, "r");
mehatfie 2:3e7baa3e3fec 303
mehatfie 0:22618cf06f45 304 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 305
mehatfie 0:22618cf06f45 306 if(selectedFile == NULL) {
mehatfie 0:22618cf06f45 307 lcd.setAddress(0,0);
mehatfie 0:22618cf06f45 308 lcd.printf("Invalid");
mehatfie 0:22618cf06f45 309 wait(10);
mehatfie 0:22618cf06f45 310 }
mehatfie 0:22618cf06f45 311
mehatfie 0:22618cf06f45 312
mehatfie 0:22618cf06f45 313 while(1){
mehatfie 0:22618cf06f45 314
mehatfie 2:3e7baa3e3fec 315 resetLineData(lineData);
mehatfie 0:22618cf06f45 316
mehatfie 0:22618cf06f45 317 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 318 lcd.setAddress(0,0);
mehatfie 0:22618cf06f45 319 lcd.printf("Program: %s", selectedFileName);
mehatfie 0:22618cf06f45 320
mehatfie 0:22618cf06f45 321
mehatfie 0:22618cf06f45 322 /******************************************************************************/
mehatfie 0:22618cf06f45 323 /*** <Start Running through the Program txt File Lines> ***/
mehatfie 0:22618cf06f45 324 /******************************************************************************/
mehatfie 0:22618cf06f45 325
mehatfie 0:22618cf06f45 326 int endOfFile = 0;
mehatfie 0:22618cf06f45 327
mehatfie 0:22618cf06f45 328 while (!endOfFile){
mehatfie 0:22618cf06f45 329
mehatfie 2:3e7baa3e3fec 330 getNextLine(selectedFile, lineData);
mehatfie 2:3e7baa3e3fec 331 int checkEnd = interpretCommand(selectedFile, lineData);
mehatfie 2:3e7baa3e3fec 332
mehatfie 1:5731f31f96be 333 if (checkEnd == 0)
mehatfie 1:5731f31f96be 334 endOfFile = 1;
mehatfie 0:22618cf06f45 335 }
mehatfie 0:22618cf06f45 336
mehatfie 0:22618cf06f45 337
mehatfie 0:22618cf06f45 338 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 339 lcd.setAddress(0,0);
mehatfie 0:22618cf06f45 340 lcd.printf("END OF PROGRAM");
mehatfie 0:22618cf06f45 341 lcd.setAddress(0,2);
mehatfie 0:22618cf06f45 342 lcd.printf("To Restart...");
mehatfie 0:22618cf06f45 343 lcd.setAddress(0,3);
mehatfie 0:22618cf06f45 344 lcd.printf("Press BACK");
mehatfie 0:22618cf06f45 345
mehatfie 0:22618cf06f45 346 while(!buttons.readBack());
mehatfie 0:22618cf06f45 347
mehatfie 0:22618cf06f45 348 lcd.setAddress(0,1);
mehatfie 2:3e7baa3e3fec 349 //rewind(selectedFile);
mehatfie 0:22618cf06f45 350 }
mehatfie 0:22618cf06f45 351
mehatfie 2:3e7baa3e3fec 352 }
mehatfie 2:3e7baa3e3fec 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 0:22618cf06f45 373 /***** Cycle through txt lines and remember last lines ******/
mehatfie 0:22618cf06f45 374 /*
mehatfie 0:22618cf06f45 375 int running = 0, selectedFile = 0;
mehatfie 0:22618cf06f45 376 int locCount = 0, tempSpot = 0;
mehatfie 0:22618cf06f45 377 int loc[4];
mehatfie 0:22618cf06f45 378 char line[32];
mehatfie 0:22618cf06f45 379 uint8_t lastButState;
mehatfie 0:22618cf06f45 380
mehatfie 0:22618cf06f45 381
mehatfie 0:22618cf06f45 382 while(1){
mehatfie 0:22618cf06f45 383 lcd.setCursor(TextLCD::CurOn_BlkOn); //turn blinking cursor on
mehatfie 0:22618cf06f45 384 while(!running) {
mehatfie 0:22618cf06f45 385 uint8_t curButState = buttons.readBus();
mehatfie 0:22618cf06f45 386
mehatfie 0:22618cf06f45 387 if(curButState != lastButState){
mehatfie 0:22618cf06f45 388 switch(lastButState = curButState){
mehatfie 0:22618cf06f45 389 case 0x1F: //right
mehatfie 0:22618cf06f45 390
mehatfie 0:22618cf06f45 391 loc[locCount] = ftell(fp);
mehatfie 0:22618cf06f45 392
mehatfie 0:22618cf06f45 393 if (locCount >= 3)
mehatfie 0:22618cf06f45 394 locCount = 0;
mehatfie 0:22618cf06f45 395 else
mehatfie 0:22618cf06f45 396 locCount++;
mehatfie 0:22618cf06f45 397
mehatfie 0:22618cf06f45 398 //tempSpot = ftell(fp);
mehatfie 0:22618cf06f45 399 fgets(line, 32, fp);
mehatfie 0:22618cf06f45 400
mehatfie 0:22618cf06f45 401 lcd.setAddress(0,1);
mehatfie 0:22618cf06f45 402 lcd.printf("L: %s", line);
mehatfie 0:22618cf06f45 403 wait(0.2);
mehatfie 0:22618cf06f45 404 break;
mehatfie 0:22618cf06f45 405 case 0x2F: //left
mehatfie 0:22618cf06f45 406
mehatfie 0:22618cf06f45 407 if (locCount == 0) {
mehatfie 0:22618cf06f45 408 locCount = 3;
mehatfie 0:22618cf06f45 409 fseek(fp, loc[locCount], SEEK_SET);
mehatfie 0:22618cf06f45 410 }
mehatfie 0:22618cf06f45 411 else {
mehatfie 0:22618cf06f45 412 fseek(fp, loc[locCount - 1], SEEK_SET);
mehatfie 0:22618cf06f45 413 locCount--;
mehatfie 0:22618cf06f45 414 }
mehatfie 0:22618cf06f45 415 fgets(line, 32, fp);
mehatfie 0:22618cf06f45 416 lcd.setAddress(0,1);
mehatfie 0:22618cf06f45 417 lcd.printf("L: %s", line);
mehatfie 0:22618cf06f45 418 wait(0.2);
mehatfie 0:22618cf06f45 419 break;
mehatfie 0:22618cf06f45 420 }
mehatfie 0:22618cf06f45 421 }
mehatfie 0:22618cf06f45 422 }
mehatfie 0:22618cf06f45 423 }
mehatfie 0:22618cf06f45 424 */
mehatfie 2:3e7baa3e3fec 425
mehatfie 0:22618cf06f45 426
mehatfie 0:22618cf06f45 427
mehatfie 0:22618cf06f45 428 /******* Select the Program txt File ***********/
mehatfie 0:22618cf06f45 429 /*
mehatfie 0:22618cf06f45 430 int numTextFiles = 0;
mehatfie 0:22618cf06f45 431 string tempTextFiles[25]; //Assuming Maximum of 25 txt files will be on the SD Card
mehatfie 0:22618cf06f45 432 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 433 readFileNames("/sd");
mehatfie 0:22618cf06f45 434 numTextFiles = getFileNamesWithoutExt(tempTextFiles);
mehatfie 0:22618cf06f45 435
mehatfie 0:22618cf06f45 436 string *textFiles = resize_StringArr(tempTextFiles, numTextFiles); //Resize Array
mehatfie 0:22618cf06f45 437 //delete [] tempTextFiles; //free previous array
mehatfie 0:22618cf06f45 438
mehatfie 0:22618cf06f45 439
mehatfie 0:22618cf06f45 440 int running = 0, selectedFile = 0;
mehatfie 0:22618cf06f45 441
mehatfie 0:22618cf06f45 442 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 443 lcd.setAddress(0,1);
mehatfie 0:22618cf06f45 444 lcd.printf("Select Your Program");
mehatfie 0:22618cf06f45 445 lcd.setAddress(0,2);
mehatfie 0:22618cf06f45 446 lcd.printf("Num Programs = %d", numTextFiles);
mehatfie 0:22618cf06f45 447
mehatfie 0:22618cf06f45 448 uint8_t lastButState;
mehatfie 0:22618cf06f45 449 while(1){
mehatfie 0:22618cf06f45 450 lcd.setCursor(TextLCD::CurOn_BlkOn); //turn blinking cursor on
mehatfie 0:22618cf06f45 451 while(!running) {
mehatfie 0:22618cf06f45 452 uint8_t curButState = buttons.readBus();
mehatfie 0:22618cf06f45 453
mehatfie 0:22618cf06f45 454 if(curButState != lastButState){
mehatfie 0:22618cf06f45 455 switch(lastButState = curButState){
mehatfie 0:22618cf06f45 456 case 0x1F: //right
mehatfie 0:22618cf06f45 457 selectedFile = cyclePrograms(textFiles, numTextFiles, selectedFile, 1);
mehatfie 0:22618cf06f45 458 break;
mehatfie 0:22618cf06f45 459 case 0x2F: //left
mehatfie 0:22618cf06f45 460 selectedFile = cyclePrograms(textFiles, numTextFiles, selectedFile, 0);
mehatfie 0:22618cf06f45 461 break;
mehatfie 0:22618cf06f45 462 }
mehatfie 0:22618cf06f45 463 }
mehatfie 0:22618cf06f45 464 }
mehatfie 0:22618cf06f45 465 }
mehatfie 0:22618cf06f45 466
mehatfie 0:22618cf06f45 467 */
mehatfie 0:22618cf06f45 468
mehatfie 0:22618cf06f45 469 /*float speed = 0.5;
mehatfie 0:22618cf06f45 470 while(1){
mehatfie 0:22618cf06f45 471 bridges.drive(1, -1*speed);
mehatfie 0:22618cf06f45 472 wait(2);
mehatfie 0:22618cf06f45 473 bridges.drive(1, speed);
mehatfie 0:22618cf06f45 474 wait(2);
mehatfie 0:22618cf06f45 475 }*/
mehatfie 0:22618cf06f45 476
mehatfie 0:22618cf06f45 477 //BridgeDriver::MOTOR_A