First Draft, serial print change based on distance

Committer:
liam94
Date:
Sat Jan 22 20:06:35 2022 +0000
Revision:
5:98845ccaaacd
Parent:
4:77500a7f951d
Child:
6:18a4dd77057e
added in menu (main menu and selection to object detection)

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 5:98845ccaaacd 4 #include "Joystick.h"
liam94 5:98845ccaaacd 5 #include "main.h"
liam94 4:77500a7f951d 6
liam94 2:3ace5b4ae9a7 7
liam94 2:3ace5b4ae9a7 8 int main()
liam94 1:a1795335ef8c 9 {
liam94 5:98845ccaaacd 10
liam94 3:0b0fbddb6f51 11 R.mode(PullDown);
liam94 3:0b0fbddb6f51 12 L.mode(PullDown);
liam94 5:98845ccaaacd 13 Start.mode(PullDown);
liam94 5:98845ccaaacd 14 Start.rise(Start_isr);
liam94 5:98845ccaaacd 15 Back.mode(PullDown);
liam94 5:98845ccaaacd 16 Back.rise(Back_isr);
liam94 5:98845ccaaacd 17
liam94 5:98845ccaaacd 18 joystick.init();
liam94 5:98845ccaaacd 19 init_display();
liam94 5:98845ccaaacd 20 mu.startUpdates();//start mesuring the distance
liam94 5:98845ccaaacd 21 main_menu();
liam94 5:98845ccaaacd 22
liam94 5:98845ccaaacd 23 while(1)
liam94 5:98845ccaaacd 24 {
liam94 5:98845ccaaacd 25
liam94 5:98845ccaaacd 26 mu.checkDistance(); //call checkDistance() as much as possible, as this is where
liam94 5:98845ccaaacd 27 //the class checks if dist needs to be called.
liam94 5:98845ccaaacd 28 }
liam94 5:98845ccaaacd 29 }
liam94 5:98845ccaaacd 30
liam94 5:98845ccaaacd 31 void init_display(){
liam94 5:98845ccaaacd 32
liam94 4:77500a7f951d 33 lcd.init();
liam94 4:77500a7f951d 34 lcd.setContrast(0.4);
liam94 5:98845ccaaacd 35 lcd.clear(); /// clear screen (init)
liam94 5:98845ccaaacd 36
liam94 5:98845ccaaacd 37 }
liam94 5:98845ccaaacd 38
liam94 5:98845ccaaacd 39 void dist(int distance){
liam94 5:98845ccaaacd 40
liam94 5:98845ccaaacd 41 if (distance > 250){
liam94 5:98845ccaaacd 42 printf("Safe Distance %dmm\r\n", distance);
liam94 5:98845ccaaacd 43 }
liam94 5:98845ccaaacd 44 }
liam94 5:98845ccaaacd 45
liam94 5:98845ccaaacd 46 void main_menu(){
liam94 5:98845ccaaacd 47
liam94 5:98845ccaaacd 48 lcd.clear();
liam94 5:98845ccaaacd 49 Start_flag = 0;
liam94 5:98845ccaaacd 50 int select = 0;
liam94 5:98845ccaaacd 51 output = 63; //set all LEDs to off
liam94 5:98845ccaaacd 52
liam94 5:98845ccaaacd 53 while (1) {
liam94 5:98845ccaaacd 54
liam94 5:98845ccaaacd 55 Direction d = joystick.get_direction();
liam94 5:98845ccaaacd 56 printf("Direction = %i\n",d);
liam94 5:98845ccaaacd 57
liam94 5:98845ccaaacd 58 switch(select) {
liam94 5:98845ccaaacd 59 case 0:
liam94 5:98845ccaaacd 60 switch(d) {
liam94 5:98845ccaaacd 61 case 1:
liam94 5:98845ccaaacd 62 select = 1;
liam94 5:98845ccaaacd 63 printf("UP");
liam94 5:98845ccaaacd 64 break;
liam94 5:98845ccaaacd 65 case 5:
liam94 5:98845ccaaacd 66 select = 1;
liam94 5:98845ccaaacd 67 printf("Down");
liam94 5:98845ccaaacd 68 break;
liam94 5:98845ccaaacd 69 }
liam94 5:98845ccaaacd 70 break;
liam94 5:98845ccaaacd 71 case 1:
liam94 5:98845ccaaacd 72 switch(d) {
liam94 5:98845ccaaacd 73 case 1:
liam94 5:98845ccaaacd 74 select = 0;
liam94 5:98845ccaaacd 75 printf("UP");
liam94 5:98845ccaaacd 76 break;
liam94 5:98845ccaaacd 77 case 5:
liam94 5:98845ccaaacd 78 select = 0;
liam94 5:98845ccaaacd 79 printf("Down");
liam94 5:98845ccaaacd 80 break;
liam94 5:98845ccaaacd 81 }
liam94 5:98845ccaaacd 82 break;
liam94 5:98845ccaaacd 83
liam94 5:98845ccaaacd 84 }
liam94 5:98845ccaaacd 85 wait(0.1);
liam94 5:98845ccaaacd 86 if (select == 0) {
liam94 5:98845ccaaacd 87 lcd.clear();
liam94 5:98845ccaaacd 88 lcd.printString("Detect",27,0);
liam94 5:98845ccaaacd 89 lcd.printString("Sense Object",7,2);
liam94 5:98845ccaaacd 90 lcd.printString("Calibration",7,3);
liam94 5:98845ccaaacd 91 lcd.drawCircle(3,19,2,FILL_TRANSPARENT);
liam94 5:98845ccaaacd 92 lcd.refresh();
liam94 5:98845ccaaacd 93 wait(0.15);
liam94 5:98845ccaaacd 94 if (Start_flag == 1) {
liam94 5:98845ccaaacd 95 Start_flag = 0;
liam94 5:98845ccaaacd 96 sense_object();
liam94 5:98845ccaaacd 97 }
liam94 5:98845ccaaacd 98 } else if (select == 1) {
liam94 5:98845ccaaacd 99 lcd.clear();
liam94 5:98845ccaaacd 100 lcd.printString("Detect",27,0);
liam94 5:98845ccaaacd 101 lcd.printString("Sense Object", 7,2);
liam94 5:98845ccaaacd 102 lcd.printString("Calibration",7,3);
liam94 5:98845ccaaacd 103 lcd.drawCircle(3,27,2,FILL_TRANSPARENT);
liam94 5:98845ccaaacd 104 lcd.refresh();
liam94 5:98845ccaaacd 105 wait(0.15);
liam94 5:98845ccaaacd 106 if (Start_flag == 1) {
liam94 5:98845ccaaacd 107 Start_flag = 0;
liam94 5:98845ccaaacd 108 }
liam94 5:98845ccaaacd 109
liam94 5:98845ccaaacd 110 }
liam94 5:98845ccaaacd 111 }
liam94 5:98845ccaaacd 112 }
liam94 5:98845ccaaacd 113
liam94 5:98845ccaaacd 114 void sense_object(){
liam94 5:98845ccaaacd 115
liam94 5:98845ccaaacd 116
liam94 5:98845ccaaacd 117 // set inital state
liam94 5:98845ccaaacd 118 int state = 0;
liam94 5:98845ccaaacd 119
liam94 2:3ace5b4ae9a7 120 while(1)
liam94 2:3ace5b4ae9a7 121 {
liam94 4:77500a7f951d 122 output = fsm[state]; // output current state
liam94 5:98845ccaaacd 123 // check which state we are in and see which the next state should be
liam94 4:77500a7f951d 124 switch(state) {
liam94 4:77500a7f951d 125 case 0:
liam94 4:77500a7f951d 126 lcd.clear();
liam94 4:77500a7f951d 127 lcd.printString(" object at 0'",0,0);
liam94 4:77500a7f951d 128 lcd.printString(" R + 60'",0,2);
liam94 4:77500a7f951d 129 lcd.printString(" L - 60'",0,4);
liam94 4:77500a7f951d 130 lcd.refresh();
liam94 3:0b0fbddb6f51 131 if (R == 1){
liam94 3:0b0fbddb6f51 132 state = 1;}
liam94 3:0b0fbddb6f51 133 else if (L == 1){
liam94 3:0b0fbddb6f51 134 state = 5;}
liam94 3:0b0fbddb6f51 135 else state = 0;
liam94 2:3ace5b4ae9a7 136 break;
liam94 4:77500a7f951d 137 case 1:
liam94 4:77500a7f951d 138 lcd.clear();
liam94 4:77500a7f951d 139 lcd.printString(" object at 60'",0,0);
liam94 4:77500a7f951d 140 lcd.printString(" R + 60'",0,2);
liam94 4:77500a7f951d 141 lcd.printString(" L - 60'",0,4);
liam94 4:77500a7f951d 142 lcd.refresh();
liam94 3:0b0fbddb6f51 143 if (R == 1){
liam94 3:0b0fbddb6f51 144 state = 2;}
liam94 3:0b0fbddb6f51 145 else if (L == 1){
liam94 3:0b0fbddb6f51 146 state = 0;}
liam94 3:0b0fbddb6f51 147 else state = 1;
liam94 2:3ace5b4ae9a7 148 break;
liam94 4:77500a7f951d 149 case 2:
liam94 4:77500a7f951d 150 lcd.clear();
liam94 4:77500a7f951d 151 lcd.printString(" object at 120'",0,0);
liam94 4:77500a7f951d 152 lcd.printString(" R + 60'",0,2);
liam94 4:77500a7f951d 153 lcd.printString(" L - 60'",0,4);
liam94 4:77500a7f951d 154 lcd.refresh();
liam94 3:0b0fbddb6f51 155 if (R == 1){
liam94 3:0b0fbddb6f51 156 state = 3;}
liam94 3:0b0fbddb6f51 157 else if (L == 1){
liam94 3:0b0fbddb6f51 158 state = 1;}
liam94 3:0b0fbddb6f51 159 else state = 2;
liam94 2:3ace5b4ae9a7 160 break;
liam94 4:77500a7f951d 161 case 3:
liam94 4:77500a7f951d 162 lcd.clear();
liam94 4:77500a7f951d 163 lcd.printString(" object at 180'",0,0);
liam94 4:77500a7f951d 164 lcd.printString(" R + 60'",0,2);
liam94 4:77500a7f951d 165 lcd.printString(" L - 60'",0,4);
liam94 4:77500a7f951d 166 lcd.refresh();
liam94 3:0b0fbddb6f51 167 if (R == 1){
liam94 3:0b0fbddb6f51 168 state = 4;}
liam94 3:0b0fbddb6f51 169 else if (L == 1){
liam94 3:0b0fbddb6f51 170 state = 2;}
liam94 3:0b0fbddb6f51 171 else state = 3;
liam94 2:3ace5b4ae9a7 172 break;
liam94 4:77500a7f951d 173 case 4:
liam94 4:77500a7f951d 174 lcd.clear();
liam94 4:77500a7f951d 175 lcd.printString(" object at 240'",0,0);
liam94 4:77500a7f951d 176 lcd.printString(" R + 60'",0,2);
liam94 4:77500a7f951d 177 lcd.printString(" L - 60'",0,4);
liam94 4:77500a7f951d 178 lcd.refresh();
liam94 3:0b0fbddb6f51 179 if (R == 1){
liam94 3:0b0fbddb6f51 180 state = 5;}
liam94 3:0b0fbddb6f51 181 else if (L == 1){
liam94 3:0b0fbddb6f51 182 state = 3;}
liam94 3:0b0fbddb6f51 183 else state = 4;
liam94 2:3ace5b4ae9a7 184 break;
liam94 4:77500a7f951d 185 case 5:
liam94 4:77500a7f951d 186 lcd.clear();
liam94 4:77500a7f951d 187 lcd.printString(" object at 300'",0,0);
liam94 4:77500a7f951d 188 lcd.printString(" R + 60'",0,2);
liam94 4:77500a7f951d 189 lcd.printString(" L - 60'",0,4);
liam94 4:77500a7f951d 190 lcd.refresh();
liam94 3:0b0fbddb6f51 191 if (R == 1){
liam94 3:0b0fbddb6f51 192 state = 0;}
liam94 3:0b0fbddb6f51 193 else if (L == 1){
liam94 3:0b0fbddb6f51 194 state = 4;}
liam94 3:0b0fbddb6f51 195 else state = 5;
liam94 2:3ace5b4ae9a7 196 break;
liam94 2:3ace5b4ae9a7 197 default:
liam94 2:3ace5b4ae9a7 198 error("Invalid state"); //invalid state - call error routine
liam94 2:3ace5b4ae9a7 199 // or could jump to starting state i.e. state = 0
liam94 2:3ace5b4ae9a7 200 break;
liam94 2:3ace5b4ae9a7 201 }
liam94 5:98845ccaaacd 202 ThisThread::sleep_for(200);
liam94 5:98845ccaaacd 203 }
liam94 5:98845ccaaacd 204 }
liam94 2:3ace5b4ae9a7 205
liam94 5:98845ccaaacd 206 void Start_isr()
liam94 5:98845ccaaacd 207 {
liam94 5:98845ccaaacd 208 Start_flag = 1;
liam94 2:3ace5b4ae9a7 209 }
liam94 2:3ace5b4ae9a7 210
liam94 5:98845ccaaacd 211 void Back_isr()
liam94 5:98845ccaaacd 212 {
liam94 5:98845ccaaacd 213 Back_flag = 1;
liam94 1:a1795335ef8c 214 }
liam94 5:98845ccaaacd 215