A serial parser for a specific project
Fork of Serial_HelloWorld_Mbed by
main.cpp@7:d25708589910, 2015-07-14 (annotated)
- Committer:
- philipgoosen
- Date:
- Tue Jul 14 15:48:52 2015 +0000
- Revision:
- 7:d25708589910
- Parent:
- 6:da101b92bc2d
moo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbed_official | 0:879aa9d0247b | 1 | #include "mbed.h" |
philipgoosen | 7:d25708589910 | 2 | |
philipgoosen | 5:1ba2b0e9e582 | 3 | // Data parser by Philip Goosen |
mbed_official | 0:879aa9d0247b | 4 | |
philipgoosen | 3:3399899d714b | 5 | /*#define TX USBTX |
philipgoosen | 3:3399899d714b | 6 | #define RX USBRX*/ |
philipgoosen | 3:3399899d714b | 7 | |
philipgoosen | 4:178b04ae427e | 8 | #define TX PA_2 |
philipgoosen | 4:178b04ae427e | 9 | #define RX PA_3 |
philipgoosen | 7:d25708589910 | 10 | #define VERSION 1 |
philipgoosen | 2:dcca46d7ca21 | 11 | |
philipgoosen | 2:dcca46d7ca21 | 12 | Serial pc(TX, RX); // tx, rx |
philipgoosen | 1:49996c8d2982 | 13 | DigitalOut led(LED1); |
philipgoosen | 7:d25708589910 | 14 | |
philipgoosen | 7:d25708589910 | 15 | using namespace std; |
mbed_official | 0:879aa9d0247b | 16 | |
philipgoosen | 6:da101b92bc2d | 17 | int isDigit(char digit) |
philipgoosen | 2:dcca46d7ca21 | 18 | { |
philipgoosen | 2:dcca46d7ca21 | 19 | if (digit >= '0' or digit <= '9') |
philipgoosen | 2:dcca46d7ca21 | 20 | { |
philipgoosen | 2:dcca46d7ca21 | 21 | return 1; |
philipgoosen | 2:dcca46d7ca21 | 22 | } |
philipgoosen | 2:dcca46d7ca21 | 23 | else |
philipgoosen | 2:dcca46d7ca21 | 24 | { |
philipgoosen | 2:dcca46d7ca21 | 25 | return 0; |
philipgoosen | 2:dcca46d7ca21 | 26 | } |
philipgoosen | 2:dcca46d7ca21 | 27 | } |
philipgoosen | 2:dcca46d7ca21 | 28 | |
philipgoosen | 5:1ba2b0e9e582 | 29 | int isLetter(char let) // Only works for upper case |
philipgoosen | 5:1ba2b0e9e582 | 30 | { |
philipgoosen | 5:1ba2b0e9e582 | 31 | if (let >= 'A' or let <= 'Z') |
philipgoosen | 5:1ba2b0e9e582 | 32 | { |
philipgoosen | 5:1ba2b0e9e582 | 33 | return 1; |
philipgoosen | 5:1ba2b0e9e582 | 34 | } |
philipgoosen | 6:da101b92bc2d | 35 | else |
philipgoosen | 6:da101b92bc2d | 36 | { |
philipgoosen | 6:da101b92bc2d | 37 | return 0; |
philipgoosen | 6:da101b92bc2d | 38 | } |
philipgoosen | 6:da101b92bc2d | 39 | } |
philipgoosen | 6:da101b92bc2d | 40 | |
philipgoosen | 6:da101b92bc2d | 41 | int isAlpha(char c) |
philipgoosen | 6:da101b92bc2d | 42 | { |
philipgoosen | 6:da101b92bc2d | 43 | if( isDigit(c) or isLetter(c) ) |
philipgoosen | 6:da101b92bc2d | 44 | { |
philipgoosen | 6:da101b92bc2d | 45 | return 1; |
philipgoosen | 6:da101b92bc2d | 46 | } |
philipgoosen | 6:da101b92bc2d | 47 | else |
philipgoosen | 6:da101b92bc2d | 48 | { |
philipgoosen | 6:da101b92bc2d | 49 | return 0; |
philipgoosen | 6:da101b92bc2d | 50 | } |
philipgoosen | 5:1ba2b0e9e582 | 51 | } |
philipgoosen | 5:1ba2b0e9e582 | 52 | |
philipgoosen | 2:dcca46d7ca21 | 53 | int toDigit(char c) |
philipgoosen | 2:dcca46d7ca21 | 54 | { |
philipgoosen | 2:dcca46d7ca21 | 55 | return (c - '0'); |
philipgoosen | 2:dcca46d7ca21 | 56 | } |
philipgoosen | 2:dcca46d7ca21 | 57 | |
philipgoosen | 2:dcca46d7ca21 | 58 | int main() |
philipgoosen | 2:dcca46d7ca21 | 59 | { |
philipgoosen | 6:da101b92bc2d | 60 | int motor = 0; |
philipgoosen | 6:da101b92bc2d | 61 | int direction = 0; |
philipgoosen | 6:da101b92bc2d | 62 | int speed = 0; |
philipgoosen | 6:da101b92bc2d | 63 | |
philipgoosen | 1:49996c8d2982 | 64 | led=1; |
philipgoosen | 1:49996c8d2982 | 65 | wait(0.5); |
philipgoosen | 1:49996c8d2982 | 66 | led=0; |
philipgoosen | 1:49996c8d2982 | 67 | pc.baud(115200); |
philipgoosen | 7:d25708589910 | 68 | pc.printf("Philip's program VERSION"); |
philipgoosen | 2:dcca46d7ca21 | 69 | while(1) |
philipgoosen | 2:dcca46d7ca21 | 70 | { |
philipgoosen | 1:49996c8d2982 | 71 | //pc.putc(pc.getc() + 1); |
philipgoosen | 4:178b04ae427e | 72 | if (pc.getc() == '$' && pc.getc() == '#') |
philipgoosen | 1:49996c8d2982 | 73 | { |
philipgoosen | 7:d25708589910 | 74 | printf("\nRecieved input...\n"); |
philipgoosen | 4:178b04ae427e | 75 | /*led=1; |
philipgoosen | 1:49996c8d2982 | 76 | wait(1); |
philipgoosen | 1:49996c8d2982 | 77 | led=0; |
philipgoosen | 1:49996c8d2982 | 78 | led=1; |
philipgoosen | 1:49996c8d2982 | 79 | wait(1); |
philipgoosen | 4:178b04ae427e | 80 | led=0;*/ |
philipgoosen | 2:dcca46d7ca21 | 81 | |
philipgoosen | 2:dcca46d7ca21 | 82 | char c = pc.getc();// Gets a character from the computer that should be a digit from 0 - 9 |
philipgoosen | 2:dcca46d7ca21 | 83 | |
philipgoosen | 6:da101b92bc2d | 84 | //int count = toDigit(c); |
philipgoosen | 2:dcca46d7ca21 | 85 | int x = 0; |
philipgoosen | 7:d25708589910 | 86 | bool work = true; |
philipgoosen | 2:dcca46d7ca21 | 87 | |
philipgoosen | 6:da101b92bc2d | 88 | while (x < 3) |
philipgoosen | 2:dcca46d7ca21 | 89 | { |
philipgoosen | 7:d25708589910 | 90 | char cur = pc.getc(); |
philipgoosen | 7:d25708589910 | 91 | char next = pc.getc(); |
philipgoosen | 7:d25708589910 | 92 | |
philipgoosen | 7:d25708589910 | 93 | // Add alpha checks to these |
philipgoosen | 7:d25708589910 | 94 | if (cur == 'M' && x==0 && isDigit(next)) |
philipgoosen | 7:d25708589910 | 95 | { |
philipgoosen | 7:d25708589910 | 96 | motor = toDigit(next); |
philipgoosen | 7:d25708589910 | 97 | } |
philipgoosen | 7:d25708589910 | 98 | else if (cur == 'D' && x==1 && isDigit(next)) |
philipgoosen | 7:d25708589910 | 99 | { |
philipgoosen | 7:d25708589910 | 100 | direction = toDigit(next); |
philipgoosen | 7:d25708589910 | 101 | } |
philipgoosen | 7:d25708589910 | 102 | else if (cur == 'S' && x==2 && isDigit(next)) |
philipgoosen | 7:d25708589910 | 103 | { |
philipgoosen | 7:d25708589910 | 104 | char readSpeed[3] = {' ', ' ', '\0'}; |
philipgoosen | 7:d25708589910 | 105 | readSpeed[0] = next; |
philipgoosen | 7:d25708589910 | 106 | //readSpeed[2] = '\0'; |
philipgoosen | 7:d25708589910 | 107 | cur = pc.getc(); |
philipgoosen | 7:d25708589910 | 108 | if ( isDigit(cur) ) |
philipgoosen | 7:d25708589910 | 109 | { |
philipgoosen | 7:d25708589910 | 110 | readSpeed[1] = cur; |
philipgoosen | 7:d25708589910 | 111 | } |
philipgoosen | 7:d25708589910 | 112 | else |
philipgoosen | 7:d25708589910 | 113 | { |
philipgoosen | 7:d25708589910 | 114 | readSpeed[1] = '\0'; |
philipgoosen | 7:d25708589910 | 115 | } |
philipgoosen | 7:d25708589910 | 116 | speed = atoi(readSpeed); |
philipgoosen | 7:d25708589910 | 117 | } |
philipgoosen | 7:d25708589910 | 118 | else |
philipgoosen | 7:d25708589910 | 119 | { |
philipgoosen | 7:d25708589910 | 120 | work = false; |
philipgoosen | 7:d25708589910 | 121 | printf("Invalid format"); |
philipgoosen | 7:d25708589910 | 122 | } |
philipgoosen | 7:d25708589910 | 123 | |
philipgoosen | 7:d25708589910 | 124 | |
philipgoosen | 3:3399899d714b | 125 | x++; |
philipgoosen | 2:dcca46d7ca21 | 126 | } |
philipgoosen | 7:d25708589910 | 127 | if (work) |
philipgoosen | 7:d25708589910 | 128 | { |
philipgoosen | 7:d25708589910 | 129 | //set values to servo library |
philipgoosen | 7:d25708589910 | 130 | pc.printf("\nMotor %d Direction %d Speed %d", motor, speed, direction); |
philipgoosen | 7:d25708589910 | 131 | |
philipgoosen | 7:d25708589910 | 132 | } |
philipgoosen | 1:49996c8d2982 | 133 | } |
mbed_official | 0:879aa9d0247b | 134 | } |
mbed_official | 0:879aa9d0247b | 135 | } |