Code for RFID Robot

Dependencies:   DebounceIn HTTPClient ID12RFID SDFileSystem TextLCD WiflyInterface iniparser mbed

Committer:
4180skrw
Date:
Tue Dec 10 02:17:48 2013 +0000
Revision:
0:9fd64882c5aa
initial commit

Who changed what in which revision?

UserRevisionLine numberNew 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