Code for RFID Robot
Dependencies: DebounceIn HTTPClient ID12RFID SDFileSystem TextLCD WiflyInterface iniparser mbed
Diff: SD.cpp
- Revision:
- 0:9fd64882c5aa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SD.cpp Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,172 @@ +#include "SD.h" + +dictionary* translationFile; +dictionary* programmedFile; + +void setupSDCard() +{ + translationFile = iniparser_load("/sd/translationFile.ini"); + programmedFile = iniparser_load("/sd/programmedFile.ini"); + + if(translationFile && programmedFile) { + printLCD("Files opened", "succesfully!"); + } + else if(!translationFile && !programmedFile) { + printLCD("Error opening", "both files"); + } + else if(!translationFile) { + printLCD("Error opening", "translation"); + } + else { + printLCD("Error opening", "programmed"); + } + wait(1.5); +} + +vector<robotCommand>* translateTags(vector<int>& tagValues) +{ + + vector<robotCommand>* commandVector = new vector<robotCommand>(); + printLCD("Translating", NULL); + wait(.5); + + for (int i = 0; i < tagValues.size(); i += 2) // Tags alternate between command type and magnitude + { + printf("trying to find tag # %d\n", tagValues[i]); + char tagName[40]; + sprintf(tagName, "translations:%d", tagValues[i]%1000); + + // get the command string from the ini file + + char commandName[30]; + sprintf(commandName,"%s", iniparser_getstring(translationFile,tagName, "NONE")); + + //printf("commandName is: %s\n", commandName); + CommandType commandID = None; + + if (strcmp(commandName, "FORWARD") == 0) + commandID = Forward; + else if (strcmp(commandName, "REVERSE") == 0) + commandID = Reverse; + else if (strcmp(commandName, "LEFT") == 0) + commandID = Left; + else if (strcmp(commandName, "RIGHT") == 0) + commandID = Right; + else if (strcmp(commandName, "PLAYSOUND") == 0) + commandID = PlaySound; + + sprintf(tagName, "Translations:%d", tagValues[i+1]%1000); + double magnitude = iniparser_getdouble(translationFile,tagName, 0.0); + printf("Adding %d %f", commandID, magnitude); + commandVector->push_back(robotCommand(commandID, magnitude)); + } + printf("done searching\n"); + printLCD("Translation", "Complete"); + wait(.5); + return commandVector; +} + +vector<robotCommand>* getProgrammedPath(int pathNumber) +{ + vector<robotCommand>* commandVector = new vector<robotCommand>(); + printLCD("Translating", NULL); + wait(.5); + + char sectionName[30]; + sprintf(sectionName, "path%d", pathNumber); + printf("section name: %s\n", sectionName); + int num_keys = iniparser_getsecnkeys(programmedFile, sectionName); + + printf("number of keys: %d\n", num_keys); + char keyName[5]; + for (int i = 0; i < num_keys; i+= 2) + { + sprintf(keyName,"path%d:%d",pathNumber, i); + char commandName[30]; + sprintf(commandName,"%s", iniparser_getstring(programmedFile,keyName, "NONE")); + + CommandType commandID = None; + if (strcmp(commandName, "FORWARD") == 0) + commandID = Forward; + else if (strcmp(commandName, "REVERSE") == 0) + commandID = Reverse; + else if (strcmp(commandName, "LEFT") == 0) + commandID = Left; + else if (strcmp(commandName, "RIGHT") == 0) + commandID = Right; + else if (strcmp(commandName, "PLAYSOUND") == 0) + commandID = PlaySound; + + sprintf(keyName,"path%d:%d",pathNumber, i+1); + double magnitude = iniparser_getdouble(programmedFile,keyName, 0.0); + printf("Adding %d %f", commandID, magnitude); + commandVector->push_back(robotCommand(commandID, magnitude)); + } + printf("done searching pre-programmed path\n"); + printLCD("Translation", "Complete"); + wait(.5); + return commandVector; +} + +void writeTagCommand(int tagID, CommandType value) +{ + printf("first key: %s\n", translationFile->key[1]); + printf("Entering Write Command, tagID: %d, value: %d\n", tagID, value); + char stringValue[15]; + tagID = tagID % 1000; + + if (value == 0) + { + sprintf(stringValue, "FORWARD"); + } + else if (value == 1) + { + sprintf(stringValue, "REVERSE"); + } + else if (value == 2) + { + sprintf(stringValue, "LEFT"); + } + else if (value == 3) + { + sprintf(stringValue, "RIGHT"); + } + else if (value == 4) + { + sprintf(stringValue, "PLAYSOUND"); + } + + char keyName[30]; + sprintf(keyName, "translations:%d", tagID); + printf("trying to set\n"); + int val = dictionary_set(translationFile, keyName, stringValue); + + + FILE* translationFilePointer = fopen("/sd/translationFile.ini", "w"); // need to make sure this is right + if (translationFilePointer != NULL) printf("file opened succesfully\n"); + iniparser_dump(translationFile, translationFilePointer); + printf("done dumping\n"); + printf("value is now %s\n", iniparser_getstring(translationFile,keyName, "NONE")); + fclose(translationFilePointer); + printLCD("Tag Updated", NULL); + wait(1.5); +} + +void writeTagCommand(int tagID, double magValue) +{ + char keyName[30]; + tagID = tagID % 1000; + sprintf(keyName, "translations:%d", tagID); // need to make sure this is right + + char stringValue[20]; + sprintf(stringValue, "%f", magValue); + + dictionary_set(translationFile, keyName, stringValue); // add the key to the dictionary + FILE* translationFilePointer = fopen("/sd/translationFile.ini", "w"); + iniparser_dump_ini(translationFile, translationFilePointer); + fclose(translationFilePointer); + printLCD("Tag Updated", NULL); + wait(1.5); +} + +