Code petit robot
Dependencies: VL6180x X_NUCLEO_COMMON X_NUCLEO_IHM01A1 mbed
Fork of 1-DoorCloser by
main.cpp@1:562b097e12f7, 2016-04-02 (annotated)
- Committer:
- julientiron
- Date:
- Sat Apr 02 10:07:34 2016 +0000
- Revision:
- 1:562b097e12f7
- Parent:
- 0:1cb50d31c3b5
ll
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
julientiron | 0:1cb50d31c3b5 | 1 | /** |
julientiron | 0:1cb50d31c3b5 | 2 | ****************************************************************************** |
julientiron | 0:1cb50d31c3b5 | 3 | * @file main.cpp |
julientiron | 0:1cb50d31c3b5 | 4 | * @author Julien Tiron, FIP Télécom Bretagne |
julientiron | 0:1cb50d31c3b5 | 5 | * @version V1.0.0 |
julientiron | 0:1cb50d31c3b5 | 6 | * @date March 23th, 2016 |
julientiron | 0:1cb50d31c3b5 | 7 | * @brief DoorCloser robot main code |
julientiron | 0:1cb50d31c3b5 | 8 | ****************************************************************************** |
julientiron | 0:1cb50d31c3b5 | 9 | **/ |
julientiron | 0:1cb50d31c3b5 | 10 | |
julientiron | 0:1cb50d31c3b5 | 11 | /* Includes ------------------------------------------------------------------*/ |
julientiron | 0:1cb50d31c3b5 | 12 | |
julientiron | 0:1cb50d31c3b5 | 13 | #include "mbed.h" |
julientiron | 0:1cb50d31c3b5 | 14 | #include "DevSPI.h" |
julientiron | 0:1cb50d31c3b5 | 15 | #include "l6474_class.h" |
julientiron | 0:1cb50d31c3b5 | 16 | #include "DevI2C.h" |
julientiron | 0:1cb50d31c3b5 | 17 | #include "vl6180x_class.h" |
julientiron | 1:562b097e12f7 | 18 | #include "VL6180x.h" |
julientiron | 0:1cb50d31c3b5 | 19 | |
julientiron | 0:1cb50d31c3b5 | 20 | /* Definitions ---------------------------------------------------------------*/ |
julientiron | 0:1cb50d31c3b5 | 21 | |
julientiron | 0:1cb50d31c3b5 | 22 | #define VL6180X_ADDRESS 0x29 |
julientiron | 0:1cb50d31c3b5 | 23 | |
julientiron | 0:1cb50d31c3b5 | 24 | /* Variables -----------------------------------------------------------------*/ |
julientiron | 0:1cb50d31c3b5 | 25 | |
julientiron | 0:1cb50d31c3b5 | 26 | /* Start and Stop Component */ |
julientiron | 0:1cb50d31c3b5 | 27 | InterruptIn startup(PC_1); |
julientiron | 0:1cb50d31c3b5 | 28 | Ticker game_length; |
julientiron | 0:1cb50d31c3b5 | 29 | volatile bool start = 1; |
julientiron | 0:1cb50d31c3b5 | 30 | volatile bool end = 1; |
julientiron | 1:562b097e12f7 | 31 | char data = 0x08 | (char)64; |
julientiron | 1:562b097e12f7 | 32 | bool tag = true; |
julientiron | 1:562b097e12f7 | 33 | int i2cAddres=0x70; // Address of DS1307 is 0x68 (7 bit address) |
julientiron | 1:562b097e12f7 | 34 | int i2c8BitAddres= i2cAddres <<1; // Convert to 8bit addressing used by mbed |
julientiron | 0:1cb50d31c3b5 | 35 | |
julientiron | 0:1cb50d31c3b5 | 36 | /* Motor Control Component */ |
julientiron | 0:1cb50d31c3b5 | 37 | L6474 *motor1; |
julientiron | 0:1cb50d31c3b5 | 38 | L6474 *motor2; |
julientiron | 0:1cb50d31c3b5 | 39 | |
julientiron | 0:1cb50d31c3b5 | 40 | /* Distance Sensors Component */ |
julientiron | 1:562b097e12f7 | 41 | /*DevI2C *i2c =new DevI2C(D14, D15); |
julientiron | 0:1cb50d31c3b5 | 42 | VL6180X sensor1(i2c); |
julientiron | 0:1cb50d31c3b5 | 43 | VL6180X sensor2(i2c); |
julientiron | 1:562b097e12f7 | 44 | VL6180X sensor3(i2c);*/ |
julientiron | 1:562b097e12f7 | 45 | I2C i2c(D14, D15); |
julientiron | 1:562b097e12f7 | 46 | VL6180x sensor(D14, D15, VL6180X_ADDRESS<<1); |
julientiron | 0:1cb50d31c3b5 | 47 | |
julientiron | 0:1cb50d31c3b5 | 48 | /* Functions -----------------------------------------------------------------*/ |
julientiron | 0:1cb50d31c3b5 | 49 | |
julientiron | 0:1cb50d31c3b5 | 50 | void go() |
julientiron | 0:1cb50d31c3b5 | 51 | { |
julientiron | 0:1cb50d31c3b5 | 52 | start = 0; |
julientiron | 0:1cb50d31c3b5 | 53 | } |
julientiron | 0:1cb50d31c3b5 | 54 | |
julientiron | 0:1cb50d31c3b5 | 55 | void stop() |
julientiron | 0:1cb50d31c3b5 | 56 | { |
julientiron | 0:1cb50d31c3b5 | 57 | end = 0; |
julientiron | 0:1cb50d31c3b5 | 58 | } |
julientiron | 0:1cb50d31c3b5 | 59 | |
julientiron | 1:562b097e12f7 | 60 | void init_sensor() |
julientiron | 1:562b097e12f7 | 61 | { |
julientiron | 1:562b097e12f7 | 62 | |
julientiron | 0:1cb50d31c3b5 | 63 | } |
julientiron | 1:562b097e12f7 | 64 | |
julientiron | 1:562b097e12f7 | 65 | void switch_sensor(int number) |
julientiron | 1:562b097e12f7 | 66 | { |
julientiron | 1:562b097e12f7 | 67 | |
julientiron | 0:1cb50d31c3b5 | 68 | } |
julientiron | 0:1cb50d31c3b5 | 69 | |
julientiron | 0:1cb50d31c3b5 | 70 | /* Main ----------------------------------------------------------------------*/ |
julientiron | 0:1cb50d31c3b5 | 71 | |
julientiron | 0:1cb50d31c3b5 | 72 | int main() |
julientiron | 0:1cb50d31c3b5 | 73 | { |
julientiron | 0:1cb50d31c3b5 | 74 | /*----- Initialization. -----*/ |
julientiron | 0:1cb50d31c3b5 | 75 | |
julientiron | 0:1cb50d31c3b5 | 76 | /* Initializing SPI bus. */ |
julientiron | 0:1cb50d31c3b5 | 77 | DevSPI dev_spi(D11, D12, D13); |
julientiron | 0:1cb50d31c3b5 | 78 | |
julientiron | 0:1cb50d31c3b5 | 79 | /* Initializing Motor Control Components. */ |
julientiron | 0:1cb50d31c3b5 | 80 | motor1 = new L6474(D2, D8, D7, D9, D10, dev_spi); |
julientiron | 0:1cb50d31c3b5 | 81 | motor2 = new L6474(D2, D8, D4, D3, D10, dev_spi); |
julientiron | 0:1cb50d31c3b5 | 82 | if (motor1->Init() != COMPONENT_OK) |
julientiron | 0:1cb50d31c3b5 | 83 | exit(EXIT_FAILURE); |
julientiron | 0:1cb50d31c3b5 | 84 | if (motor2->Init() != COMPONENT_OK) |
julientiron | 0:1cb50d31c3b5 | 85 | exit(EXIT_FAILURE); |
julientiron | 1:562b097e12f7 | 86 | int result = i2c.write(i2c8BitAddres, &data, 1 ); |
julientiron | 1:562b097e12f7 | 87 | sensor.VL6180xDefautSettings(); |
julientiron | 0:1cb50d31c3b5 | 88 | |
julientiron | 0:1cb50d31c3b5 | 89 | /* Interrupt to start the robot */ |
julientiron | 0:1cb50d31c3b5 | 90 | startup.fall(&go); |
julientiron | 0:1cb50d31c3b5 | 91 | |
julientiron | 0:1cb50d31c3b5 | 92 | while(start) { |
julientiron | 0:1cb50d31c3b5 | 93 | /* Waiting code */ |
julientiron | 0:1cb50d31c3b5 | 94 | } |
julientiron | 1:562b097e12f7 | 95 | |
julientiron | 0:1cb50d31c3b5 | 96 | while(end) { |
julientiron | 0:1cb50d31c3b5 | 97 | /* In-game code */ |
julientiron | 1:562b097e12f7 | 98 | |
julientiron | 1:562b097e12f7 | 99 | /* Interrupt to stop the robot */ |
julientiron | 1:562b097e12f7 | 100 | game_length.attach(&stop, 10); //1 minutes 30 secondes pour la Coupe |
julientiron | 0:1cb50d31c3b5 | 101 | |
julientiron | 1:562b097e12f7 | 102 | if(sensor.getDistance()<100) { |
julientiron | 1:562b097e12f7 | 103 | printf("1"); |
julientiron | 1:562b097e12f7 | 104 | if(tag == false) { |
julientiron | 1:562b097e12f7 | 105 | motor1->Run(StepperMotor::FWD); |
julientiron | 1:562b097e12f7 | 106 | motor2->Run(StepperMotor::FWD); |
julientiron | 0:1cb50d31c3b5 | 107 | |
julientiron | 1:562b097e12f7 | 108 | tag = true; |
julientiron | 1:562b097e12f7 | 109 | } |
julientiron | 1:562b097e12f7 | 110 | } else { |
julientiron | 1:562b097e12f7 | 111 | printf("0"); |
julientiron | 1:562b097e12f7 | 112 | if(tag == true) { |
julientiron | 1:562b097e12f7 | 113 | motor1->Run(StepperMotor::FWD); |
julientiron | 1:562b097e12f7 | 114 | motor2->Run(StepperMotor::BWD); |
julientiron | 0:1cb50d31c3b5 | 115 | |
julientiron | 1:562b097e12f7 | 116 | tag = false; |
julientiron | 1:562b097e12f7 | 117 | } |
julientiron | 1:562b097e12f7 | 118 | } |
julientiron | 1:562b097e12f7 | 119 | wait_ms(100); |
julientiron | 0:1cb50d31c3b5 | 120 | /* Waiting until delay has expired. */ |
julientiron | 1:562b097e12f7 | 121 | } |
julientiron | 0:1cb50d31c3b5 | 122 | |
julientiron | 0:1cb50d31c3b5 | 123 | motor1->HardStop(); |
julientiron | 0:1cb50d31c3b5 | 124 | motor2->HardStop(); |
julientiron | 0:1cb50d31c3b5 | 125 | |
julientiron | 0:1cb50d31c3b5 | 126 | motor1->WaitWhileActive(); |
julientiron | 0:1cb50d31c3b5 | 127 | motor2->WaitWhileActive(); |
julientiron | 0:1cb50d31c3b5 | 128 | } |