First Draft, serial print change based on distance

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?

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