Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@4:d58b9ad5d43d, 2015-02-27 (annotated)
- Committer:
- geovas
- Date:
- Fri Feb 27 10:39:33 2015 +0000
- Revision:
- 4:d58b9ad5d43d
- Parent:
- 3:6ec54d838b44
fully working source code!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
geovas | 0:341347d8ccbc | 1 | #include "mbed.h" |
geovas | 2:d8db9db36fb7 | 2 | #include "echo_sensor.h" // echo sensor library |
geovas | 0:341347d8ccbc | 3 | |
geovas | 4:d58b9ad5d43d | 4 | #define LM1_ D10 |
geovas | 4:d58b9ad5d43d | 5 | #define LM2_ D9 |
geovas | 4:d58b9ad5d43d | 6 | #define RM1_ D5 |
geovas | 4:d58b9ad5d43d | 7 | #define RM2_ D6 |
geovas | 3:6ec54d838b44 | 8 | #define RX_ PTC14 |
geovas | 3:6ec54d838b44 | 9 | #define TX_ PTC15 |
geovas | 0:341347d8ccbc | 10 | |
geovas | 0:341347d8ccbc | 11 | PwmOut LM1(LM1_); // motors configuration |
geovas | 0:341347d8ccbc | 12 | PwmOut LM2(LM2_); |
geovas | 0:341347d8ccbc | 13 | PwmOut RM1(RM1_); |
geovas | 4:d58b9ad5d43d | 14 | PwmOut RM2(RM2_); |
geovas | 0:341347d8ccbc | 15 | |
geovas | 3:6ec54d838b44 | 16 | Serial link(TX_, RX_); // bluetooth serial port |
geovas | 3:6ec54d838b44 | 17 | //Serial link(USBTX, USBRX); // usb serial port |
geovas | 0:341347d8ccbc | 18 | |
geovas | 0:341347d8ccbc | 19 | void analogWrite(mbed::PwmOut *prt, char spd) // write to PWM |
geovas | 0:341347d8ccbc | 20 | { |
geovas | 3:6ec54d838b44 | 21 | float a = spd / 256.0; // convert 0..256 to 0..1 |
geovas | 0:341347d8ccbc | 22 | *prt = a; |
geovas | 0:341347d8ccbc | 23 | } |
geovas | 0:341347d8ccbc | 24 | |
geovas | 0:341347d8ccbc | 25 | void GoForward(char spd) |
geovas | 0:341347d8ccbc | 26 | { |
geovas | 0:341347d8ccbc | 27 | analogWrite(&LM1,spd); |
geovas | 0:341347d8ccbc | 28 | analogWrite(&LM2,0); |
geovas | 0:341347d8ccbc | 29 | analogWrite(&RM1,spd); |
geovas | 0:341347d8ccbc | 30 | analogWrite(&RM2,0); |
geovas | 0:341347d8ccbc | 31 | } |
geovas | 0:341347d8ccbc | 32 | |
geovas | 0:341347d8ccbc | 33 | void GoBack(char spd) |
geovas | 0:341347d8ccbc | 34 | { |
geovas | 0:341347d8ccbc | 35 | analogWrite(&LM1,0); |
geovas | 0:341347d8ccbc | 36 | analogWrite(&LM2,spd); |
geovas | 0:341347d8ccbc | 37 | analogWrite(&RM1,0); |
geovas | 0:341347d8ccbc | 38 | analogWrite(&RM2,spd); |
geovas | 0:341347d8ccbc | 39 | } |
geovas | 0:341347d8ccbc | 40 | |
geovas | 0:341347d8ccbc | 41 | void TurnRight(char spd) |
geovas | 0:341347d8ccbc | 42 | { |
geovas | 0:341347d8ccbc | 43 | analogWrite(&LM1,spd); |
geovas | 0:341347d8ccbc | 44 | analogWrite(&LM2,0); |
geovas | 0:341347d8ccbc | 45 | analogWrite(&RM1,0); |
geovas | 0:341347d8ccbc | 46 | analogWrite(&RM2,spd); |
geovas | 0:341347d8ccbc | 47 | } |
geovas | 0:341347d8ccbc | 48 | |
geovas | 0:341347d8ccbc | 49 | void TurnLeft(char spd) |
geovas | 0:341347d8ccbc | 50 | { |
geovas | 0:341347d8ccbc | 51 | |
geovas | 0:341347d8ccbc | 52 | analogWrite(&LM1,0); |
geovas | 0:341347d8ccbc | 53 | analogWrite(&LM2,spd); |
geovas | 0:341347d8ccbc | 54 | analogWrite(&RM1,spd); |
geovas | 0:341347d8ccbc | 55 | analogWrite(&RM2,0); |
geovas | 0:341347d8ccbc | 56 | } |
geovas | 0:341347d8ccbc | 57 | |
geovas | 0:341347d8ccbc | 58 | int charToInt(char a, char b, char c) |
geovas | 0:341347d8ccbc | 59 | { |
geovas | 0:341347d8ccbc | 60 | int ans; |
geovas | 0:341347d8ccbc | 61 | if (a>'9' || b>'9' || c>'9') return 0; |
geovas | 0:341347d8ccbc | 62 | if (a<'0' || b<'0' || c<'0') return 0; |
geovas | 0:341347d8ccbc | 63 | ans = (a - 48)*100 + (b - 48)*10 + (c - 48); |
geovas | 0:341347d8ccbc | 64 | if (ans > 255) ans = 255; |
geovas | 0:341347d8ccbc | 65 | return ans; |
geovas | 0:341347d8ccbc | 66 | } |
geovas | 0:341347d8ccbc | 67 | |
geovas | 0:341347d8ccbc | 68 | char str[4]; |
geovas | 0:341347d8ccbc | 69 | void intToChar(int dat) |
geovas | 0:341347d8ccbc | 70 | { |
geovas | 0:341347d8ccbc | 71 | int d = dat; |
geovas | 0:341347d8ccbc | 72 | |
geovas | 0:341347d8ccbc | 73 | if (dat<100) str[0] = '0'; |
geovas | 0:341347d8ccbc | 74 | else |
geovas | 0:341347d8ccbc | 75 | { |
geovas | 0:341347d8ccbc | 76 | str[0] = d/100 + 48; |
geovas | 0:341347d8ccbc | 77 | d %= 100; |
geovas | 0:341347d8ccbc | 78 | } |
geovas | 0:341347d8ccbc | 79 | if (dat<10) str[1] = '0'; |
geovas | 0:341347d8ccbc | 80 | else |
geovas | 0:341347d8ccbc | 81 | { |
geovas | 0:341347d8ccbc | 82 | str[1] = d/10 + 48; |
geovas | 0:341347d8ccbc | 83 | d %= 10; |
geovas | 0:341347d8ccbc | 84 | } |
geovas | 0:341347d8ccbc | 85 | str[2] = d + 48; |
geovas | 0:341347d8ccbc | 86 | } |
geovas | 0:341347d8ccbc | 87 | |
geovas | 3:6ec54d838b44 | 88 | char tolower(char ch) |
geovas | 0:341347d8ccbc | 89 | { |
geovas | 0:341347d8ccbc | 90 | if (ch >= 'a' && ch <= 'z') return ch; |
geovas | 0:341347d8ccbc | 91 | if (ch >= 'A' && ch <= 'Z') return ch - 'A' + 'a'; |
geovas | 0:341347d8ccbc | 92 | return 0; |
geovas | 0:341347d8ccbc | 93 | } |
geovas | 0:341347d8ccbc | 94 | |
geovas | 0:341347d8ccbc | 95 | int main(void) |
geovas | 0:341347d8ccbc | 96 | { |
geovas | 0:341347d8ccbc | 97 | char dat[5], b, i; |
geovas | 3:6ec54d838b44 | 98 | link.baud(115200); |
geovas | 1:29eeaabaa8e1 | 99 | initEcho(); // initialize echo sensor |
geovas | 0:341347d8ccbc | 100 | GoForward(0); // stop all motors |
geovas | 0:341347d8ccbc | 101 | |
geovas | 2:d8db9db36fb7 | 102 | while (!link.readable()); // trying to fount the starting byte |
geovas | 0:341347d8ccbc | 103 | while (link.getc() != 'Z'); |
geovas | 0:341347d8ccbc | 104 | |
geovas | 0:341347d8ccbc | 105 | while (true) |
geovas | 0:341347d8ccbc | 106 | { |
geovas | 3:6ec54d838b44 | 107 | link.printf("Take a sequence\n\r"); |
geovas | 3:6ec54d838b44 | 108 | |
geovas | 3:6ec54d838b44 | 109 | for (i=0; i<5; i++) |
geovas | 0:341347d8ccbc | 110 | { |
geovas | 3:6ec54d838b44 | 111 | while (!link.readable()); |
geovas | 0:341347d8ccbc | 112 | dat[i] = link.getc(); |
geovas | 3:6ec54d838b44 | 113 | } |
geovas | 3:6ec54d838b44 | 114 | |
geovas | 3:6ec54d838b44 | 115 | b = tolower(dat[0]); |
geovas | 0:341347d8ccbc | 116 | int spd = charToInt(dat[1],dat[2],dat[3]); |
geovas | 3:6ec54d838b44 | 117 | |
geovas | 3:6ec54d838b44 | 118 | if (b == 'f') GoForward(spd); // movements |
geovas | 3:6ec54d838b44 | 119 | if (b == 'b') GoBack(spd); |
geovas | 3:6ec54d838b44 | 120 | if (b == 'r') TurnRight(spd); |
geovas | 3:6ec54d838b44 | 121 | if (b == 'l') TurnLeft(spd); |
geovas | 3:6ec54d838b44 | 122 | if (b == 'n') GoForward(0); |
geovas | 0:341347d8ccbc | 123 | |
geovas | 3:6ec54d838b44 | 124 | if (b == 'e') // echo sensor |
geovas | 0:341347d8ccbc | 125 | { |
geovas | 1:29eeaabaa8e1 | 126 | intToChar(getEcho()); |
geovas | 1:29eeaabaa8e1 | 127 | link.printf(str); |
geovas | 0:341347d8ccbc | 128 | } |
geovas | 3:6ec54d838b44 | 129 | |
geovas | 3:6ec54d838b44 | 130 | //link.printf(dat); |
geovas | 3:6ec54d838b44 | 131 | link.printf("%c%d ",b,spd); |
geovas | 0:341347d8ccbc | 132 | } |
geovas | 0:341347d8ccbc | 133 | } |