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.
Dependencies: mbed 3875_Individualproject
main/main.h@64:a58d8538132a, 2020-04-18 (annotated)
- Committer:
- jamesheavey
- Date:
- Sat Apr 18 21:57:31 2020 +0000
- Revision:
- 64:a58d8538132a
- Parent:
- 60:ea69bd1a9889
- Child:
- 65:2103a02d72bc
everything works execpt return to start from goal in loop, currently needs to be placed there. Change the simplification thing so its less horrible. Add music
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jamesheavey | 0:df5216b20861 | 1 | #ifndef MAIN_H |
jamesheavey | 0:df5216b20861 | 2 | #define MAIN_H |
jamesheavey | 0:df5216b20861 | 3 | |
jamesheavey | 0:df5216b20861 | 4 | #include "m3pi.h" |
jamesheavey | 0:df5216b20861 | 5 | #include "mbed.h" |
jamesheavey | 29:ecf497c3fdc0 | 6 | #include <stdlib.h> |
jamesheavey | 20:5cf6a378801d | 7 | |
jamesheavey | 20:5cf6a378801d | 8 | // Constants |
jamesheavey | 20:5cf6a378801d | 9 | #define A 0.5 // 20 |
jamesheavey | 20:5cf6a378801d | 10 | #define B 1/10000 // 10000 |
jamesheavey | 20:5cf6a378801d | 11 | #define C 1.5 // 2/3 |
jamesheavey | 20:5cf6a378801d | 12 | |
jamesheavey | 20:5cf6a378801d | 13 | #define SENS_THRESH 500 // >500 = black |
jamesheavey | 20:5cf6a378801d | 14 | #define TURN_SPEED 0.2 |
jamesheavey | 0:df5216b20861 | 15 | |
jamesheavey | 0:df5216b20861 | 16 | // API |
jamesheavey | 0:df5216b20861 | 17 | extern m3pi robot; |
jamesheavey | 0:df5216b20861 | 18 | |
jamesheavey | 0:df5216b20861 | 19 | // LEDs |
jamesheavey | 0:df5216b20861 | 20 | extern BusOut leds; |
jamesheavey | 0:df5216b20861 | 21 | |
jamesheavey | 0:df5216b20861 | 22 | // Buttons |
jamesheavey | 0:df5216b20861 | 23 | extern DigitalIn button_A; |
jamesheavey | 0:df5216b20861 | 24 | extern DigitalIn button_B; |
jamesheavey | 0:df5216b20861 | 25 | extern DigitalIn button_X; |
jamesheavey | 0:df5216b20861 | 26 | extern DigitalIn button_Y; |
jamesheavey | 0:df5216b20861 | 27 | extern DigitalIn button_enter; |
jamesheavey | 0:df5216b20861 | 28 | extern DigitalIn button_back; |
jamesheavey | 0:df5216b20861 | 29 | |
jamesheavey | 0:df5216b20861 | 30 | // Potentiometers |
jamesheavey | 0:df5216b20861 | 31 | extern AnalogIn pot_P; |
jamesheavey | 0:df5216b20861 | 32 | extern AnalogIn pot_I; |
jamesheavey | 0:df5216b20861 | 33 | extern AnalogIn pot_D; |
jamesheavey | 0:df5216b20861 | 34 | extern AnalogIn pot_S; |
jamesheavey | 0:df5216b20861 | 35 | |
jamesheavey | 18:991658b628fc | 36 | // Sensors |
jamesheavey | 18:991658b628fc | 37 | extern DigitalInOut QTRA; //connected to digital P26 |
jamesheavey | 18:991658b628fc | 38 | extern DigitalInOut QTRB; //connected to digital P25 |
jamesheavey | 18:991658b628fc | 39 | |
jamesheavey | 20:5cf6a378801d | 40 | // Timers |
jamesheavey | 21:54ea75f7984f | 41 | Timer t_L; // left encoder |
jamesheavey | 21:54ea75f7984f | 42 | Timer t_R; // right encoder |
jamesheavey | 21:54ea75f7984f | 43 | Timer t_coord; // coordinate timer |
jamesheavey | 0:df5216b20861 | 44 | |
jamesheavey | 0:df5216b20861 | 45 | // Prototypes |
jamesheavey | 21:54ea75f7984f | 46 | |
jamesheavey | 20:5cf6a378801d | 47 | void read_encoders(); |
jamesheavey | 20:5cf6a378801d | 48 | void init(); |
jamesheavey | 20:5cf6a378801d | 49 | void calibrate(); |
jamesheavey | 20:5cf6a378801d | 50 | void follow_line(); |
jamesheavey | 20:5cf6a378801d | 51 | bool junction_detect(); |
jamesheavey | 20:5cf6a378801d | 52 | char junction_logic(); |
jamesheavey | 20:5cf6a378801d | 53 | void turn_select( char turn ); |
jamesheavey | 20:5cf6a378801d | 54 | void left(); |
jamesheavey | 20:5cf6a378801d | 55 | void right(); |
jamesheavey | 20:5cf6a378801d | 56 | void back(); |
jamesheavey | 20:5cf6a378801d | 57 | void goal(); |
jamesheavey | 29:ecf497c3fdc0 | 58 | void looped_goal(); |
jamesheavey | 20:5cf6a378801d | 59 | void simplify(); |
jamesheavey | 20:5cf6a378801d | 60 | void invert_path(); |
jamesheavey | 20:5cf6a378801d | 61 | void non_looped(); |
jamesheavey | 20:5cf6a378801d | 62 | void looped(); |
jamesheavey | 21:54ea75f7984f | 63 | void node_logic(); |
jamesheavey | 24:adb946be4ce5 | 64 | bool coord_check(); |
jamesheavey | 25:7523239a2fc1 | 65 | void update_index(); |
jamesheavey | 28:63ff8290964a | 66 | void choose_turn(); |
jamesheavey | 28:63ff8290964a | 67 | void back_track(); |
jamesheavey | 29:ecf497c3fdc0 | 68 | int path_to_point_index( int path_point ); |
jamesheavey | 37:2967f3f9c936 | 69 | void print_data( char *word ); |
jamesheavey | 55:18ea9529afb2 | 70 | bool dead_end_removal(int index1, int index2); |
jamesheavey | 58:cb32aa0f4116 | 71 | void looped_goal_simplification(); |
jamesheavey | 58:cb32aa0f4116 | 72 | void goal_path_explored( bool inverse ); |
jamesheavey | 0:df5216b20861 | 73 | |
jamesheavey | 20:5cf6a378801d | 74 | // Global Variables |
jamesheavey | 20:5cf6a378801d | 75 | char path[100]; |
jamesheavey | 20:5cf6a378801d | 76 | char inv_path[100]; |
jamesheavey | 20:5cf6a378801d | 77 | int path_length = 0; |
jamesheavey | 20:5cf6a378801d | 78 | unsigned int *sensor; |
jamesheavey | 20:5cf6a378801d | 79 | float speed; |
jamesheavey | 20:5cf6a378801d | 80 | float proportional = 0.0; |
jamesheavey | 20:5cf6a378801d | 81 | float prev_proportional = 0.0; |
jamesheavey | 20:5cf6a378801d | 82 | float integral = 0.0; |
jamesheavey | 20:5cf6a378801d | 83 | float derivative = 0.0; |
jamesheavey | 20:5cf6a378801d | 84 | int encoder[2]; |
jamesheavey | 20:5cf6a378801d | 85 | int dist_est_1 = 0; |
jamesheavey | 20:5cf6a378801d | 86 | int dist_est_2 = 0; |
jamesheavey | 0:df5216b20861 | 87 | |
jamesheavey | 41:2b6b73dd897c | 88 | bool loop_check; |
jamesheavey | 60:ea69bd1a9889 | 89 | //bool completed = false; |
jamesheavey | 60:ea69bd1a9889 | 90 | bool _switch = false; |
jamesheavey | 38:b5b06625d06e | 91 | int dist = 0; |
jamesheavey | 23:71e84953b3f3 | 92 | bool first = true; |
jamesheavey | 27:0a3f028f9365 | 93 | bool goal_node = false; |
jamesheavey | 21:54ea75f7984f | 94 | bool t_restart = true; |
jamesheavey | 23:71e84953b3f3 | 95 | char dir; |
jamesheavey | 25:7523239a2fc1 | 96 | int curr_index; |
jamesheavey | 21:54ea75f7984f | 97 | int curr_coords[2]; |
jamesheavey | 23:71e84953b3f3 | 98 | int total_points; |
jamesheavey | 24:adb946be4ce5 | 99 | unsigned int looped_path[100]; |
jamesheavey | 27:0a3f028f9365 | 100 | unsigned int point[100]; // use a struct |
jamesheavey | 22:02dda79d50b4 | 101 | unsigned int type[100]; |
jamesheavey | 22:02dda79d50b4 | 102 | unsigned int explored[100]; |
jamesheavey | 21:54ea75f7984f | 103 | int coords_x[100]; |
jamesheavey | 21:54ea75f7984f | 104 | int coords_y[100]; |
jamesheavey | 48:76cf4521d342 | 105 | int shortest[100]; |
jamesheavey | 55:18ea9529afb2 | 106 | int short_length; |
jamesheavey | 58:cb32aa0f4116 | 107 | int goal_path1[100]; |
jamesheavey | 58:cb32aa0f4116 | 108 | int goal_length1; |
jamesheavey | 58:cb32aa0f4116 | 109 | int goal_path2[100]; |
jamesheavey | 58:cb32aa0f4116 | 110 | int goal_length2; |
jamesheavey | 64:a58d8538132a | 111 | int goal_path3[100]; |
jamesheavey | 64:a58d8538132a | 112 | int goal_path4[100]; |
jamesheavey | 0:df5216b20861 | 113 | #endif |