Code for RFID Robot
Dependencies: DebounceIn HTTPClient ID12RFID SDFileSystem TextLCD WiflyInterface iniparser mbed
SD.cpp@0:9fd64882c5aa, 2013-12-10 (annotated)
- Committer:
- 4180skrw
- Date:
- Tue Dec 10 02:17:48 2013 +0000
- Revision:
- 0:9fd64882c5aa
initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
4180skrw | 0:9fd64882c5aa | 1 | #include "SD.h" |
4180skrw | 0:9fd64882c5aa | 2 | |
4180skrw | 0:9fd64882c5aa | 3 | dictionary* translationFile; |
4180skrw | 0:9fd64882c5aa | 4 | dictionary* programmedFile; |
4180skrw | 0:9fd64882c5aa | 5 | |
4180skrw | 0:9fd64882c5aa | 6 | void setupSDCard() |
4180skrw | 0:9fd64882c5aa | 7 | { |
4180skrw | 0:9fd64882c5aa | 8 | translationFile = iniparser_load("/sd/translationFile.ini"); |
4180skrw | 0:9fd64882c5aa | 9 | programmedFile = iniparser_load("/sd/programmedFile.ini"); |
4180skrw | 0:9fd64882c5aa | 10 | |
4180skrw | 0:9fd64882c5aa | 11 | if(translationFile && programmedFile) { |
4180skrw | 0:9fd64882c5aa | 12 | printLCD("Files opened", "succesfully!"); |
4180skrw | 0:9fd64882c5aa | 13 | } |
4180skrw | 0:9fd64882c5aa | 14 | else if(!translationFile && !programmedFile) { |
4180skrw | 0:9fd64882c5aa | 15 | printLCD("Error opening", "both files"); |
4180skrw | 0:9fd64882c5aa | 16 | } |
4180skrw | 0:9fd64882c5aa | 17 | else if(!translationFile) { |
4180skrw | 0:9fd64882c5aa | 18 | printLCD("Error opening", "translation"); |
4180skrw | 0:9fd64882c5aa | 19 | } |
4180skrw | 0:9fd64882c5aa | 20 | else { |
4180skrw | 0:9fd64882c5aa | 21 | printLCD("Error opening", "programmed"); |
4180skrw | 0:9fd64882c5aa | 22 | } |
4180skrw | 0:9fd64882c5aa | 23 | wait(1.5); |
4180skrw | 0:9fd64882c5aa | 24 | } |
4180skrw | 0:9fd64882c5aa | 25 | |
4180skrw | 0:9fd64882c5aa | 26 | vector<robotCommand>* translateTags(vector<int>& tagValues) |
4180skrw | 0:9fd64882c5aa | 27 | { |
4180skrw | 0:9fd64882c5aa | 28 | |
4180skrw | 0:9fd64882c5aa | 29 | vector<robotCommand>* commandVector = new vector<robotCommand>(); |
4180skrw | 0:9fd64882c5aa | 30 | printLCD("Translating", NULL); |
4180skrw | 0:9fd64882c5aa | 31 | wait(.5); |
4180skrw | 0:9fd64882c5aa | 32 | |
4180skrw | 0:9fd64882c5aa | 33 | for (int i = 0; i < tagValues.size(); i += 2) // Tags alternate between command type and magnitude |
4180skrw | 0:9fd64882c5aa | 34 | { |
4180skrw | 0:9fd64882c5aa | 35 | printf("trying to find tag # %d\n", tagValues[i]); |
4180skrw | 0:9fd64882c5aa | 36 | char tagName[40]; |
4180skrw | 0:9fd64882c5aa | 37 | sprintf(tagName, "translations:%d", tagValues[i]%1000); |
4180skrw | 0:9fd64882c5aa | 38 | |
4180skrw | 0:9fd64882c5aa | 39 | // get the command string from the ini file |
4180skrw | 0:9fd64882c5aa | 40 | |
4180skrw | 0:9fd64882c5aa | 41 | char commandName[30]; |
4180skrw | 0:9fd64882c5aa | 42 | sprintf(commandName,"%s", iniparser_getstring(translationFile,tagName, "NONE")); |
4180skrw | 0:9fd64882c5aa | 43 | |
4180skrw | 0:9fd64882c5aa | 44 | //printf("commandName is: %s\n", commandName); |
4180skrw | 0:9fd64882c5aa | 45 | CommandType commandID = None; |
4180skrw | 0:9fd64882c5aa | 46 | |
4180skrw | 0:9fd64882c5aa | 47 | if (strcmp(commandName, "FORWARD") == 0) |
4180skrw | 0:9fd64882c5aa | 48 | commandID = Forward; |
4180skrw | 0:9fd64882c5aa | 49 | else if (strcmp(commandName, "REVERSE") == 0) |
4180skrw | 0:9fd64882c5aa | 50 | commandID = Reverse; |
4180skrw | 0:9fd64882c5aa | 51 | else if (strcmp(commandName, "LEFT") == 0) |
4180skrw | 0:9fd64882c5aa | 52 | commandID = Left; |
4180skrw | 0:9fd64882c5aa | 53 | else if (strcmp(commandName, "RIGHT") == 0) |
4180skrw | 0:9fd64882c5aa | 54 | commandID = Right; |
4180skrw | 0:9fd64882c5aa | 55 | else if (strcmp(commandName, "PLAYSOUND") == 0) |
4180skrw | 0:9fd64882c5aa | 56 | commandID = PlaySound; |
4180skrw | 0:9fd64882c5aa | 57 | |
4180skrw | 0:9fd64882c5aa | 58 | sprintf(tagName, "Translations:%d", tagValues[i+1]%1000); |
4180skrw | 0:9fd64882c5aa | 59 | double magnitude = iniparser_getdouble(translationFile,tagName, 0.0); |
4180skrw | 0:9fd64882c5aa | 60 | printf("Adding %d %f", commandID, magnitude); |
4180skrw | 0:9fd64882c5aa | 61 | commandVector->push_back(robotCommand(commandID, magnitude)); |
4180skrw | 0:9fd64882c5aa | 62 | } |
4180skrw | 0:9fd64882c5aa | 63 | printf("done searching\n"); |
4180skrw | 0:9fd64882c5aa | 64 | printLCD("Translation", "Complete"); |
4180skrw | 0:9fd64882c5aa | 65 | wait(.5); |
4180skrw | 0:9fd64882c5aa | 66 | return commandVector; |
4180skrw | 0:9fd64882c5aa | 67 | } |
4180skrw | 0:9fd64882c5aa | 68 | |
4180skrw | 0:9fd64882c5aa | 69 | vector<robotCommand>* getProgrammedPath(int pathNumber) |
4180skrw | 0:9fd64882c5aa | 70 | { |
4180skrw | 0:9fd64882c5aa | 71 | vector<robotCommand>* commandVector = new vector<robotCommand>(); |
4180skrw | 0:9fd64882c5aa | 72 | printLCD("Translating", NULL); |
4180skrw | 0:9fd64882c5aa | 73 | wait(.5); |
4180skrw | 0:9fd64882c5aa | 74 | |
4180skrw | 0:9fd64882c5aa | 75 | char sectionName[30]; |
4180skrw | 0:9fd64882c5aa | 76 | sprintf(sectionName, "path%d", pathNumber); |
4180skrw | 0:9fd64882c5aa | 77 | printf("section name: %s\n", sectionName); |
4180skrw | 0:9fd64882c5aa | 78 | int num_keys = iniparser_getsecnkeys(programmedFile, sectionName); |
4180skrw | 0:9fd64882c5aa | 79 | |
4180skrw | 0:9fd64882c5aa | 80 | printf("number of keys: %d\n", num_keys); |
4180skrw | 0:9fd64882c5aa | 81 | char keyName[5]; |
4180skrw | 0:9fd64882c5aa | 82 | for (int i = 0; i < num_keys; i+= 2) |
4180skrw | 0:9fd64882c5aa | 83 | { |
4180skrw | 0:9fd64882c5aa | 84 | sprintf(keyName,"path%d:%d",pathNumber, i); |
4180skrw | 0:9fd64882c5aa | 85 | char commandName[30]; |
4180skrw | 0:9fd64882c5aa | 86 | sprintf(commandName,"%s", iniparser_getstring(programmedFile,keyName, "NONE")); |
4180skrw | 0:9fd64882c5aa | 87 | |
4180skrw | 0:9fd64882c5aa | 88 | CommandType commandID = None; |
4180skrw | 0:9fd64882c5aa | 89 | if (strcmp(commandName, "FORWARD") == 0) |
4180skrw | 0:9fd64882c5aa | 90 | commandID = Forward; |
4180skrw | 0:9fd64882c5aa | 91 | else if (strcmp(commandName, "REVERSE") == 0) |
4180skrw | 0:9fd64882c5aa | 92 | commandID = Reverse; |
4180skrw | 0:9fd64882c5aa | 93 | else if (strcmp(commandName, "LEFT") == 0) |
4180skrw | 0:9fd64882c5aa | 94 | commandID = Left; |
4180skrw | 0:9fd64882c5aa | 95 | else if (strcmp(commandName, "RIGHT") == 0) |
4180skrw | 0:9fd64882c5aa | 96 | commandID = Right; |
4180skrw | 0:9fd64882c5aa | 97 | else if (strcmp(commandName, "PLAYSOUND") == 0) |
4180skrw | 0:9fd64882c5aa | 98 | commandID = PlaySound; |
4180skrw | 0:9fd64882c5aa | 99 | |
4180skrw | 0:9fd64882c5aa | 100 | sprintf(keyName,"path%d:%d",pathNumber, i+1); |
4180skrw | 0:9fd64882c5aa | 101 | double magnitude = iniparser_getdouble(programmedFile,keyName, 0.0); |
4180skrw | 0:9fd64882c5aa | 102 | printf("Adding %d %f", commandID, magnitude); |
4180skrw | 0:9fd64882c5aa | 103 | commandVector->push_back(robotCommand(commandID, magnitude)); |
4180skrw | 0:9fd64882c5aa | 104 | } |
4180skrw | 0:9fd64882c5aa | 105 | printf("done searching pre-programmed path\n"); |
4180skrw | 0:9fd64882c5aa | 106 | printLCD("Translation", "Complete"); |
4180skrw | 0:9fd64882c5aa | 107 | wait(.5); |
4180skrw | 0:9fd64882c5aa | 108 | return commandVector; |
4180skrw | 0:9fd64882c5aa | 109 | } |
4180skrw | 0:9fd64882c5aa | 110 | |
4180skrw | 0:9fd64882c5aa | 111 | void writeTagCommand(int tagID, CommandType value) |
4180skrw | 0:9fd64882c5aa | 112 | { |
4180skrw | 0:9fd64882c5aa | 113 | printf("first key: %s\n", translationFile->key[1]); |
4180skrw | 0:9fd64882c5aa | 114 | printf("Entering Write Command, tagID: %d, value: %d\n", tagID, value); |
4180skrw | 0:9fd64882c5aa | 115 | char stringValue[15]; |
4180skrw | 0:9fd64882c5aa | 116 | tagID = tagID % 1000; |
4180skrw | 0:9fd64882c5aa | 117 | |
4180skrw | 0:9fd64882c5aa | 118 | if (value == 0) |
4180skrw | 0:9fd64882c5aa | 119 | { |
4180skrw | 0:9fd64882c5aa | 120 | sprintf(stringValue, "FORWARD"); |
4180skrw | 0:9fd64882c5aa | 121 | } |
4180skrw | 0:9fd64882c5aa | 122 | else if (value == 1) |
4180skrw | 0:9fd64882c5aa | 123 | { |
4180skrw | 0:9fd64882c5aa | 124 | sprintf(stringValue, "REVERSE"); |
4180skrw | 0:9fd64882c5aa | 125 | } |
4180skrw | 0:9fd64882c5aa | 126 | else if (value == 2) |
4180skrw | 0:9fd64882c5aa | 127 | { |
4180skrw | 0:9fd64882c5aa | 128 | sprintf(stringValue, "LEFT"); |
4180skrw | 0:9fd64882c5aa | 129 | } |
4180skrw | 0:9fd64882c5aa | 130 | else if (value == 3) |
4180skrw | 0:9fd64882c5aa | 131 | { |
4180skrw | 0:9fd64882c5aa | 132 | sprintf(stringValue, "RIGHT"); |
4180skrw | 0:9fd64882c5aa | 133 | } |
4180skrw | 0:9fd64882c5aa | 134 | else if (value == 4) |
4180skrw | 0:9fd64882c5aa | 135 | { |
4180skrw | 0:9fd64882c5aa | 136 | sprintf(stringValue, "PLAYSOUND"); |
4180skrw | 0:9fd64882c5aa | 137 | } |
4180skrw | 0:9fd64882c5aa | 138 | |
4180skrw | 0:9fd64882c5aa | 139 | char keyName[30]; |
4180skrw | 0:9fd64882c5aa | 140 | sprintf(keyName, "translations:%d", tagID); |
4180skrw | 0:9fd64882c5aa | 141 | printf("trying to set\n"); |
4180skrw | 0:9fd64882c5aa | 142 | int val = dictionary_set(translationFile, keyName, stringValue); |
4180skrw | 0:9fd64882c5aa | 143 | |
4180skrw | 0:9fd64882c5aa | 144 | |
4180skrw | 0:9fd64882c5aa | 145 | FILE* translationFilePointer = fopen("/sd/translationFile.ini", "w"); // need to make sure this is right |
4180skrw | 0:9fd64882c5aa | 146 | if (translationFilePointer != NULL) printf("file opened succesfully\n"); |
4180skrw | 0:9fd64882c5aa | 147 | iniparser_dump(translationFile, translationFilePointer); |
4180skrw | 0:9fd64882c5aa | 148 | printf("done dumping\n"); |
4180skrw | 0:9fd64882c5aa | 149 | printf("value is now %s\n", iniparser_getstring(translationFile,keyName, "NONE")); |
4180skrw | 0:9fd64882c5aa | 150 | fclose(translationFilePointer); |
4180skrw | 0:9fd64882c5aa | 151 | printLCD("Tag Updated", NULL); |
4180skrw | 0:9fd64882c5aa | 152 | wait(1.5); |
4180skrw | 0:9fd64882c5aa | 153 | } |
4180skrw | 0:9fd64882c5aa | 154 | |
4180skrw | 0:9fd64882c5aa | 155 | void writeTagCommand(int tagID, double magValue) |
4180skrw | 0:9fd64882c5aa | 156 | { |
4180skrw | 0:9fd64882c5aa | 157 | char keyName[30]; |
4180skrw | 0:9fd64882c5aa | 158 | tagID = tagID % 1000; |
4180skrw | 0:9fd64882c5aa | 159 | sprintf(keyName, "translations:%d", tagID); // need to make sure this is right |
4180skrw | 0:9fd64882c5aa | 160 | |
4180skrw | 0:9fd64882c5aa | 161 | char stringValue[20]; |
4180skrw | 0:9fd64882c5aa | 162 | sprintf(stringValue, "%f", magValue); |
4180skrw | 0:9fd64882c5aa | 163 | |
4180skrw | 0:9fd64882c5aa | 164 | dictionary_set(translationFile, keyName, stringValue); // add the key to the dictionary |
4180skrw | 0:9fd64882c5aa | 165 | FILE* translationFilePointer = fopen("/sd/translationFile.ini", "w"); |
4180skrw | 0:9fd64882c5aa | 166 | iniparser_dump_ini(translationFile, translationFilePointer); |
4180skrw | 0:9fd64882c5aa | 167 | fclose(translationFilePointer); |
4180skrw | 0:9fd64882c5aa | 168 | printLCD("Tag Updated", NULL); |
4180skrw | 0:9fd64882c5aa | 169 | wait(1.5); |
4180skrw | 0:9fd64882c5aa | 170 | } |
4180skrw | 0:9fd64882c5aa | 171 | |
4180skrw | 0:9fd64882c5aa | 172 |