Code for autonomous ground vehicle, Data Bus, 3rd place winner in 2012 Sparkfun AVC.

Dependencies:   Watchdog mbed Schedule SimpleFilter LSM303DLM PinDetect DebounceIn Servo

Committer:
shimniok
Date:
Wed Jun 20 14:57:48 2012 +0000
Revision:
0:826c6171fc1b
Updated documentation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shimniok 0:826c6171fc1b 1 // convert character to an int
shimniok 0:826c6171fc1b 2 //
shimniok 0:826c6171fc1b 3 int ctoi(char c)
shimniok 0:826c6171fc1b 4 {
shimniok 0:826c6171fc1b 5 int i=-1;
shimniok 0:826c6171fc1b 6
shimniok 0:826c6171fc1b 7 if (c >= '0' && c <= '9') {
shimniok 0:826c6171fc1b 8 i = c - '0';
shimniok 0:826c6171fc1b 9 }
shimniok 0:826c6171fc1b 10
shimniok 0:826c6171fc1b 11 //printf("char: %c int %d\n", c, i);
shimniok 0:826c6171fc1b 12
shimniok 0:826c6171fc1b 13 return i;
shimniok 0:826c6171fc1b 14 }
shimniok 0:826c6171fc1b 15
shimniok 0:826c6171fc1b 16
shimniok 0:826c6171fc1b 17 // convert string to floating point
shimniok 0:826c6171fc1b 18 //
shimniok 0:826c6171fc1b 19 double cvstof(char *s)
shimniok 0:826c6171fc1b 20 {
shimniok 0:826c6171fc1b 21 double f=0.0;
shimniok 0:826c6171fc1b 22 double mult = 0.1;
shimniok 0:826c6171fc1b 23 bool neg = false;
shimniok 0:826c6171fc1b 24 //char dec = 1;
shimniok 0:826c6171fc1b 25
shimniok 0:826c6171fc1b 26 // leading spaces
shimniok 0:826c6171fc1b 27 while (*s == ' ' || *s == '\t') {
shimniok 0:826c6171fc1b 28 s++;
shimniok 0:826c6171fc1b 29 if (*s == 0) break;
shimniok 0:826c6171fc1b 30 }
shimniok 0:826c6171fc1b 31
shimniok 0:826c6171fc1b 32 // What about negative numbers?
shimniok 0:826c6171fc1b 33 if (*s == '-') {
shimniok 0:826c6171fc1b 34 neg = true;
shimniok 0:826c6171fc1b 35 s++;
shimniok 0:826c6171fc1b 36 }
shimniok 0:826c6171fc1b 37
shimniok 0:826c6171fc1b 38 // before the decimal
shimniok 0:826c6171fc1b 39 //
shimniok 0:826c6171fc1b 40 while (*s != 0) {
shimniok 0:826c6171fc1b 41 if (*s == '.') {
shimniok 0:826c6171fc1b 42 s++;
shimniok 0:826c6171fc1b 43 break;
shimniok 0:826c6171fc1b 44 }
shimniok 0:826c6171fc1b 45 f = (f * 10.0) + (double) ctoi(*s);
shimniok 0:826c6171fc1b 46 s++;
shimniok 0:826c6171fc1b 47 }
shimniok 0:826c6171fc1b 48 // after the decimal
shimniok 0:826c6171fc1b 49 while (*s != 0 && *s >= '0' && *s <= '9') {
shimniok 0:826c6171fc1b 50 f += (double) ctoi(*s) * mult;
shimniok 0:826c6171fc1b 51 mult /= 10;
shimniok 0:826c6171fc1b 52 s++;
shimniok 0:826c6171fc1b 53 }
shimniok 0:826c6171fc1b 54
shimniok 0:826c6171fc1b 55 // if we were negative...
shimniok 0:826c6171fc1b 56 if (neg) f = -f;
shimniok 0:826c6171fc1b 57
shimniok 0:826c6171fc1b 58 return f;
shimniok 0:826c6171fc1b 59 }
shimniok 0:826c6171fc1b 60
shimniok 0:826c6171fc1b 61 // copy t to s until delimiter is reached
shimniok 0:826c6171fc1b 62 // return location of delimiter+1 in t
shimniok 0:826c6171fc1b 63 // if s or t null, return null
shimniok 0:826c6171fc1b 64 char *split(char *s, char *t, int max, char delim)
shimniok 0:826c6171fc1b 65 {
shimniok 0:826c6171fc1b 66 int i = 0;
shimniok 0:826c6171fc1b 67
shimniok 0:826c6171fc1b 68 if (s == 0 || t == 0)
shimniok 0:826c6171fc1b 69 return 0;
shimniok 0:826c6171fc1b 70
shimniok 0:826c6171fc1b 71 while (*t != 0 && *t != '\n' && *t != delim && i < max) {
shimniok 0:826c6171fc1b 72 *s++ = *t++;
shimniok 0:826c6171fc1b 73 i++;
shimniok 0:826c6171fc1b 74 }
shimniok 0:826c6171fc1b 75 *s = 0;
shimniok 0:826c6171fc1b 76
shimniok 0:826c6171fc1b 77 return t+1;
shimniok 0:826c6171fc1b 78 }