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.
LineFollowingRobot/main.cpp@7:b9c2097e5cb2, 2019-03-14 (annotated)
- Committer:
- Nicolaemf
- Date:
- Thu Mar 14 12:31:39 2019 +0000
- Revision:
- 7:b9c2097e5cb2
- Parent:
- 6:b457f1e2fff8
correction of minor build bugs;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Nicolaemf | 0:a02a278513d9 | 1 | #include <mbed.h> |
Nicolaemf | 7:b9c2097e5cb2 | 2 | #include "L298_H.h" |
Nicolaemf | 1:a2ceed49374e | 3 | #include "IRSensor_H.h" |
Nicolaemf | 0:a02a278513d9 | 4 | |
Nicolaemf | 2:74d8b693bc62 | 5 | /* |
Nicolaemf | 2:74d8b693bc62 | 6 | Team Design Project 3 Group 1 : Create a Line Following Robot |
Nicolaemf | 0:a02a278513d9 | 7 | |
Nicolaemf | 2:74d8b693bc62 | 8 | -----PINOUT----- |
Nicolaemf | 2:74d8b693bc62 | 9 | |
Nicolaemf | 2:74d8b693bc62 | 10 | IR Sensor Pinout : |
Nicolaemf | 2:74d8b693bc62 | 11 | - Left Sensor : PTC6 |
Nicolaemf | 2:74d8b693bc62 | 12 | - Middle Left Sensor : PTC5 |
Nicolaemf | 2:74d8b693bc62 | 13 | - Middle Sensor : PTC4 |
Nicolaemf | 2:74d8b693bc62 | 14 | - Middle Right Sensor : PTC3 |
Nicolaemf | 2:74d8b693bc62 | 15 | - Right Sensor : PTC0 |
Nicolaemf | 2:74d8b693bc62 | 16 | |
Nicolaemf | 2:74d8b693bc62 | 17 | Motor Left Control : |
Nicolaemf | 7:b9c2097e5cb2 | 18 | - Motor Enable PWM : PTA12 |
Nicolaemf | 6:b457f1e2fff8 | 19 | - Backwards Dout : PTA4 |
Nicolaemf | 6:b457f1e2fff8 | 20 | - Forward Dout : PTA5 |
Nicolaemf | 2:74d8b693bc62 | 21 | |
Nicolaemf | 4:645b5d648c64 | 22 | Motor Right Control : |
Nicolaemf | 7:b9c2097e5cb2 | 23 | - Motor Enable PWM : PTA13 |
Nicolaemf | 6:b457f1e2fff8 | 24 | - Backwards Dout : PTD5 |
Nicolaemf | 6:b457f1e2fff8 | 25 | - Forward Dout : PTD0 |
Nicolaemf | 2:74d8b693bc62 | 26 | |
Nicolaemf | 2:74d8b693bc62 | 27 | -----ARCHITECTURE----- |
Nicolaemf | 2:74d8b693bc62 | 28 | |
Nicolaemf | 2:74d8b693bc62 | 29 | RobotControl: |
Nicolaemf | 2:74d8b693bc62 | 30 | Class which controls the speed and Direction of the Robot |
Nicolaemf | 2:74d8b693bc62 | 31 | |
Nicolaemf | 2:74d8b693bc62 | 32 | IRSensor : |
Nicolaemf | 2:74d8b693bc62 | 33 | Class which deals with sampling the IR sensors and with the PID Calculations |
Nicolaemf | 2:74d8b693bc62 | 34 | The sampling happens every 10 ms thanks to the IRsampling Ticker |
Nicolaemf | 2:74d8b693bc62 | 35 | |
Nicolaemf | 2:74d8b693bc62 | 36 | */ |
Nicolaemf | 2:74d8b693bc62 | 37 | |
Nicolaemf | 2:74d8b693bc62 | 38 | |
Nicolaemf | 2:74d8b693bc62 | 39 | |
Nicolaemf | 2:74d8b693bc62 | 40 | Ticker IRsampling; |
Nicolaemf | 5:bb0bec710c91 | 41 | Timer t; |
Nicolaemf | 5:bb0bec710c91 | 42 | DigitalOut myled(LED_RED); |
Nicolaemf | 0:a02a278513d9 | 43 | |
Nicolaemf | 0:a02a278513d9 | 44 | int main(){ |
Nicolaemf | 0:a02a278513d9 | 45 | |
Nicolaemf | 2:74d8b693bc62 | 46 | |
Nicolaemf | 1:a2ceed49374e | 47 | bool toggleIR; |
Nicolaemf | 1:a2ceed49374e | 48 | |
Nicolaemf | 5:bb0bec710c91 | 49 | IRSensor IRSensor(PTC6, PTC5, PTC4, PTC3, PTC0, 0.27, 0.0, 0.0); |
Nicolaemf | 1:a2ceed49374e | 50 | |
Nicolaemf | 2:74d8b693bc62 | 51 | IRsampling.attach(callback(&IRSensor, &IRSensor::Sample), 0.01); |
Nicolaemf | 0:a02a278513d9 | 52 | |
Nicolaemf | 2:74d8b693bc62 | 53 | //initialise the class twice, one controls the left part and the other the right |
Nicolaemf | 6:b457f1e2fff8 | 54 | L298 controlLeft(PTA12,PTA4,PTA5); |
Nicolaemf | 6:b457f1e2fff8 | 55 | L298 controlRight(PTA13,PTD5,PTD0); |
Nicolaemf | 0:a02a278513d9 | 56 | |
Nicolaemf | 5:bb0bec710c91 | 57 | myled = 0; |
Nicolaemf | 5:bb0bec710c91 | 58 | |
Nicolaemf | 0:a02a278513d9 | 59 | |
Nicolaemf | 0:a02a278513d9 | 60 | |
Nicolaemf | 0:a02a278513d9 | 61 | while(1){ |
Nicolaemf | 1:a2ceed49374e | 62 | |
Nicolaemf | 6:b457f1e2fff8 | 63 | controlLeft.SetDirection(1); |
Nicolaemf | 6:b457f1e2fff8 | 64 | controlRight.SetDirection(1); |
Nicolaemf | 5:bb0bec710c91 | 65 | |
Nicolaemf | 5:bb0bec710c91 | 66 | controlLeft.SetSpeed(0.3); |
Nicolaemf | 5:bb0bec710c91 | 67 | controlRight.SetSpeed(0.3); |
Nicolaemf | 5:bb0bec710c91 | 68 | |
Nicolaemf | 5:bb0bec710c91 | 69 | myled =1; |
Nicolaemf | 5:bb0bec710c91 | 70 | |
Nicolaemf | 5:bb0bec710c91 | 71 | wait(1); |
Nicolaemf | 5:bb0bec710c91 | 72 | |
Nicolaemf | 5:bb0bec710c91 | 73 | controlLeft.SetDirection(1); |
Nicolaemf | 5:bb0bec710c91 | 74 | controlRight.SetDirection(0); |
Nicolaemf | 5:bb0bec710c91 | 75 | |
Nicolaemf | 5:bb0bec710c91 | 76 | controlLeft.SetSpeed(0.3); |
Nicolaemf | 5:bb0bec710c91 | 77 | controlRight.SetSpeed(0.3); |
Nicolaemf | 5:bb0bec710c91 | 78 | |
Nicolaemf | 5:bb0bec710c91 | 79 | myled =0; |
Nicolaemf | 5:bb0bec710c91 | 80 | |
Nicolaemf | 5:bb0bec710c91 | 81 | wait(1); |
Nicolaemf | 5:bb0bec710c91 | 82 | |
Nicolaemf | 5:bb0bec710c91 | 83 | controlLeft.SetDirection(0); |
Nicolaemf | 5:bb0bec710c91 | 84 | controlRight.SetDirection(1); |
Nicolaemf | 5:bb0bec710c91 | 85 | |
Nicolaemf | 5:bb0bec710c91 | 86 | controlLeft.SetSpeed(0.3); |
Nicolaemf | 5:bb0bec710c91 | 87 | controlRight.SetSpeed(0.3); |
Nicolaemf | 5:bb0bec710c91 | 88 | |
Nicolaemf | 5:bb0bec710c91 | 89 | myled = 1; |
Nicolaemf | 5:bb0bec710c91 | 90 | |
Nicolaemf | 5:bb0bec710c91 | 91 | wait(1); |
Nicolaemf | 5:bb0bec710c91 | 92 | |
Nicolaemf | 6:b457f1e2fff8 | 93 | controlLeft.SetDirection(0); |
Nicolaemf | 6:b457f1e2fff8 | 94 | controlRight.SetDirection(0); |
Nicolaemf | 5:bb0bec710c91 | 95 | |
Nicolaemf | 5:bb0bec710c91 | 96 | controlLeft.SetSpeed(0.3); |
Nicolaemf | 5:bb0bec710c91 | 97 | controlRight.SetSpeed(0.3); |
Nicolaemf | 5:bb0bec710c91 | 98 | |
Nicolaemf | 5:bb0bec710c91 | 99 | myled = 0; |
Nicolaemf | 5:bb0bec710c91 | 100 | |
Nicolaemf | 6:b457f1e2fff8 | 101 | wait(1); |
Nicolaemf | 5:bb0bec710c91 | 102 | |
Nicolaemf | 6:b457f1e2fff8 | 103 | /* |
Nicolaemf | 2:74d8b693bc62 | 104 | //waits for an interrupt to occur, then performs all the calculations |
Nicolaemf | 1:a2ceed49374e | 105 | if(toggleIR != IRSensor.m_toggle){ |
Nicolaemf | 2:74d8b693bc62 | 106 | |
Nicolaemf | 5:bb0bec710c91 | 107 | t.start(); |
Nicolaemf | 5:bb0bec710c91 | 108 | IRSensor.WeightPID(); |
Nicolaemf | 5:bb0bec710c91 | 109 | IRSensor.CalculatePID(); |
Nicolaemf | 5:bb0bec710c91 | 110 | IRSensor.MotorControl(); |
Nicolaemf | 2:74d8b693bc62 | 111 | |
Nicolaemf | 4:645b5d648c64 | 112 | if(IRSensor.m_dirL != IRSensor.m_prevDirL) controlLeft.SetDirection(IRSensor.m_dirL); |
Nicolaemf | 4:645b5d648c64 | 113 | if(IRSensor.m_dirR != IRSensor.m_prevDirR) controlRight.SetDirection(IRSensor.m_dirR); |
Nicolaemf | 4:645b5d648c64 | 114 | |
Nicolaemf | 5:bb0bec710c91 | 115 | controlLeft.SetSpeed(fabs(IRSensor.m_speedL)); |
Nicolaemf | 5:bb0bec710c91 | 116 | controlRight.SetSpeed(fabs(IRSensor.m_speedR)); |
Nicolaemf | 4:645b5d648c64 | 117 | |
Nicolaemf | 4:645b5d648c64 | 118 | IRSensor.m_prevDirL = IRSensor.m_dirL; |
Nicolaemf | 4:645b5d648c64 | 119 | IRSensor.m_prevDirR = IRSensor.m_dirR; |
Nicolaemf | 4:645b5d648c64 | 120 | |
Nicolaemf | 5:bb0bec710c91 | 121 | t.stop(); |
Nicolaemf | 5:bb0bec710c91 | 122 | //printf("timer : %f \n", t.read()); |
Nicolaemf | 5:bb0bec710c91 | 123 | t.reset(); |
Nicolaemf | 5:bb0bec710c91 | 124 | //printf("rightSpeed : %f, leftSpeed : %f \r", IRSensor.m_speedL, IRSensor.m_speedR); |
Nicolaemf | 5:bb0bec710c91 | 125 | |
Nicolaemf | 5:bb0bec710c91 | 126 | |
Nicolaemf | 5:bb0bec710c91 | 127 | |
Nicolaemf | 2:74d8b693bc62 | 128 | toggleIR = IRSensor.m_toggle; |
Nicolaemf | 6:b457f1e2fff8 | 129 | }*/ |
Nicolaemf | 5:bb0bec710c91 | 130 | |
Nicolaemf | 5:bb0bec710c91 | 131 | |
Nicolaemf | 3:54c41af9e119 | 132 | } |
Nicolaemf | 0:a02a278513d9 | 133 | } |