![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
First Draft, serial print change based on distance
main.cpp@3:0b0fbddb6f51, 2022-01-21 (annotated)
- Committer:
- liam94
- Date:
- Fri Jan 21 14:25:05 2022 +0000
- Revision:
- 3:0b0fbddb6f51
- Parent:
- 2:3ace5b4ae9a7
- Child:
- 4:77500a7f951d
added R and L buttons presses in so that the user has to press when they are ready to rotate object and in which direction
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
liam94 | 0:506531d0531c | 1 | #include "mbed.h" |
liam94 | 0:506531d0531c | 2 | #include "ultrasonic.h" |
liam94 | 0:506531d0531c | 3 | #include "N5110.h" |
liam94 | 3:0b0fbddb6f51 | 4 | // added R and L buttons presses in so that the user has to press when they are ready to rotate object and in which direction |
liam94 | 3:0b0fbddb6f51 | 5 | DigitalIn L(PTB18); |
liam94 | 3:0b0fbddb6f51 | 6 | DigitalIn R(PTB3); |
liam94 | 0:506531d0531c | 7 | |
liam94 | 2:3ace5b4ae9a7 | 8 | // LEDs on PCB to be connected (1 to 6) - active-low 0 = on and 1 = off |
liam94 | 2:3ace5b4ae9a7 | 9 | BusOut output(PTA1,PTA2,PTC2,PTC3,PTC4,PTD3); |
liam94 | 2:3ace5b4ae9a7 | 10 | |
liam94 | 2:3ace5b4ae9a7 | 11 | // array of states in the FSM, each element is the output of the counter |
liam94 | 2:3ace5b4ae9a7 | 12 | // set the output in binary to make it easier, 0 is LED on, 1 is LED off |
liam94 | 2:3ace5b4ae9a7 | 13 | int fsm[6] = {0b111110, 0b111101, 0b111011, 0b110111, 0b101111, 0b011111}; |
liam94 | 2:3ace5b4ae9a7 | 14 | |
liam94 | 2:3ace5b4ae9a7 | 15 | void dist(int distance); |
liam94 | 2:3ace5b4ae9a7 | 16 | |
liam94 | 2:3ace5b4ae9a7 | 17 | |
liam94 | 2:3ace5b4ae9a7 | 18 | ultrasonic mu(PTD0, PTC12, .5, 1, &dist); //Set the trigger pin to PTD0 and the echo pin to PTC12 |
liam94 | 2:3ace5b4ae9a7 | 19 | //have updates every .5 seconds and a timeout after 1 |
liam94 | 2:3ace5b4ae9a7 | 20 | //second, and call dist when the distance changes |
liam94 | 2:3ace5b4ae9a7 | 21 | |
liam94 | 2:3ace5b4ae9a7 | 22 | int main() |
liam94 | 1:a1795335ef8c | 23 | { |
liam94 | 2:3ace5b4ae9a7 | 24 | // set inital state |
liam94 | 2:3ace5b4ae9a7 | 25 | int state = 0; |
liam94 | 3:0b0fbddb6f51 | 26 | R.mode(PullDown); |
liam94 | 3:0b0fbddb6f51 | 27 | L.mode(PullDown); |
liam94 | 2:3ace5b4ae9a7 | 28 | mu.startUpdates();//start mesuring the distance |
liam94 | 2:3ace5b4ae9a7 | 29 | while(1) |
liam94 | 2:3ace5b4ae9a7 | 30 | { |
liam94 | 2:3ace5b4ae9a7 | 31 | output = fsm[state]; // output current state |
liam94 | 2:3ace5b4ae9a7 | 32 | // check which state we are in and see which the next state should be |
liam94 | 2:3ace5b4ae9a7 | 33 | switch(state) { |
liam94 | 2:3ace5b4ae9a7 | 34 | case 0: |
liam94 | 3:0b0fbddb6f51 | 35 | if (R == 1){ |
liam94 | 3:0b0fbddb6f51 | 36 | state = 1;} |
liam94 | 3:0b0fbddb6f51 | 37 | else if (L == 1){ |
liam94 | 3:0b0fbddb6f51 | 38 | state = 5;} |
liam94 | 3:0b0fbddb6f51 | 39 | else state = 0; |
liam94 | 2:3ace5b4ae9a7 | 40 | break; |
liam94 | 2:3ace5b4ae9a7 | 41 | case 1: |
liam94 | 3:0b0fbddb6f51 | 42 | if (R == 1){ |
liam94 | 3:0b0fbddb6f51 | 43 | state = 2;} |
liam94 | 3:0b0fbddb6f51 | 44 | else if (L == 1){ |
liam94 | 3:0b0fbddb6f51 | 45 | state = 0;} |
liam94 | 3:0b0fbddb6f51 | 46 | else state = 1; |
liam94 | 2:3ace5b4ae9a7 | 47 | break; |
liam94 | 2:3ace5b4ae9a7 | 48 | case 2: |
liam94 | 3:0b0fbddb6f51 | 49 | if (R == 1){ |
liam94 | 3:0b0fbddb6f51 | 50 | state = 3;} |
liam94 | 3:0b0fbddb6f51 | 51 | else if (L == 1){ |
liam94 | 3:0b0fbddb6f51 | 52 | state = 1;} |
liam94 | 3:0b0fbddb6f51 | 53 | else state = 2; |
liam94 | 2:3ace5b4ae9a7 | 54 | break; |
liam94 | 2:3ace5b4ae9a7 | 55 | case 3: |
liam94 | 3:0b0fbddb6f51 | 56 | if (R == 1){ |
liam94 | 3:0b0fbddb6f51 | 57 | state = 4;} |
liam94 | 3:0b0fbddb6f51 | 58 | else if (L == 1){ |
liam94 | 3:0b0fbddb6f51 | 59 | state = 2;} |
liam94 | 3:0b0fbddb6f51 | 60 | else state = 3; |
liam94 | 2:3ace5b4ae9a7 | 61 | break; |
liam94 | 2:3ace5b4ae9a7 | 62 | case 4: |
liam94 | 3:0b0fbddb6f51 | 63 | if (R == 1){ |
liam94 | 3:0b0fbddb6f51 | 64 | state = 5;} |
liam94 | 3:0b0fbddb6f51 | 65 | else if (L == 1){ |
liam94 | 3:0b0fbddb6f51 | 66 | state = 3;} |
liam94 | 3:0b0fbddb6f51 | 67 | else state = 4; |
liam94 | 2:3ace5b4ae9a7 | 68 | break; |
liam94 | 2:3ace5b4ae9a7 | 69 | case 5: |
liam94 | 3:0b0fbddb6f51 | 70 | if (R == 1){ |
liam94 | 3:0b0fbddb6f51 | 71 | state = 0;} |
liam94 | 3:0b0fbddb6f51 | 72 | else if (L == 1){ |
liam94 | 3:0b0fbddb6f51 | 73 | state = 4;} |
liam94 | 3:0b0fbddb6f51 | 74 | else state = 5; |
liam94 | 2:3ace5b4ae9a7 | 75 | break; |
liam94 | 2:3ace5b4ae9a7 | 76 | default: |
liam94 | 2:3ace5b4ae9a7 | 77 | error("Invalid state"); //invalid state - call error routine |
liam94 | 2:3ace5b4ae9a7 | 78 | // or could jump to starting state i.e. state = 0 |
liam94 | 2:3ace5b4ae9a7 | 79 | break; |
liam94 | 2:3ace5b4ae9a7 | 80 | } |
liam94 | 2:3ace5b4ae9a7 | 81 | ThisThread::sleep_for(500); |
liam94 | 2:3ace5b4ae9a7 | 82 | |
liam94 | 2:3ace5b4ae9a7 | 83 | mu.checkDistance(); //call checkDistance() as much as possible, as this is where |
liam94 | 2:3ace5b4ae9a7 | 84 | //the class checks if dist needs to be called. |
liam94 | 2:3ace5b4ae9a7 | 85 | } |
liam94 | 2:3ace5b4ae9a7 | 86 | } |
liam94 | 2:3ace5b4ae9a7 | 87 | |
liam94 | 2:3ace5b4ae9a7 | 88 | void dist(int distance){ |
liam94 | 2:3ace5b4ae9a7 | 89 | |
liam94 | 1:a1795335ef8c | 90 | if (distance > 250){ |
liam94 | 1:a1795335ef8c | 91 | printf("Safe Distance %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 92 | } |
liam94 | 1:a1795335ef8c | 93 | else if (distance <= 250 and distance > 150){ |
liam94 | 1:a1795335ef8c | 94 | printf("object detected %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 95 | } |
liam94 | 1:a1795335ef8c | 96 | else if (distance <= 150 and distance > 80){ |
liam94 | 1:a1795335ef8c | 97 | printf("object detected Closer %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 98 | } |
liam94 | 1:a1795335ef8c | 99 | else if (distance <= 80 and distance > 60){ |
liam94 | 1:a1795335ef8c | 100 | printf("Even Closer %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 101 | } |
liam94 | 1:a1795335ef8c | 102 | else if (distance <= 60 and distance > 40){ |
liam94 | 1:a1795335ef8c | 103 | printf("Very Very Close %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 104 | } |
liam94 | 1:a1795335ef8c | 105 | else if (distance <= 40 and distance > 0){ |
liam94 | 2:3ace5b4ae9a7 | 106 | printf("You've Hit a Wall %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 107 | } |
liam94 | 2:3ace5b4ae9a7 | 108 | } |