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@1:9848e25989f1, 2014-05-22 (annotated)
- Committer:
- bayagich
- Date:
- Thu May 22 14:39:07 2014 +0000
- Revision:
- 1:9848e25989f1
- Parent:
- 0:386c250325ce
UPdated version with comments;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mmpeter | 0:386c250325ce | 1 | #include "mbed.h" |
| mmpeter | 0:386c250325ce | 2 | #include "m3pi_ng.h" |
| mmpeter | 0:386c250325ce | 3 | #include "cmath" |
| mmpeter | 0:386c250325ce | 4 | #include "iostream" |
| mmpeter | 0:386c250325ce | 5 | |
| mmpeter | 0:386c250325ce | 6 | using namespace std; |
| mmpeter | 0:386c250325ce | 7 | |
| bayagich | 1:9848e25989f1 | 8 | m3pi thinggy; |
| mmpeter | 0:386c250325ce | 9 | |
| mmpeter | 0:386c250325ce | 10 | int main() { |
| mmpeter | 0:386c250325ce | 11 | |
| mmpeter | 0:386c250325ce | 12 | float speed = 0.25; |
| bayagich | 1:9848e25989f1 | 13 | float turn_speed = 0.2; |
| mmpeter | 0:386c250325ce | 14 | float correction; |
| mmpeter | 0:386c250325ce | 15 | float k = -0.3; |
| mmpeter | 0:386c250325ce | 16 | int sensor[5]; |
| mmpeter | 0:386c250325ce | 17 | int returned; |
| mmpeter | 0:386c250325ce | 18 | thinggy.locate(0,1); |
| mmpeter | 0:386c250325ce | 19 | thinggy.printf("Villan"); |
| mmpeter | 0:386c250325ce | 20 | thinggy.locate(0,0); |
| mmpeter | 0:386c250325ce | 21 | thinggy.printf("Pimpin"); |
| mmpeter | 0:386c250325ce | 22 | |
| mmpeter | 0:386c250325ce | 23 | wait(1.0); |
| mmpeter | 0:386c250325ce | 24 | |
| mmpeter | 0:386c250325ce | 25 | thinggy.sensor_auto_calibrate(); |
| mmpeter | 0:386c250325ce | 26 | |
| mmpeter | 0:386c250325ce | 27 | thinggy.calibrated_sensor(sensor); |
| bayagich | 1:9848e25989f1 | 28 | |
| bayagich | 1:9848e25989f1 | 29 | //find the average of the three sensors |
| mmpeter | 0:386c250325ce | 30 | returned = (sensor[1] + sensor[2] + sensor[3])/3; |
| mmpeter | 0:386c250325ce | 31 | |
| mmpeter | 0:386c250325ce | 32 | while(1) { |
| bayagich | 1:9848e25989f1 | 33 | |
| bayagich | 1:9848e25989f1 | 34 | //check if it needs to turn |
| bayagich | 1:9848e25989f1 | 35 | while(returned <= 240){ |
| bayagich | 1:9848e25989f1 | 36 | //turns right |
| mmpeter | 0:386c250325ce | 37 | while(sensor[0] < sensor[4] && thinggy.line_position() != 0){ |
| bayagich | 1:9848e25989f1 | 38 | thinggy.left_motor(turn_speed); |
| bayagich | 1:9848e25989f1 | 39 | thinggy.right_motor(-turn_speed); |
| mmpeter | 0:386c250325ce | 40 | thinggy.calibrated_sensor(sensor); |
| mmpeter | 0:386c250325ce | 41 | } |
| bayagich | 1:9848e25989f1 | 42 | //turns left |
| mmpeter | 0:386c250325ce | 43 | while(sensor[4] > sensor[0] && thinggy.line_position() != 0){ |
| bayagich | 1:9848e25989f1 | 44 | thinggy.left_motor(-turn_speed); |
| bayagich | 1:9848e25989f1 | 45 | thinggy.right_motor(turn_speed); |
| mmpeter | 0:386c250325ce | 46 | thinggy.calibrated_sensor(sensor); |
| mmpeter | 0:386c250325ce | 47 | } |
| mmpeter | 0:386c250325ce | 48 | thinggy.calibrated_sensor(sensor); |
| mmpeter | 0:386c250325ce | 49 | returned = (sensor[1] + sensor[2] + sensor[3])/3; |
| bayagich | 1:9848e25989f1 | 50 | }//while returned <= 220 |
| mmpeter | 0:386c250325ce | 51 | |
| mmpeter | 0:386c250325ce | 52 | // Curves and straightaways |
| bayagich | 1:9848e25989f1 | 53 | while(returned > 240){ |
| bayagich | 1:9848e25989f1 | 54 | float position = thinggy.line_position(); |
| bayagich | 1:9848e25989f1 | 55 | correction = k*(position); |
| mmpeter | 0:386c250325ce | 56 | |
| bayagich | 1:9848e25989f1 | 57 | // -1.0 is far left, 1.0 is far right, 0.0 in the middle |
| mmpeter | 0:386c250325ce | 58 | |
| bayagich | 1:9848e25989f1 | 59 | //speed limiting for right motor |
| bayagich | 1:9848e25989f1 | 60 | if(speed + correction > 1){ |
| bayagich | 1:9848e25989f1 | 61 | thinggy.right_motor(0.6); |
| bayagich | 1:9848e25989f1 | 62 | thinggy.left_motor(speed-correction); |
| bayagich | 1:9848e25989f1 | 63 | } |
| bayagich | 1:9848e25989f1 | 64 | |
| bayagich | 1:9848e25989f1 | 65 | //speed limiting for left motor |
| bayagich | 1:9848e25989f1 | 66 | if(speed - correction > 1){ |
| bayagich | 1:9848e25989f1 | 67 | thinggy.left_motor(0.6); |
| bayagich | 1:9848e25989f1 | 68 | thinggy.right_motor(speed+correction); |
| bayagich | 1:9848e25989f1 | 69 | } |
| bayagich | 1:9848e25989f1 | 70 | else{ |
| bayagich | 1:9848e25989f1 | 71 | thinggy.left_motor(speed-correction); |
| bayagich | 1:9848e25989f1 | 72 | thinggy.right_motor(speed+correction); |
| bayagich | 1:9848e25989f1 | 73 | } |
| bayagich | 1:9848e25989f1 | 74 | thinggy.calibrated_sensor(sensor); |
| bayagich | 1:9848e25989f1 | 75 | returned = (sensor[1] + sensor[2] + sensor[3])/3; |
| bayagich | 1:9848e25989f1 | 76 | }//while returned > 220 |
| bayagich | 1:9848e25989f1 | 77 | |
| bayagich | 1:9848e25989f1 | 78 | }//while(1) |
| mmpeter | 0:386c250325ce | 79 | } |
| mmpeter | 0:386c250325ce | 80 | |
| mmpeter | 0:386c250325ce | 81 | |
| mmpeter | 0:386c250325ce | 82 |