Basic funcitonality

Dependencies:   mbed mbed-rtos SevenSegmentSerial HC_SR04_Ultrasonic_Library

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?

UserRevisionLine numberNew 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 }