Basic funcitonality
Dependencies: mbed mbed-rtos SevenSegmentSerial HC_SR04_Ultrasonic_Library
main.cpp@0:0747159bf07d, 2021-04-16 (annotated)
- Committer:
- dtran76
- Date:
- Fri Apr 16 20:51:22 2021 +0000
- Revision:
- 0:0747159bf07d
- Child:
- 1:28e137ae5af7
First rendition
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dtran76 | 0:0747159bf07d | 1 | //************************** |
dtran76 | 0:0747159bf07d | 2 | // Mbed to Raspberry Pi |
dtran76 | 0:0747159bf07d | 3 | //************************** |
dtran76 | 0:0747159bf07d | 4 | // 0 - pass starting line |
dtran76 | 0:0747159bf07d | 5 | // 1 - pass checkpoint 1 |
dtran76 | 0:0747159bf07d | 6 | // 2 - pass checkpoint 2 |
dtran76 | 0:0747159bf07d | 7 | // ... |
dtran76 | 0:0747159bf07d | 8 | // 9 - end race |
dtran76 | 0:0747159bf07d | 9 | |
dtran76 | 0:0747159bf07d | 10 | #include "mbed.h" |
dtran76 | 0:0747159bf07d | 11 | #include "ultrasonic.h" |
dtran76 | 0:0747159bf07d | 12 | |
dtran76 | 0:0747159bf07d | 13 | Serial pc(USBTX,USBRX); |
dtran76 | 0:0747159bf07d | 14 | DigitalOut led0(p5); |
dtran76 | 0:0747159bf07d | 15 | DigitalOut led1(p6); |
dtran76 | 0:0747159bf07d | 16 | DigitalOut led2(p7); |
dtran76 | 0:0747159bf07d | 17 | |
dtran76 | 0:0747159bf07d | 18 | int width[3]; //width of each checkpoint, mm |
dtran76 | 0:0747159bf07d | 19 | int sensitivity = 5; //sensitivity, adjust with testing, mm |
dtran76 | 0:0747159bf07d | 20 | int total_laps = 3; |
dtran76 | 0:0747159bf07d | 21 | int current_lap = 0; |
dtran76 | 0:0747159bf07d | 22 | |
dtran76 | 0:0747159bf07d | 23 | int setup[3] = {1,1,1}; |
dtran76 | 0:0747159bf07d | 24 | |
dtran76 | 0:0747159bf07d | 25 | //state machine, tracks current position in track |
dtran76 | 0:0747159bf07d | 26 | enum state_type {start,past_start,past_cp1,past_cp2}; |
dtran76 | 0:0747159bf07d | 27 | state_type track_state = start; |
dtran76 | 0:0747159bf07d | 28 | |
dtran76 | 0:0747159bf07d | 29 | //executed when crossing starting line |
dtran76 | 0:0747159bf07d | 30 | void start_line(int distance) |
dtran76 | 0:0747159bf07d | 31 | { |
dtran76 | 0:0747159bf07d | 32 | if (setup[0]) { |
dtran76 | 0:0747159bf07d | 33 | pc.printf("Setup\n"); |
dtran76 | 0:0747159bf07d | 34 | pc.printf("%d",distance); |
dtran76 | 0:0747159bf07d | 35 | width[0] = distance; |
dtran76 | 0:0747159bf07d | 36 | setup[0] = !setup[0]; |
dtran76 | 0:0747159bf07d | 37 | } |
dtran76 | 0:0747159bf07d | 38 | |
dtran76 | 0:0747159bf07d | 39 | if (width[0] - distance >= sensitivity) { |
dtran76 | 0:0747159bf07d | 40 | pc.printf("Past start line\n"); |
dtran76 | 0:0747159bf07d | 41 | led0 = 1; |
dtran76 | 0:0747159bf07d | 42 | led1 = 0; |
dtran76 | 0:0747159bf07d | 43 | led2 = 0; |
dtran76 | 0:0747159bf07d | 44 | current_lap++; |
dtran76 | 0:0747159bf07d | 45 | pc.printf("%d\n",current_lap); |
dtran76 | 0:0747159bf07d | 46 | track_state = past_start; |
dtran76 | 0:0747159bf07d | 47 | pc.putc('0'); |
dtran76 | 0:0747159bf07d | 48 | } |
dtran76 | 0:0747159bf07d | 49 | } |
dtran76 | 0:0747159bf07d | 50 | |
dtran76 | 0:0747159bf07d | 51 | //executed when passing checkpoint 1 |
dtran76 | 0:0747159bf07d | 52 | void checkpoint1(int distance) |
dtran76 | 0:0747159bf07d | 53 | { |
dtran76 | 0:0747159bf07d | 54 | if (setup[1]) { |
dtran76 | 0:0747159bf07d | 55 | pc.printf("Setup\n"); |
dtran76 | 0:0747159bf07d | 56 | pc.printf("%d",distance); |
dtran76 | 0:0747159bf07d | 57 | width[1] = distance; |
dtran76 | 0:0747159bf07d | 58 | setup[1] = !setup[1]; |
dtran76 | 0:0747159bf07d | 59 | } |
dtran76 | 0:0747159bf07d | 60 | |
dtran76 | 0:0747159bf07d | 61 | pc.printf("Past Checkpoint 1\n"); |
dtran76 | 0:0747159bf07d | 62 | if (width[1] - distance >= sensitivity) { |
dtran76 | 0:0747159bf07d | 63 | led1 = 1; |
dtran76 | 0:0747159bf07d | 64 | track_state = past_cp1; |
dtran76 | 0:0747159bf07d | 65 | pc.putc('1'); |
dtran76 | 0:0747159bf07d | 66 | } |
dtran76 | 0:0747159bf07d | 67 | } |
dtran76 | 0:0747159bf07d | 68 | |
dtran76 | 0:0747159bf07d | 69 | //executed when passing checkpoint 2 |
dtran76 | 0:0747159bf07d | 70 | void checkpoint2(int distance) |
dtran76 | 0:0747159bf07d | 71 | { |
dtran76 | 0:0747159bf07d | 72 | if (setup[2]) { |
dtran76 | 0:0747159bf07d | 73 | pc.printf("Setup\n"); |
dtran76 | 0:0747159bf07d | 74 | pc.printf("%d",distance); |
dtran76 | 0:0747159bf07d | 75 | width[2] = distance; |
dtran76 | 0:0747159bf07d | 76 | setup[2] = !setup[2]; |
dtran76 | 0:0747159bf07d | 77 | } |
dtran76 | 0:0747159bf07d | 78 | |
dtran76 | 0:0747159bf07d | 79 | pc.printf("Past Checkpoint 2\n"); |
dtran76 | 0:0747159bf07d | 80 | if (width[2] - distance >= sensitivity) { |
dtran76 | 0:0747159bf07d | 81 | led2 = 1; |
dtran76 | 0:0747159bf07d | 82 | track_state = past_cp2; |
dtran76 | 0:0747159bf07d | 83 | pc.putc('2'); |
dtran76 | 0:0747159bf07d | 84 | } |
dtran76 | 0:0747159bf07d | 85 | } |
dtran76 | 0:0747159bf07d | 86 | |
dtran76 | 0:0747159bf07d | 87 | ultrasonic sonar0(p15,p16,0.1,0.1,&start_line); //starting line |
dtran76 | 0:0747159bf07d | 88 | ultrasonic sonar1(p17,p18,0.1,0.1,&checkpoint1); //checkpoint 1 |
dtran76 | 0:0747159bf07d | 89 | ultrasonic sonar2(p21,p22,0.1,0.1,&checkpoint2); //checkpoint 2 |
dtran76 | 0:0747159bf07d | 90 | |
dtran76 | 0:0747159bf07d | 91 | int main() |
dtran76 | 0:0747159bf07d | 92 | { |
dtran76 | 0:0747159bf07d | 93 | sonar0.startUpdates(); |
dtran76 | 0:0747159bf07d | 94 | sonar1.startUpdates(); |
dtran76 | 0:0747159bf07d | 95 | sonar2.startUpdates(); |
dtran76 | 0:0747159bf07d | 96 | |
dtran76 | 0:0747159bf07d | 97 | sonar0.checkDistance(); |
dtran76 | 0:0747159bf07d | 98 | sonar1.checkDistance(); |
dtran76 | 0:0747159bf07d | 99 | sonar2.checkDistance(); |
dtran76 | 0:0747159bf07d | 100 | |
dtran76 | 0:0747159bf07d | 101 | while(1) |
dtran76 | 0:0747159bf07d | 102 | { |
dtran76 | 0:0747159bf07d | 103 | switch (track_state) { |
dtran76 | 0:0747159bf07d | 104 | case start: |
dtran76 | 0:0747159bf07d | 105 | sonar0.checkDistance(); |
dtran76 | 0:0747159bf07d | 106 | break; |
dtran76 | 0:0747159bf07d | 107 | case past_start: |
dtran76 | 0:0747159bf07d | 108 | sonar1.checkDistance(); |
dtran76 | 0:0747159bf07d | 109 | break; |
dtran76 | 0:0747159bf07d | 110 | case past_cp1: |
dtran76 | 0:0747159bf07d | 111 | sonar2.checkDistance(); |
dtran76 | 0:0747159bf07d | 112 | break; |
dtran76 | 0:0747159bf07d | 113 | case past_cp2: |
dtran76 | 0:0747159bf07d | 114 | sonar0.checkDistance(); |
dtran76 | 0:0747159bf07d | 115 | break; |
dtran76 | 0:0747159bf07d | 116 | } |
dtran76 | 0:0747159bf07d | 117 | if (current_lap > total_laps) { |
dtran76 | 0:0747159bf07d | 118 | pc.putc('9'); |
dtran76 | 0:0747159bf07d | 119 | while(1) { |
dtran76 | 0:0747159bf07d | 120 | pc.printf("Race Over"); |
dtran76 | 0:0747159bf07d | 121 | wait(0.05); |
dtran76 | 0:0747159bf07d | 122 | } |
dtran76 | 0:0747159bf07d | 123 | } |
dtran76 | 0:0747159bf07d | 124 | wait(0.05); |
dtran76 | 0:0747159bf07d | 125 | } |
dtran76 | 0:0747159bf07d | 126 | } |