Yuri T / Mbed 2 deprecated miniRobot

Dependencies:   mbed

Committer:
geovas
Date:
Sun Feb 15 08:04:49 2015 +0000
Revision:
3:6ec54d838b44
Parent:
2:d8db9db36fb7
Child:
4:d58b9ad5d43d
v1.1

Who changed what in which revision?

UserRevisionLine numberNew 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 0:341347d8ccbc 4 #define LM1_ D3
geovas 1:29eeaabaa8e1 5 #define LM2_ D7
geovas 0:341347d8ccbc 6 #define RM1_ D6
geovas 1:29eeaabaa8e1 7 #define RM2_ D5
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 0:341347d8ccbc 14 PwmOut RM2(LM2_);
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 }