Look for a LOGO (.LGO) file on the mbed and run the commands in it. Only supports a small subset of the LOGO commands.
main.cpp@0:864f6ee5169b, 2011-04-09 (annotated)
- Committer:
- nbbhav
- Date:
- Sat Apr 09 18:06:27 2011 +0000
- Revision:
- 0:864f6ee5169b
Initial version supporting FORWARD, BACK, LEFT and RIGHT commands.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nbbhav | 0:864f6ee5169b | 1 | /* |
nbbhav | 0:864f6ee5169b | 2 | * Main program, looks for LOGO file on robot and executes the commands |
nbbhav | 0:864f6ee5169b | 3 | * within it. |
nbbhav | 0:864f6ee5169b | 4 | */ |
nbbhav | 0:864f6ee5169b | 5 | |
nbbhav | 0:864f6ee5169b | 6 | #include "mbed.h" |
nbbhav | 0:864f6ee5169b | 7 | #include "m3pi.h" |
nbbhav | 0:864f6ee5169b | 8 | |
nbbhav | 0:864f6ee5169b | 9 | #include "commands.h" |
nbbhav | 0:864f6ee5169b | 10 | |
nbbhav | 0:864f6ee5169b | 11 | m3pi m3pi(p23,p9,p10); |
nbbhav | 0:864f6ee5169b | 12 | LocalFileSystem local("local"); |
nbbhav | 0:864f6ee5169b | 13 | |
nbbhav | 0:864f6ee5169b | 14 | FILE* open_last_lgo_file() { |
nbbhav | 0:864f6ee5169b | 15 | char* fn = NULL; |
nbbhav | 0:864f6ee5169b | 16 | |
nbbhav | 0:864f6ee5169b | 17 | DIR *d = opendir("/local"); |
nbbhav | 0:864f6ee5169b | 18 | for (struct dirent *p = readdir(d); p != NULL; p = readdir(d)) { |
nbbhav | 0:864f6ee5169b | 19 | const char* dot = strchr(p->d_name, '.'); |
nbbhav | 0:864f6ee5169b | 20 | if (dot != NULL) { |
nbbhav | 0:864f6ee5169b | 21 | const char* ext = dot+1; // skip '.' |
nbbhav | 0:864f6ee5169b | 22 | if (strcmp(ext, "LGO") == 0) { |
nbbhav | 0:864f6ee5169b | 23 | m3pi.cls(); |
nbbhav | 0:864f6ee5169b | 24 | m3pi.printf("Found"); |
nbbhav | 0:864f6ee5169b | 25 | m3pi.locate(0,1); |
nbbhav | 0:864f6ee5169b | 26 | m3pi.printf("%.*s", 8, p->d_name); |
nbbhav | 0:864f6ee5169b | 27 | |
nbbhav | 0:864f6ee5169b | 28 | // Save reference to the file. Treat the last file as the |
nbbhav | 0:864f6ee5169b | 29 | // most recent. This may or may not be correct! |
nbbhav | 0:864f6ee5169b | 30 | size_t fn_len = strlen("/local/") + strlen(p->d_name) + 0; |
nbbhav | 0:864f6ee5169b | 31 | fn = (char*)((fn != NULL) ? realloc(fn, fn_len) : malloc(fn_len)); |
nbbhav | 0:864f6ee5169b | 32 | sprintf(fn, "/local/%s", p->d_name); |
nbbhav | 0:864f6ee5169b | 33 | } |
nbbhav | 0:864f6ee5169b | 34 | } |
nbbhav | 0:864f6ee5169b | 35 | } |
nbbhav | 0:864f6ee5169b | 36 | closedir(d); |
nbbhav | 0:864f6ee5169b | 37 | |
nbbhav | 0:864f6ee5169b | 38 | FILE* f = NULL; |
nbbhav | 0:864f6ee5169b | 39 | if (fn != NULL) { |
nbbhav | 0:864f6ee5169b | 40 | f = fopen(fn, "r"); |
nbbhav | 0:864f6ee5169b | 41 | free(fn); |
nbbhav | 0:864f6ee5169b | 42 | fn = NULL; |
nbbhav | 0:864f6ee5169b | 43 | wait(2.0); |
nbbhav | 0:864f6ee5169b | 44 | } |
nbbhav | 0:864f6ee5169b | 45 | return f; |
nbbhav | 0:864f6ee5169b | 46 | } |
nbbhav | 0:864f6ee5169b | 47 | |
nbbhav | 0:864f6ee5169b | 48 | int main() { |
nbbhav | 0:864f6ee5169b | 49 | FILE* f = open_last_lgo_file(); |
nbbhav | 0:864f6ee5169b | 50 | if (f != NULL) { |
nbbhav | 0:864f6ee5169b | 51 | int line = 1; |
nbbhav | 0:864f6ee5169b | 52 | char buf[256]; |
nbbhav | 0:864f6ee5169b | 53 | while (!feof(f)) { |
nbbhav | 0:864f6ee5169b | 54 | const char* str = fgets(buf, sizeof(buf), f); |
nbbhav | 0:864f6ee5169b | 55 | if (str == NULL) { |
nbbhav | 0:864f6ee5169b | 56 | break; |
nbbhav | 0:864f6ee5169b | 57 | } |
nbbhav | 0:864f6ee5169b | 58 | int pos = 0; |
nbbhav | 0:864f6ee5169b | 59 | while (true) { |
nbbhav | 0:864f6ee5169b | 60 | Command* cmd = build_command(line, str, &pos); |
nbbhav | 0:864f6ee5169b | 61 | if (cmd != NULL) { |
nbbhav | 0:864f6ee5169b | 62 | m3pi.cls(); |
nbbhav | 0:864f6ee5169b | 63 | m3pi.printf("%s", cmd->string()); |
nbbhav | 0:864f6ee5169b | 64 | wait(2.0); |
nbbhav | 0:864f6ee5169b | 65 | cmd->go(); |
nbbhav | 0:864f6ee5169b | 66 | destroy_command(cmd); |
nbbhav | 0:864f6ee5169b | 67 | } else |
nbbhav | 0:864f6ee5169b | 68 | break; |
nbbhav | 0:864f6ee5169b | 69 | } |
nbbhav | 0:864f6ee5169b | 70 | ++line; |
nbbhav | 0:864f6ee5169b | 71 | } |
nbbhav | 0:864f6ee5169b | 72 | fclose(f); |
nbbhav | 0:864f6ee5169b | 73 | m3pi.cls(); |
nbbhav | 0:864f6ee5169b | 74 | m3pi.printf("Success"); |
nbbhav | 0:864f6ee5169b | 75 | } else { |
nbbhav | 0:864f6ee5169b | 76 | m3pi.cls(); |
nbbhav | 0:864f6ee5169b | 77 | m3pi.printf("NotFound"); |
nbbhav | 0:864f6ee5169b | 78 | } |
nbbhav | 0:864f6ee5169b | 79 | } |