![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
First Draft, serial print change based on distance
main.cpp@2:3ace5b4ae9a7, 2022-01-21 (annotated)
- Committer:
- liam94
- Date:
- Fri Jan 21 13:51:49 2022 +0000
- Revision:
- 2:3ace5b4ae9a7
- Parent:
- 1:a1795335ef8c
- Child:
- 3:0b0fbddb6f51
added bus output for LEDs on board and switch states to cycle through
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 | 0:506531d0531c | 4 | |
liam94 | 2:3ace5b4ae9a7 | 5 | // LEDs on PCB to be connected (1 to 6) - active-low 0 = on and 1 = off |
liam94 | 2:3ace5b4ae9a7 | 6 | BusOut output(PTA1,PTA2,PTC2,PTC3,PTC4,PTD3); |
liam94 | 2:3ace5b4ae9a7 | 7 | |
liam94 | 2:3ace5b4ae9a7 | 8 | // array of states in the FSM, each element is the output of the counter |
liam94 | 2:3ace5b4ae9a7 | 9 | // set the output in binary to make it easier, 0 is LED on, 1 is LED off |
liam94 | 2:3ace5b4ae9a7 | 10 | int fsm[6] = {0b111110, 0b111101, 0b111011, 0b110111, 0b101111, 0b011111}; |
liam94 | 2:3ace5b4ae9a7 | 11 | |
liam94 | 2:3ace5b4ae9a7 | 12 | void dist(int distance); |
liam94 | 2:3ace5b4ae9a7 | 13 | |
liam94 | 2:3ace5b4ae9a7 | 14 | |
liam94 | 2:3ace5b4ae9a7 | 15 | ultrasonic mu(PTD0, PTC12, .5, 1, &dist); //Set the trigger pin to PTD0 and the echo pin to PTC12 |
liam94 | 2:3ace5b4ae9a7 | 16 | //have updates every .5 seconds and a timeout after 1 |
liam94 | 2:3ace5b4ae9a7 | 17 | //second, and call dist when the distance changes |
liam94 | 2:3ace5b4ae9a7 | 18 | |
liam94 | 2:3ace5b4ae9a7 | 19 | int main() |
liam94 | 1:a1795335ef8c | 20 | { |
liam94 | 2:3ace5b4ae9a7 | 21 | // set inital state |
liam94 | 2:3ace5b4ae9a7 | 22 | int state = 0; |
liam94 | 2:3ace5b4ae9a7 | 23 | |
liam94 | 2:3ace5b4ae9a7 | 24 | mu.startUpdates();//start mesuring the distance |
liam94 | 2:3ace5b4ae9a7 | 25 | while(1) |
liam94 | 2:3ace5b4ae9a7 | 26 | { |
liam94 | 2:3ace5b4ae9a7 | 27 | output = fsm[state]; // output current state |
liam94 | 2:3ace5b4ae9a7 | 28 | // check which state we are in and see which the next state should be |
liam94 | 2:3ace5b4ae9a7 | 29 | switch(state) { |
liam94 | 2:3ace5b4ae9a7 | 30 | case 0: |
liam94 | 2:3ace5b4ae9a7 | 31 | state = 1; |
liam94 | 2:3ace5b4ae9a7 | 32 | break; |
liam94 | 2:3ace5b4ae9a7 | 33 | case 1: |
liam94 | 2:3ace5b4ae9a7 | 34 | state = 2; |
liam94 | 2:3ace5b4ae9a7 | 35 | break; |
liam94 | 2:3ace5b4ae9a7 | 36 | case 2: |
liam94 | 2:3ace5b4ae9a7 | 37 | state = 3; |
liam94 | 2:3ace5b4ae9a7 | 38 | break; |
liam94 | 2:3ace5b4ae9a7 | 39 | case 3: |
liam94 | 2:3ace5b4ae9a7 | 40 | state = 4; |
liam94 | 2:3ace5b4ae9a7 | 41 | break; |
liam94 | 2:3ace5b4ae9a7 | 42 | case 4: |
liam94 | 2:3ace5b4ae9a7 | 43 | state = 5; |
liam94 | 2:3ace5b4ae9a7 | 44 | break; |
liam94 | 2:3ace5b4ae9a7 | 45 | case 5: |
liam94 | 2:3ace5b4ae9a7 | 46 | state = 0; |
liam94 | 2:3ace5b4ae9a7 | 47 | break; |
liam94 | 2:3ace5b4ae9a7 | 48 | default: |
liam94 | 2:3ace5b4ae9a7 | 49 | error("Invalid state"); //invalid state - call error routine |
liam94 | 2:3ace5b4ae9a7 | 50 | // or could jump to starting state i.e. state = 0 |
liam94 | 2:3ace5b4ae9a7 | 51 | break; |
liam94 | 2:3ace5b4ae9a7 | 52 | } |
liam94 | 2:3ace5b4ae9a7 | 53 | ThisThread::sleep_for(500); |
liam94 | 2:3ace5b4ae9a7 | 54 | |
liam94 | 2:3ace5b4ae9a7 | 55 | mu.checkDistance(); //call checkDistance() as much as possible, as this is where |
liam94 | 2:3ace5b4ae9a7 | 56 | //the class checks if dist needs to be called. |
liam94 | 2:3ace5b4ae9a7 | 57 | } |
liam94 | 2:3ace5b4ae9a7 | 58 | } |
liam94 | 2:3ace5b4ae9a7 | 59 | |
liam94 | 2:3ace5b4ae9a7 | 60 | void dist(int distance){ |
liam94 | 2:3ace5b4ae9a7 | 61 | |
liam94 | 1:a1795335ef8c | 62 | if (distance > 250){ |
liam94 | 1:a1795335ef8c | 63 | printf("Safe Distance %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 64 | } |
liam94 | 1:a1795335ef8c | 65 | else if (distance <= 250 and distance > 150){ |
liam94 | 1:a1795335ef8c | 66 | printf("object detected %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 67 | } |
liam94 | 1:a1795335ef8c | 68 | else if (distance <= 150 and distance > 80){ |
liam94 | 1:a1795335ef8c | 69 | printf("object detected Closer %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 70 | } |
liam94 | 1:a1795335ef8c | 71 | else if (distance <= 80 and distance > 60){ |
liam94 | 1:a1795335ef8c | 72 | printf("Even Closer %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 73 | } |
liam94 | 1:a1795335ef8c | 74 | else if (distance <= 60 and distance > 40){ |
liam94 | 1:a1795335ef8c | 75 | printf("Very Very Close %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 76 | } |
liam94 | 1:a1795335ef8c | 77 | else if (distance <= 40 and distance > 0){ |
liam94 | 2:3ace5b4ae9a7 | 78 | printf("You've Hit a Wall %dmm\r\n", distance); |
liam94 | 1:a1795335ef8c | 79 | } |
liam94 | 2:3ace5b4ae9a7 | 80 | } |