Code for RFID Robot
Dependencies: DebounceIn HTTPClient ID12RFID SDFileSystem TextLCD WiflyInterface iniparser mbed
Revision 0:9fd64882c5aa, committed 2013-12-10
- Comitter:
- 4180skrw
- Date:
- Tue Dec 10 02:17:48 2013 +0000
- Commit message:
- initial commit
Changed in this revision
diff -r 000000000000 -r 9fd64882c5aa DebounceIn.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DebounceIn.lib Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/AjK/code/DebounceIn/#31ae5cfb44a4
diff -r 000000000000 -r 9fd64882c5aa HTTPClient.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HTTPClient.lib Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/donatien/code/HTTPClient/#1f743885e7de
diff -r 000000000000 -r 9fd64882c5aa ID12RFID.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ID12RFID.lib Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/ID12RFID/#f04afa911cf5
diff -r 000000000000 -r 9fd64882c5aa LCDText.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LCDText.cpp Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,56 @@ +#include "LCDText.h" + +void clearLCD() { + char buff[33]; + memset(buff, ' ', 32); + buff[32] = '\0'; + mylcd.printf(buff); +} + +//clears LCD and prints the two strings centered on each line +//max length of each string is 16 +void printLCD(const char* string1, const char* string2) { + char buff[33]; + memset(buff, ' ', 32); + buff[32] = '\0'; + //clear LCD + clearLCD(); + + //print to LCD + if(string1) { + memcpy(buff+(16-strlen(string1))/2, string1, strlen(string1)); + } + if(string2) { + memcpy(buff+16+(16-strlen(string2))/2, string2, strlen(string2)); + } + mylcd.printf(buff); +} + +//creates a menu with with a title, controlled by the up/down/select buttons +//returns index of option selected +int displayMenu(const char* menuTitle, const char** menuOptions, int numOptions) { + int curSelection = 0; + + printLCD(menuTitle, menuOptions[curSelection]); + if(!up || !down || !select || !back) wait(.3); + while(1) { + if(!up) { + curSelection = (curSelection == numOptions-1) ? 0 : (curSelection + 1); + printLCD(menuTitle, menuOptions[curSelection]); + if(!up) wait(.2); + } + if(!down) { + curSelection = (curSelection == 0) ? (numOptions - 1) : (curSelection - 1); + printLCD(menuTitle, menuOptions[curSelection]); + if(!down) wait(.2); + } + if(!select) { + clearLCD(); + return curSelection; + } + if(!back) { + clearLCD(); + return -1; + } + } +}
diff -r 000000000000 -r 9fd64882c5aa LCDText.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LCDText.h Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,17 @@ +#ifndef _LCDTEST_H +#define _LCDTEST_H + +#include "mbed.h" +#include "TextLCD.h" +#include "DebounceIn.h" + +extern DigitalOut myled1, myled2, myled3, myled4; +extern TextLCD mylcd; +extern DebounceIn down, up, select, back; +extern Serial device; + +void clearLCD(); +void printLCD(const char* string1, const char* string2); +int displayMenu(const char* menuTitle, const char** menuOptions, int numOptions); + +#endif \ No newline at end of file
diff -r 000000000000 -r 9fd64882c5aa RFID.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RFID.cpp Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,46 @@ +#include "RFID.h" + +//Takes in vector by reference and populates it with unique RFID values +//until pb21 is pressed. +int readTagSequence(std::vector<int>& v) +{ + int currTag; + int size = 0; + printLCD("Scan tag", NULL); + while (select) { + if(rfid.readable()) { + currTag = rfid.read(); + size++; + v.resize(size); + v[size-1] = currTag; + char line1[16]; + sprintf(line1, "%d", v[size-1]); + printLCD(line1, "added to list"); + wait(1.5); + printLCD("Scan tag", NULL); + } + else if(!back) return 0; + } + return 1; +} + +//Reads a single RFID tag, and returns value +int readTag() +{ + printLCD("Scan tag", NULL); + int currTag = 0; + while (!currTag) { + if (rfid.readable()) { + currTag = rfid.read(); + char line1[16]; + sprintf(line1, "%d", currTag); + printLCD(line1, "read"); + wait(1.5); + return currTag; + } + else if (!back) { + return 0; + } + } + return currTag; +} \ No newline at end of file
diff -r 000000000000 -r 9fd64882c5aa RFID.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RFID.h Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,16 @@ +#ifndef _RFID_H +#define _RFID_H + +#include "mbed.h" +#include "ID12RFID.h" +#include <vector> +#include <algorithm> +#include "LCDText.h" + +extern DebounceIn down, up, select, back; +extern ID12RFID rfid; + +int readTagSequence(std::vector<int>& v); +int readTag(); + +#endif \ No newline at end of file
diff -r 000000000000 -r 9fd64882c5aa SD.cpp --- /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); +} + +
diff -r 000000000000 -r 9fd64882c5aa SD.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SD.h Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,35 @@ +#ifndef _SD_H +#define _SD_H + +#include "mbed.h" +#include "SDFileSystem.h" +#include "iniparser.h" +#include "dictionary.h" +#include <vector> +#include "LCDText.h" + +typedef enum { + Forward, + Reverse, + Left, + Right, + PlaySound, + None +} CommandType; + +class robotCommand { +public: + robotCommand(CommandType type, double mag) : commandType(type), magnitude(mag) {} + CommandType commandType; + double magnitude; +}; + +extern SDFileSystem sd; + +void setupSDCard(); +vector<robotCommand>* translateTags(vector<int>& tagValues); +vector<robotCommand>* getProgrammedPath(int pathNumber); +void writeTagCommand(int tagID, CommandType value); +void writeTagCommand(int tagID, double magValue); + +#endif \ No newline at end of file
diff -r 000000000000 -r 9fd64882c5aa SDFileSystem.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDFileSystem.lib Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/SDFileSystem/#c8f66dc765d4
diff -r 000000000000 -r 9fd64882c5aa TextLCD.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/TextLCD/#44f34c09bd37
diff -r 000000000000 -r 9fd64882c5aa WiflyInterface.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WiflyInterface.lib Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/WiflyInterface/#fb4494783863
diff -r 000000000000 -r 9fd64882c5aa driver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/driver.cpp Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,129 @@ +#include "driver.h" +#include "wifiunit.h" + +void processCommands(vector<robotCommand> &commands) { + printLCD("Processing", NULL); + forward(); + stop(); + for(int i=0; i<commands.size(); i++) { + double mag = commands[i].magnitude; + int angle; + switch(commands[i].commandType) { + case(Forward): + printLCD("Forward", NULL); + forward(); + wait(mag*4); + break; + case(Reverse): + printLCD("Reverse", NULL); + reverse(); + printf("%f\n", mag*4); + wait(mag*4); + break; + case(Left): + printLCD("Left", NULL); + angle = (int) (mag*90); + //create script + device.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", NewScript, 13, Drive, char((speed>>8)&0xFF), char(speed&0xFF), char(((1)>>8)&0xFF), char((1)&0xFF), WaitAngle, char((angle>>8)&0xFF), char(angle&0xFF), Drive, 0, 0, 0, 0); + device.printf("%c", DoScript); + break; + case(Right): + printLCD("Right", NULL); + angle = (int) (mag*90); + //create script + device.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", NewScript, 13, Drive, char((speed>>8)&0xFF), char(speed&0xFF), char(((-1)>>8)&0xFF), char((-1)&0xFF), WaitAngle, char(((-angle)>>8)&0xFF), char((-angle)&0xFF), Drive, 0, 0, 0, 0); + device.printf("%c", DoScript); + break; + case(PlaySound): + printLCD("Sound", NULL); + playsong((int) mag); + break; + } + stop(); + } +} + +void initialize() { + initializeRobot(); + forward(); + wait(.5); + stop(); + reverse(); + wait(.5); + stop(); + setupSDCard(); + setupWiFi(); + down.mode(PullUp); + up.mode(PullUp); + back.mode(PullUp); + select.mode(PullUp); +} + +void cancel() { + printLCD("Cancelled", NULL); + wait(1.5); +} + +// Demo to move around using basic commands +int main() { + initialize(); + const char* mainMenu[4] = {"Read From RFID", "Read From SD", "Reprogram", "WiFi Mode"}; + const char* reprogramType[2] = {"Command", "Magnitude"}; + const char* allCommands[5] = {"Forward", "Reverse", "Left", "Right", "Play Sound"}; + const char* allMagnitudes[6] = {".5", "1", "1.5", "2", "2.5", "3"}; + vector<int> tagValues; + vector<robotCommand>* commands; + + while(1) { + wait(.2); + int option = displayMenu("Main Menu", mainMenu, 4); + wait(.2); + switch(option) { + case(0): { //read from RFID + tagValues.clear(); + int rt = readTagSequence(tagValues); + if(!rt) { + cancel(); + break; + } + commands = translateTags(tagValues); + processCommands(*commands); + delete commands; + } + break; + case(1): //read from SD + commands = getProgrammedPath(1); + processCommands(*commands); + delete commands; + break; + case(2): //reprogram + int type = displayMenu("Reprogram Type", reprogramType, 2); + if(type == 0) { //reprogram command + CommandType repCommand = (CommandType) displayMenu("Command Type", allCommands, 5); + int tagID = readTag(); + if(!tagID) { + cancel(); + break; + } + writeTagCommand(tagID, repCommand); + } + else { //reprogram magnitude + double repMag = displayMenu("Mag Type", allMagnitudes, 6)*.5+.5; + int tagID = readTag(); + if(!tagID) { + cancel(); + break; + } + writeTagCommand(tagID, repMag); + } + break; + + case(3): + int ret = readTag(); + commands = getTagCommands(ret%1000); + processCommands(*commands); + delete commands; + break; + } + } +} \ No newline at end of file
diff -r 000000000000 -r 9fd64882c5aa driver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/driver.h Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,22 @@ +#ifndef _DRIVER_H +#define _DRIVER_H + +#include "mbed.h" +#include "LCDText.h" +#include "DebounceIn.h" +#include "robot.h" +#include "ID12RFID.h" +#include "RFID.h" +#include "SD.h" + +DigitalOut myled1(LED1), myled2(LED2), myled3(LED3), myled4(LED4); +Serial device(p28, p27); +TextLCD mylcd(p15, p16, p17, p18, p19, p20); +DebounceIn down(p22), up(p23), select(p24), back(p21); +ID12RFID rfid(p10); // uart rx +SDFileSystem sd(p5, p6, p7, p8, "sd"); + +void processCommands(vector<robotCommand> &commands); +void initialize(); + +#endif \ No newline at end of file
diff -r 000000000000 -r 9fd64882c5aa iniparser.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iniparser.lib Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/4180skrw/code/iniparser/#452fd0d30ac6
diff -r 000000000000 -r 9fd64882c5aa mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f \ No newline at end of file
diff -r 000000000000 -r 9fd64882c5aa robot.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/robot.cpp Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,78 @@ +#include "robot.h" + +void initializeRobot() { + printLCD("Initializing", NULL); + // wait for Roomba to power up to accept serial commands + wait(2); + // set baud rate for Roomba factory default + device.baud(57600); + // Start command mode and select sensor data to send back + start(); + + //define songs + //one beep + device.printf("%c%c%c%c%c", Song, char(1), char(1), char(69), char(16)); + wait(1); + //georgia tech fight song, split into 3 songs because max song length is 16 + device.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", Song, char(2), char(16), char(67), char(18), char(0), char(2), char(65), char(9), char(0), char(2), char(63), char(18), char(0), char(2), char(63), char(9), char(0), char(2), char(63), char(18), char(0), char(2), char(65), char(9), char(0), char(2), char(67), char(18), char(0), char(2), char(67), char(9), char(0), char(2)); + device.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", Song, char(14), char(16), char(67), char(9), char(0), char(2), char(65), char(9), char(0), char(2), char(63), char(9), char(0), char(2), char(65), char(9), char(0), char(2), char(65), char(9), char(0), char(2), char(65), char(9), char(0), char(2), char(63), char(18), char(0), char(2), char(62), char(9), char(63), char(54)); + //a major arpeggio + device.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", Song, char(3), char(7), char(69), char(32), char(73), char(32), char(76), char(32), char(81), char(32), char(76), char(32), char(73), char(32), char(69), char(32)); + clearLCD(); +} + +// Start - send start and safe mode, start streaming sensor data +void start() { + // device.printf("%c%c", Start, SafeMode); + device.putc(Start); + wait(.1); + device.putc(Control); + wait(.5); + // device.printf("%c%c", SensorStream, char(1)); + device.putc(Sensors); + device.putc(BumpsandDrops); + wait(.5); +} +// Stop - turn off drive motors +void stop() { + device.printf("%c%c%c%c%c", Drive, char(0), char(0), char(0), char(0)); +} +// Forward - turn on drive motors +void forward() { + device.printf("%c%c%c%c%c", Drive, char((speed>>8)&0xFF), char(speed&0xFF), + char((radius>>8)&0xFF), char(radius&0xFF)); + +} +// Reverse - reverse drive motors +void reverse() { + device.printf("%c%c%c%c%c", Drive, char(((-speed)>>8)&0xFF), char((-speed)&0xFF), + char(((radius)>>8)&0xFF), char((radius)&0xFF)); + +} +// Left - drive motors set to rotate to left +void left() { + device.printf("%c%c%c%c%c", Drive, char((speed>>8)&0xFF), char(speed&0xFF), + char(((1)>>8)&0xFF), char((1)&0xFF)); +} +// Right - drive motors set to rotate to right +void right() { + device.printf("%c%c%c%c%c", Drive, char(((speed)>>8)&0xFF), char((speed)&0xFF), + char((-1>>8)&0xFF), char(-1&0xFF)); + +} +// Charger - search and return to charger using IR beacons (if found) +void charger() { + device.printf("%c", Clean ); + wait(.2); + device.printf("%c", CoverandDock ); +} +// Play Song - play a song +void playsong(int mag) { //Play song + if(mag == 2) { //play rest of georgia tech fight song + device.printf("%c%c%c%c%c%c%c%c", NewScript, char(6), PlaySong, char(2), WaitTime, char(20), PlaySong, char(14)); + device.printf("%c", DoScript); + } + else { + device.printf("%c%c", PlaySong, char(mag)); + } +} \ No newline at end of file
diff -r 000000000000 -r 9fd64882c5aa robot.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/robot.h Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,43 @@ +#ifndef _ROBOT_H +#define _ROBOT_H + +#include "mbed.h" +#include <vector> +#include "LCDText.h" + +extern Serial device; + +// Definitions of iRobot Roomba SCI Command Numbers +// See the Roomba SCI manual for a complete list + + +// Create Command // Arguments +const char Start = 128; +const char Control = 130; +const char FullMode = 132; +const char Drive = 137; // 4: [Vel. Hi] [Vel Low] [Rad. Hi] [Rad. Low] +const char Sensors = 142; // 1: Sensor Packet ID +const char CoverandDock = 143; // 0: Return to Charger +const char Clean = 135; // 0: Start Cleaning +const char PlaySong = 141; +const char Song = 140; +const char NewScript = 152; +const char DoScript = 153; +const char WaitTime = 155; +const char WaitAngle = 157; + /* iRobot Roomba Sensor IDs */ +const char BumpsandDrops = 1; + +const int speed = 250; +const int radius = 0x8000; +void start(); +void forward(); +void reverse(); +void left(); +void right(); +void stop(); +void playsong(int mag); +void charger(); +void initializeRobot(); + +#endif \ No newline at end of file
diff -r 000000000000 -r 9fd64882c5aa wifiunit.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wifiunit.cpp Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,82 @@ +#include "mbed.h" +#include "WiflyInterface.h" +#include "HTTPClient.h" +#include <vector> +#include "SD.h" + +WiflyInterface wifly(p13, p14, p29, p30, "GTother", "GeorgeP@1927", WPA); + +HTTPClient http; +char str[512]; + +void setupWiFi() +{ + printf("trying to connect"); + wifly.init(); + while (!wifly.connect()) wait (0.1); + printf("IP Address is %s\n\r", wifly.getIPAddress()); +} + +vector<robotCommand>* getTagCommands(int tagID) +{ + vector<robotCommand>* commandVector = new vector<robotCommand>(); + printLCD("Translating", "Web Server"); + char url[512]; + char str[512]; + sprintf(url, "http://sabacai.com/index.php?tag=%d", tagID); + printf("url is %s", url); + int ret = http.get(url, str, 512); + if (!ret) { + printf("Tag String Received - read %d characters\n", strlen(str)); + str[strlen(str)-1] = '\0'; // remove the last column + printf("Result: %s\n", str); + } + + char * pch; + printf ("Splitting string \"%s\" into tokens:\n",str); + pch = strtok (str,","); + + int i = 0; + CommandType commandID = None; + + while (pch != NULL) + { + printf ("%s\n",pch); + double magnitude = 0.0; + + if ((i&0x1) == 0) + { + // this is the command type + if (strcmp(pch, "FORWARD") == 0) + commandID = Forward; + else if (strcmp(pch, "REVERSE") == 0) + commandID = Reverse; + else if (strcmp(pch, "LEFT") == 0) + commandID = Left; + else if (strcmp(pch, "RIGHT") == 0) + commandID = Right; + else if (strcmp(pch, "PLAYSOUND") == 0) + commandID = PlaySound; + + printf("command name is %s, id is %d", pch, commandID); + } + else + { + // this is the magnitude + magnitude = atof(pch); + printf("magnitude is %f", magnitude); + } + + // do some stuff here + if (i != 0 && ((i&0x1) == 1)) + { + // add the command to the vector + printf(" now adding %d, %f", commandID, magnitude); + commandVector->push_back(robotCommand(commandID, magnitude)); + } + i+=1; + pch = strtok (NULL, ","); + } + + return commandVector; +} \ No newline at end of file
diff -r 000000000000 -r 9fd64882c5aa wifiunit.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wifiunit.h Tue Dec 10 02:17:48 2013 +0000 @@ -0,0 +1,2 @@ +void setupWiFi(); +vector<robotCommand>* getTagCommands(int tagID);