(DA) Internet of Things and Smart Electronics- ELE3006M2122
/
ObjectDetection_LiamCox
First Draft, serial print change based on distance
main.cpp
- Committer:
- liam94
- Date:
- 2022-01-21
- Revision:
- 3:0b0fbddb6f51
- Parent:
- 2:3ace5b4ae9a7
- Child:
- 4:77500a7f951d
File content as of revision 3:0b0fbddb6f51:
#include "mbed.h" #include "ultrasonic.h" #include "N5110.h" // 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 DigitalIn L(PTB18); DigitalIn R(PTB3); // LEDs on PCB to be connected (1 to 6) - active-low 0 = on and 1 = off BusOut output(PTA1,PTA2,PTC2,PTC3,PTC4,PTD3); // array of states in the FSM, each element is the output of the counter // set the output in binary to make it easier, 0 is LED on, 1 is LED off int fsm[6] = {0b111110, 0b111101, 0b111011, 0b110111, 0b101111, 0b011111}; void dist(int distance); ultrasonic mu(PTD0, PTC12, .5, 1, &dist); //Set the trigger pin to PTD0 and the echo pin to PTC12 //have updates every .5 seconds and a timeout after 1 //second, and call dist when the distance changes int main() { // set inital state int state = 0; R.mode(PullDown); L.mode(PullDown); mu.startUpdates();//start mesuring the distance while(1) { output = fsm[state]; // output current state // check which state we are in and see which the next state should be switch(state) { case 0: if (R == 1){ state = 1;} else if (L == 1){ state = 5;} else state = 0; break; case 1: if (R == 1){ state = 2;} else if (L == 1){ state = 0;} else state = 1; break; case 2: if (R == 1){ state = 3;} else if (L == 1){ state = 1;} else state = 2; break; case 3: if (R == 1){ state = 4;} else if (L == 1){ state = 2;} else state = 3; break; case 4: if (R == 1){ state = 5;} else if (L == 1){ state = 3;} else state = 4; break; case 5: if (R == 1){ state = 0;} else if (L == 1){ state = 4;} else state = 5; break; default: error("Invalid state"); //invalid state - call error routine // or could jump to starting state i.e. state = 0 break; } ThisThread::sleep_for(500); mu.checkDistance(); //call checkDistance() as much as possible, as this is where //the class checks if dist needs to be called. } } void dist(int distance){ if (distance > 250){ printf("Safe Distance %dmm\r\n", distance); } else if (distance <= 250 and distance > 150){ printf("object detected %dmm\r\n", distance); } else if (distance <= 150 and distance > 80){ printf("object detected Closer %dmm\r\n", distance); } else if (distance <= 80 and distance > 60){ printf("Even Closer %dmm\r\n", distance); } else if (distance <= 60 and distance > 40){ printf("Very Very Close %dmm\r\n", distance); } else if (distance <= 40 and distance > 0){ printf("You've Hit a Wall %dmm\r\n", distance); } }