First Draft, serial print change based on distance

Committer:
liam94
Date:
Mon Jan 24 22:35:08 2022 +0000
Revision:
6:18a4dd77057e
Parent:
5:98845ccaaacd
Child:
7:7464fbb0f3e1
added in calibration screen and back buttons for menu

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