Jakobi Blackburn / Mbed 2 deprecated UltrasonicDistanceSensor-el13jb

Dependencies:   N5110WN PowerControl SRF02 mbed

Committer:
JakBlackburn
Date:
Sun Apr 12 22:08:16 2015 +0000
Revision:
7:962b5f044a9b
Parent:
6:a5cd7eb72264
Child:
8:ffcde84b8cf3
updated some documentation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JakBlackburn 1:7f151ab172cb 1 /**
JakBlackburn 1:7f151ab172cb 2 @file main.cpp
JakBlackburn 1:7f151ab172cb 3 @brief Program implementation
JakBlackburn 0:73bfbe8729d4 4
JakBlackburn 1:7f151ab172cb 5 */
JakBlackburn 1:7f151ab172cb 6 #include "main.h"
JakBlackburn 0:73bfbe8729d4 7
JakBlackburn 3:00933efbe463 8 int main()
JakBlackburn 3:00933efbe463 9 {
JakBlackburn 7:962b5f044a9b 10 PHY_PowerDown();
JakBlackburn 7:962b5f044a9b 11 semihost_powerdown();
JakBlackburn 7:962b5f044a9b 12 pc.baud(9600); ///sets baud rate
JakBlackburn 7:962b5f044a9b 13 timer.attach(&timerExpired,0.2); /// Sets the speed of the timer and attaches a function to run
JakBlackburn 7:962b5f044a9b 14 timer2.attach(&timer2Expired,1); /// Sets the speed of the timer and attaches a function to run
JakBlackburn 7:962b5f044a9b 15 timer3.attach(&timer3Expired,2); /// Sets the speed of the timer and attaches a function to run
JakBlackburn 7:962b5f044a9b 16 LogTog.rise(&logToggle); /// attaches a function to the rise of the LogTog button
JakBlackburn 7:962b5f044a9b 17 UnitTog.rise(&unitToggle); /// attaches a function to the rise of the UnitTog button
JakBlackburn 7:962b5f044a9b 18 VisTog.rise(&visToggle); /// attaches a function to the rise of the VisTog button
JakBlackburn 7:962b5f044a9b 19 pc.attach(&serialISR); /// attach serial ISR
JakBlackburn 7:962b5f044a9b 20 set_time(1427846400); /// initialise time to 1st April 2015 00:00:00
JakBlackburn 3:00933efbe463 21
JakBlackburn 7:962b5f044a9b 22 BLED.period(0.02); ///sets the frequency of the Backlight at 50Hz
JakBlackburn 7:962b5f044a9b 23 BLED=BLEDLevel.read(); ///sets the brightness
JakBlackburn 7:962b5f044a9b 24 lcd.init(); ///to initilize the display
JakBlackburn 7:962b5f044a9b 25 introTune(); /// plays the intro tune
JakBlackburn 7:962b5f044a9b 26 lcd.printString("---+--+--+---",3,0);
JakBlackburn 7:962b5f044a9b 27 lcd.printString("Distance",18,1);
JakBlackburn 7:962b5f044a9b 28 lcd.printString("Sensor",25,2);
JakBlackburn 7:962b5f044a9b 29 lcd.printString("By Jakobi",16,3);
JakBlackburn 2:a1eaa4d74b63 30 lcd.printString("Blackburn",16,4);
JakBlackburn 7:962b5f044a9b 31 lcd.printString("---+--+--+---",3,5);
JakBlackburn 3:00933efbe463 32 wait(2);
JakBlackburn 7:962b5f044a9b 33 lcd.clear(); /// clears the opening message
JakBlackburn 0:73bfbe8729d4 34 while(1) {
JakBlackburn 7:962b5f044a9b 35 if (setTimeFlag) { /// if updated time has been sent
JakBlackburn 7:962b5f044a9b 36 setTimeFlag = 0; /// clear flag
JakBlackburn 7:962b5f044a9b 37 setTime(); /// update time
JakBlackburn 1:7f151ab172cb 38 }
JakBlackburn 7:962b5f044a9b 39 if(distance>=100) { /// uses the 2 second timer if the distance is above 100
JakBlackburn 7:962b5f044a9b 40 if(timer3Flag) { /// 2 second timer's flag
JakBlackburn 7:962b5f044a9b 41 pc.printf("Scan Speed = 0.5 \n"); /// prints the scan speed across the serial port
JakBlackburn 7:962b5f044a9b 42 theMain(); /// Contains the main code
JakBlackburn 5:f9b97f057836 43
JakBlackburn 5:f9b97f057836 44 }
JakBlackburn 7:962b5f044a9b 45 } else if(distance>=50) { /// uses the 1 second timer if the distance is above 50 and less than 100
JakBlackburn 7:962b5f044a9b 46 if(timer2Flag) {/// 1 second timer's flag
JakBlackburn 7:962b5f044a9b 47 pc.printf("Scan Speed = 1 \n"); /// prints the scan speed across the serial port
JakBlackburn 7:962b5f044a9b 48 theMain(); /// Contains the main code
JakBlackburn 5:f9b97f057836 49 }
JakBlackburn 7:962b5f044a9b 50 } else if(distance<50) { /// uses the 0.2 second timer if the distance is less than 50
JakBlackburn 7:962b5f044a9b 51 if(timerFlag) {/// 0.2 second timer's flag
JakBlackburn 7:962b5f044a9b 52 pc.printf("Scan Speed = 5 \n"); /// prints the scan speed across the serial port
JakBlackburn 7:962b5f044a9b 53 theMain(); /// Contains the main code
JakBlackburn 5:f9b97f057836 54 }
JakBlackburn 5:f9b97f057836 55 } else {
JakBlackburn 7:962b5f044a9b 56 error(1); //displays an error message across the mBed leds
JakBlackburn 5:f9b97f057836 57 }
JakBlackburn 5:f9b97f057836 58
JakBlackburn 2:a1eaa4d74b63 59 Sleep();
JakBlackburn 0:73bfbe8729d4 60 }
JakBlackburn 0:73bfbe8729d4 61 }
JakBlackburn 0:73bfbe8729d4 62
JakBlackburn 3:00933efbe463 63 void timerExpired()
JakBlackburn 3:00933efbe463 64 {
JakBlackburn 3:00933efbe463 65 timerFlag=1;
JakBlackburn 0:73bfbe8729d4 66 }
JakBlackburn 0:73bfbe8729d4 67
JakBlackburn 5:f9b97f057836 68 void timer2Expired()
JakBlackburn 5:f9b97f057836 69 {
JakBlackburn 5:f9b97f057836 70 timer2Flag=1;
JakBlackburn 5:f9b97f057836 71 }
JakBlackburn 5:f9b97f057836 72 void timer3Expired()
JakBlackburn 5:f9b97f057836 73 {
JakBlackburn 5:f9b97f057836 74 timer3Flag=1;
JakBlackburn 5:f9b97f057836 75 }
JakBlackburn 5:f9b97f057836 76
JakBlackburn 5:f9b97f057836 77 void theMain()
JakBlackburn 5:f9b97f057836 78 {
JakBlackburn 7:962b5f044a9b 79 BLED=BLEDLevel.read(); ///sets the brightness
JakBlackburn 7:962b5f044a9b 80 timerFlag =0; ///resets flags
JakBlackburn 5:f9b97f057836 81 timer2Flag=0;
JakBlackburn 5:f9b97f057836 82 timer3Flag=0;
JakBlackburn 7:962b5f044a9b 83 time_t seconds = time(NULL); /// get current time
JakBlackburn 7:962b5f044a9b 84 /// format time into a string (time and date)
JakBlackburn 5:f9b97f057836 85 strftime(buffer, 30 , "%d/%m/%y %R", localtime(&seconds));
JakBlackburn 7:962b5f044a9b 86 float dist = getDistance()*unitX; ///reads the distance and sets it to a float value.
JakBlackburn 7:962b5f044a9b 87 ///prints the value to the serial port.
JakBlackburn 5:f9b97f057836 88 if(state==1) {
JakBlackburn 7:962b5f044a9b 89 pc.printf("%s , Distance = %.2f %s \n",buffer,dist,units); ///prints the value to the serial port.
JakBlackburn 5:f9b97f057836 90 } else if(state !=1) {
JakBlackburn 7:962b5f044a9b 91 pc.printf("%s , Distance = %.0f %s \n",buffer,dist,units); ///prints the value to the serial port.
JakBlackburn 5:f9b97f057836 92 }
JakBlackburn 5:f9b97f057836 93 logging(buffer,distance);
JakBlackburn 5:f9b97f057836 94 if(visual==0) {
JakBlackburn 5:f9b97f057836 95 LCDVis0();
JakBlackburn 5:f9b97f057836 96 } else if(visual==1) {
JakBlackburn 5:f9b97f057836 97 LCDVis1();
JakBlackburn 5:f9b97f057836 98 } else if(visual==2) {
JakBlackburn 5:f9b97f057836 99 LCDVis2();
JakBlackburn 5:f9b97f057836 100 } else if(visual==3) {
JakBlackburn 5:f9b97f057836 101 LCDVis3();
JakBlackburn 5:f9b97f057836 102 } else {
JakBlackburn 5:f9b97f057836 103 error(2);
JakBlackburn 5:f9b97f057836 104 }
JakBlackburn 5:f9b97f057836 105
JakBlackburn 5:f9b97f057836 106 }
JakBlackburn 5:f9b97f057836 107
JakBlackburn 0:73bfbe8729d4 108
JakBlackburn 3:00933efbe463 109 void warnings()
JakBlackburn 3:00933efbe463 110 {
JakBlackburn 0:73bfbe8729d4 111 WLED=1;
JakBlackburn 0:73bfbe8729d4 112 volume= BuzVol.read();
JakBlackburn 5:f9b97f057836 113 if(distance<20) {
JakBlackburn 5:f9b97f057836 114 Buzzer.ContNote(1000.0, volume);
JakBlackburn 6:a5cd7eb72264 115
JakBlackburn 5:f9b97f057836 116 } else {
JakBlackburn 5:f9b97f057836 117 Buzzer.PlayNote(1000.0, 0.1, volume);
JakBlackburn 5:f9b97f057836 118 }
JakBlackburn 3:00933efbe463 119 WLED=0;
JakBlackburn 0:73bfbe8729d4 120 }
JakBlackburn 3:00933efbe463 121 float getDistance()
JakBlackburn 3:00933efbe463 122 {
JakBlackburn 0:73bfbe8729d4 123 int dist0 = sensor.getDistanceCm();
JakBlackburn 5:f9b97f057836 124
JakBlackburn 0:73bfbe8729d4 125 int dist1 = sensor.getDistanceCm();
JakBlackburn 5:f9b97f057836 126
JakBlackburn 0:73bfbe8729d4 127 int dist2 = sensor.getDistanceCm();
JakBlackburn 5:f9b97f057836 128
JakBlackburn 0:73bfbe8729d4 129 int dist3 = sensor.getDistanceCm();
JakBlackburn 5:f9b97f057836 130
JakBlackburn 0:73bfbe8729d4 131 int dist4 = sensor.getDistanceCm();
JakBlackburn 5:f9b97f057836 132
JakBlackburn 0:73bfbe8729d4 133 int dist5 = sensor.getDistanceCm();
JakBlackburn 5:f9b97f057836 134
JakBlackburn 0:73bfbe8729d4 135 int dist6 = sensor.getDistanceCm();
JakBlackburn 5:f9b97f057836 136
JakBlackburn 0:73bfbe8729d4 137 int dist7 = sensor.getDistanceCm();
JakBlackburn 5:f9b97f057836 138
JakBlackburn 0:73bfbe8729d4 139 int dist8 = sensor.getDistanceCm();
JakBlackburn 5:f9b97f057836 140
JakBlackburn 0:73bfbe8729d4 141 int dist9 = sensor.getDistanceCm();
JakBlackburn 5:f9b97f057836 142
JakBlackburn 3:00933efbe463 143 distance=(dist0+dist1+dist2+dist3+dist4+dist5+dist6+dist7+dist8+dist9)/10;
JakBlackburn 5:f9b97f057836 144
JakBlackburn 0:73bfbe8729d4 145 warnings();
JakBlackburn 1:7f151ab172cb 146 return distance;
JakBlackburn 0:73bfbe8729d4 147 }
JakBlackburn 0:73bfbe8729d4 148
JakBlackburn 3:00933efbe463 149 void unitToggle()
JakBlackburn 3:00933efbe463 150 {
JakBlackburn 7:962b5f044a9b 151 state = fsm[state].nextState[UnitTog]; /// read input and update current state
JakBlackburn 7:962b5f044a9b 152 unitX = fsm[state].unitMultiple; /// set output depending on current state
JakBlackburn 7:962b5f044a9b 153 units= fsm[state].Unit; ///
JakBlackburn 1:7f151ab172cb 154 wait(0.2);
JakBlackburn 1:7f151ab172cb 155 pc.printf("unit multiple = %.2f \n",unitX);
JakBlackburn 2:a1eaa4d74b63 156 pc.printf("Units = %s \n",units);
JakBlackburn 1:7f151ab172cb 157 }
JakBlackburn 1:7f151ab172cb 158
JakBlackburn 5:f9b97f057836 159
JakBlackburn 7:962b5f044a9b 160 void error(int E) /// up to 14. IF 15 shown it is a ack bit error for the SRF02
JakBlackburn 3:00933efbe463 161 {
JakBlackburn 3:00933efbe463 162 while(1) {
JakBlackburn 1:7f151ab172cb 163 leds=0;
JakBlackburn 1:7f151ab172cb 164 wait(0.2);
JakBlackburn 1:7f151ab172cb 165 leds=E;
JakBlackburn 1:7f151ab172cb 166 wait(0.2);
JakBlackburn 1:7f151ab172cb 167 }
JakBlackburn 0:73bfbe8729d4 168 }
JakBlackburn 0:73bfbe8729d4 169
JakBlackburn 4:2e9aa626a02c 170 void logToggle()
JakBlackburn 1:7f151ab172cb 171 {
JakBlackburn 1:7f151ab172cb 172 logButtonFlag = !logButtonFlag; //flips the flag
JakBlackburn 1:7f151ab172cb 173 if(logButtonFlag) {
JakBlackburn 1:7f151ab172cb 174 LLED=1; // Logging LED will be on if the device is logging
JakBlackburn 1:7f151ab172cb 175 pc.printf("-------\n Data Logging\n\r");
JakBlackburn 1:7f151ab172cb 176 } else {
JakBlackburn 1:7f151ab172cb 177 LLED=0; // Logging LED will be off if the device isn't logging
JakBlackburn 1:7f151ab172cb 178 pc.printf("-------\n Stopped Logging Data\n\r");
JakBlackburn 0:73bfbe8729d4 179 }
JakBlackburn 1:7f151ab172cb 180 wait(0.2);
JakBlackburn 1:7f151ab172cb 181 }
JakBlackburn 1:7f151ab172cb 182
JakBlackburn 1:7f151ab172cb 183 void logging(char* data,float data1)
JakBlackburn 1:7f151ab172cb 184 {
JakBlackburn 1:7f151ab172cb 185 if(logButtonFlag) {
JakBlackburn 7:962b5f044a9b 186 FILE *fp = fopen("/local/log.csv", "a"); /// open 'log.csv' for appending
JakBlackburn 7:962b5f044a9b 187 /// if the file doesn't exist it is created, if it exists, data is appended to the end
JakBlackburn 7:962b5f044a9b 188 fprintf(fp," %s , %.2f\n ",data,data1); /// print string to file
JakBlackburn 7:962b5f044a9b 189 fclose(fp); /// close file
JakBlackburn 4:2e9aa626a02c 190 pc.printf("Data Logged\n");
JakBlackburn 7:962b5f044a9b 191 LLED=1; /// keeps the led on if it is logging
JakBlackburn 1:7f151ab172cb 192 } else {
JakBlackburn 4:2e9aa626a02c 193 pc.printf("WARNING : Unlogged Data\n");
JakBlackburn 1:7f151ab172cb 194 LLED=0;
JakBlackburn 0:73bfbe8729d4 195 }
JakBlackburn 1:7f151ab172cb 196 }
JakBlackburn 1:7f151ab172cb 197
JakBlackburn 1:7f151ab172cb 198 void setTime()
JakBlackburn 1:7f151ab172cb 199 {
JakBlackburn 7:962b5f044a9b 200 /// print time for debugging
JakBlackburn 1:7f151ab172cb 201 pc.printf("set time - %s",rxString);
JakBlackburn 7:962b5f044a9b 202 /// atoi() converts a string to an integer
JakBlackburn 1:7f151ab172cb 203 int time = atoi(rxString);
JakBlackburn 7:962b5f044a9b 204 /// update the time
JakBlackburn 1:7f151ab172cb 205 set_time(time);
JakBlackburn 3:00933efbe463 206 pc.printf("set time - %d",time);
JakBlackburn 1:7f151ab172cb 207 }
JakBlackburn 1:7f151ab172cb 208 void serialISR()
JakBlackburn 1:7f151ab172cb 209 {
JakBlackburn 7:962b5f044a9b 210 /// when a serial interrupt occurs, read rx string into buffer
JakBlackburn 1:7f151ab172cb 211 pc.gets(rxString,16);
JakBlackburn 7:962b5f044a9b 212 /// set flag
JakBlackburn 1:7f151ab172cb 213 setTimeFlag = 1;
JakBlackburn 2:a1eaa4d74b63 214 }
JakBlackburn 2:a1eaa4d74b63 215
JakBlackburn 2:a1eaa4d74b63 216 void introTune()
JakBlackburn 2:a1eaa4d74b63 217 {
JakBlackburn 2:a1eaa4d74b63 218 Buzzer.PlayNote(1319.0,0.084,1.0);
JakBlackburn 2:a1eaa4d74b63 219 wait(0.01);
JakBlackburn 2:a1eaa4d74b63 220 Buzzer.PlayNote(1319.0,0.084,1.0);
JakBlackburn 2:a1eaa4d74b63 221 wait(0.094);
JakBlackburn 2:a1eaa4d74b63 222 Buzzer.PlayNote(1319.0,0.084,1.0);
JakBlackburn 2:a1eaa4d74b63 223 wait(0.094);
JakBlackburn 2:a1eaa4d74b63 224 Buzzer.PlayNote(1047.0,0.084,1.0);
JakBlackburn 2:a1eaa4d74b63 225 wait(0.01);
JakBlackburn 2:a1eaa4d74b63 226 Buzzer.PlayNote(1319.0,0.084,1.0);
JakBlackburn 2:a1eaa4d74b63 227 wait(0.094);
JakBlackburn 2:a1eaa4d74b63 228 Buzzer.PlayNote(1568.0,0.084,1.0);
JakBlackburn 2:a1eaa4d74b63 229 wait(0.26);
JakBlackburn 2:a1eaa4d74b63 230 Buzzer.PlayNote(784.0,0.084,1.0);
JakBlackburn 2:a1eaa4d74b63 231 }
JakBlackburn 2:a1eaa4d74b63 232
JakBlackburn 7:962b5f044a9b 233 void checkerBoard() /// creates a checked pattern on the lcd
JakBlackburn 2:a1eaa4d74b63 234 {
JakBlackburn 2:a1eaa4d74b63 235 for(int i=0; i<84; i+=2) {
JakBlackburn 2:a1eaa4d74b63 236 for(int j=0; j<48; j+=2) {
JakBlackburn 2:a1eaa4d74b63 237 lcd.setPixel(i,j);
JakBlackburn 2:a1eaa4d74b63 238 }
JakBlackburn 2:a1eaa4d74b63 239 }
JakBlackburn 2:a1eaa4d74b63 240 lcd.refresh();
JakBlackburn 3:00933efbe463 241 }
JakBlackburn 3:00933efbe463 242
JakBlackburn 7:962b5f044a9b 243 void LCDVis0() /// the max range is 249 (according to the data sheet) and there are 84 pixels wide on the LCD so this creates the amount of cm for each pixel
JakBlackburn 3:00933efbe463 244 {
JakBlackburn 3:00933efbe463 245 lcd.clear();
JakBlackburn 6:a5cd7eb72264 246 if(logButtonFlag) {
JakBlackburn 6:a5cd7eb72264 247 lcd.printString("-L-",0,5);
JakBlackburn 6:a5cd7eb72264 248 }
JakBlackburn 6:a5cd7eb72264 249
JakBlackburn 7:962b5f044a9b 250 int I = distance*0.337; /// and then multiplies the current distance by that value as (84/249) =0.337...
JakBlackburn 6:a5cd7eb72264 251 I=I+3;
JakBlackburn 6:a5cd7eb72264 252 if(I>=79){I=79;}
JakBlackburn 4:2e9aa626a02c 253 pc.printf("bar width - %d pixels \n",I);
JakBlackburn 6:a5cd7eb72264 254 lcd.drawRect(0,16,83,16,0);
JakBlackburn 6:a5cd7eb72264 255 lcd.drawRect(2,18,I,12,1);
JakBlackburn 6:a5cd7eb72264 256 if(state==1) {
JakBlackburn 7:962b5f044a9b 257 sprintf(Dbuffer, "%.2f", distance*unitX); /// prints the value to the serial port.
JakBlackburn 6:a5cd7eb72264 258 } else if(state !=1) {
JakBlackburn 7:962b5f044a9b 259 sprintf(Dbuffer, "%.0f", distance*unitX); /// prints the value to the serial port.
JakBlackburn 6:a5cd7eb72264 260 }
JakBlackburn 6:a5cd7eb72264 261 lcd.printString (buffer,0,0);
JakBlackburn 6:a5cd7eb72264 262 lcd.printString (Dbuffer,26,5);
JakBlackburn 6:a5cd7eb72264 263 lcd.printString (units,50,5);
JakBlackburn 3:00933efbe463 264 lcd.refresh();
JakBlackburn 3:00933efbe463 265 }
JakBlackburn 3:00933efbe463 266
JakBlackburn 7:962b5f044a9b 267 void LCDVis1() /// the max range is 249 (according to the data sheet) and there are 48 pixels high on the LCD so this creates the amount of cm for each pixel
JakBlackburn 3:00933efbe463 268 {
JakBlackburn 3:00933efbe463 269 lcd.clear();
JakBlackburn 6:a5cd7eb72264 270 if(logButtonFlag) {
JakBlackburn 6:a5cd7eb72264 271 lcd.printString("-L-",0,5);
JakBlackburn 6:a5cd7eb72264 272 }
JakBlackburn 6:a5cd7eb72264 273
JakBlackburn 7:962b5f044a9b 274 int J = distance*0.14; /// and then multiplies the current distance by that value as (36/249) = 0.19..(as top 12 pixels are for time)
JakBlackburn 6:a5cd7eb72264 275 if(J>=36) {
JakBlackburn 6:a5cd7eb72264 276 J=36;
JakBlackburn 5:f9b97f057836 277 }
JakBlackburn 4:2e9aa626a02c 278 pc.printf("bar height - %d pixels \n",J);
JakBlackburn 6:a5cd7eb72264 279 lcd.drawRect(24,9,34,38,0);
JakBlackburn 6:a5cd7eb72264 280 lcd.drawRect(26,47-J,30,J-2,1);
JakBlackburn 6:a5cd7eb72264 281 if(state==1) {
JakBlackburn 7:962b5f044a9b 282 sprintf(Dbuffer, "%.2f", distance*unitX); /// prints the value to the serial port.
JakBlackburn 6:a5cd7eb72264 283 } else if(state !=1) {
JakBlackburn 7:962b5f044a9b 284 sprintf(Dbuffer, "%.0f", distance*unitX); /// prints the value to the serial port.
JakBlackburn 6:a5cd7eb72264 285 }
JakBlackburn 6:a5cd7eb72264 286 lcd.printString (buffer,0,0);
JakBlackburn 6:a5cd7eb72264 287 lcd.printString (Dbuffer,60,3);
JakBlackburn 6:a5cd7eb72264 288 lcd.printString (units,64,4);
JakBlackburn 3:00933efbe463 289 lcd.refresh();
JakBlackburn 3:00933efbe463 290 }
JakBlackburn 3:00933efbe463 291
JakBlackburn 5:f9b97f057836 292 void LCDVis2()
JakBlackburn 5:f9b97f057836 293 {
JakBlackburn 4:2e9aa626a02c 294 lcd.clear();
JakBlackburn 6:a5cd7eb72264 295 if(logButtonFlag) {
JakBlackburn 6:a5cd7eb72264 296 lcd.printString("-L-",0,5);
JakBlackburn 6:a5cd7eb72264 297 }
JakBlackburn 6:a5cd7eb72264 298
JakBlackburn 4:2e9aa626a02c 299 car();
JakBlackburn 7:962b5f044a9b 300 int I = distance*0.277; /// and then multiplies the current distance by that value as (69/249) =0.277...
JakBlackburn 5:f9b97f057836 301 if(I>=84) {
JakBlackburn 5:f9b97f057836 302 I=84;
JakBlackburn 5:f9b97f057836 303 }
JakBlackburn 4:2e9aa626a02c 304 pc.printf("bar width - %d pixels \n",I);
JakBlackburn 6:a5cd7eb72264 305 lcd.drawRect(I+15,9,69,29,1);
JakBlackburn 6:a5cd7eb72264 306 if(state==1) {
JakBlackburn 7:962b5f044a9b 307 sprintf(Dbuffer, "%.2f", distance*unitX); /// prints the value to the serial port.
JakBlackburn 6:a5cd7eb72264 308 } else if(state !=1) {
JakBlackburn 7:962b5f044a9b 309 sprintf(Dbuffer, "%.0f", distance*unitX); /// prints the value to the serial port.
JakBlackburn 6:a5cd7eb72264 310 }
JakBlackburn 6:a5cd7eb72264 311 lcd.printString (buffer,0,0);
JakBlackburn 6:a5cd7eb72264 312 lcd.printString (Dbuffer,26,5);
JakBlackburn 6:a5cd7eb72264 313 lcd.printString (units,50,5);
JakBlackburn 4:2e9aa626a02c 314 lcd.refresh();
JakBlackburn 4:2e9aa626a02c 315 }
JakBlackburn 5:f9b97f057836 316 void LCDVis3()
JakBlackburn 5:f9b97f057836 317 {
JakBlackburn 4:2e9aa626a02c 318 lcd.clear();
JakBlackburn 6:a5cd7eb72264 319 if(logButtonFlag) {
JakBlackburn 6:a5cd7eb72264 320 lcd.printString("-L-",0,5);
JakBlackburn 6:a5cd7eb72264 321 }
JakBlackburn 6:a5cd7eb72264 322 lcd.printString (buffer,0,0);
JakBlackburn 4:2e9aa626a02c 323 int Dist=distance;
JakBlackburn 5:f9b97f057836 324 if(state==0) {
JakBlackburn 5:f9b97f057836 325 lcd.printString("CM",54,3);
JakBlackburn 4:2e9aa626a02c 326 }
JakBlackburn 5:f9b97f057836 327 if(state==1) {
JakBlackburn 5:f9b97f057836 328 lcd.decimal();
JakBlackburn 5:f9b97f057836 329 lcd.printString("M",54,3);
JakBlackburn 4:2e9aa626a02c 330 }
JakBlackburn 5:f9b97f057836 331 if(state==2) {
JakBlackburn 5:f9b97f057836 332 lcd.number0(57);
JakBlackburn 4:2e9aa626a02c 333 lcd.printString("MM",73,3);
JakBlackburn 4:2e9aa626a02c 334 }
JakBlackburn 4:2e9aa626a02c 335 int S=Dist %10;
JakBlackburn 4:2e9aa626a02c 336 pc.printf("singles - %d \n",S);
JakBlackburn 5:f9b97f057836 337 if(S==0) {
JakBlackburn 5:f9b97f057836 338 lcd.number0(38);
JakBlackburn 5:f9b97f057836 339 } else if(S==1) {
JakBlackburn 5:f9b97f057836 340 lcd.number1(38);
JakBlackburn 5:f9b97f057836 341 } else if(S==2) {
JakBlackburn 5:f9b97f057836 342 lcd.number2(38);
JakBlackburn 5:f9b97f057836 343 } else if(S==3) {
JakBlackburn 5:f9b97f057836 344 lcd.number3(38);
JakBlackburn 5:f9b97f057836 345 } else if(S==4) {
JakBlackburn 5:f9b97f057836 346 lcd.number4(38);
JakBlackburn 5:f9b97f057836 347 } else if(S==5) {
JakBlackburn 5:f9b97f057836 348 lcd.number5(38);
JakBlackburn 5:f9b97f057836 349 } else if(S==6) {
JakBlackburn 5:f9b97f057836 350 lcd.number6(38);
JakBlackburn 5:f9b97f057836 351 } else if(S==7) {
JakBlackburn 5:f9b97f057836 352 lcd.number7(38);
JakBlackburn 5:f9b97f057836 353 } else if(S==8) {
JakBlackburn 5:f9b97f057836 354 lcd.number8(38);
JakBlackburn 5:f9b97f057836 355 } else if(S==9) {
JakBlackburn 5:f9b97f057836 356 lcd.number9(38);
JakBlackburn 5:f9b97f057836 357 } else {
JakBlackburn 5:f9b97f057836 358 error(4);
JakBlackburn 3:00933efbe463 359 }
JakBlackburn 5:f9b97f057836 360
JakBlackburn 4:2e9aa626a02c 361 int T=Dist/10 %10;
JakBlackburn 5:f9b97f057836 362 pc.printf("tens - %d \n",T);
JakBlackburn 5:f9b97f057836 363 if(T==0) {
JakBlackburn 5:f9b97f057836 364 lcd.number0(19);
JakBlackburn 5:f9b97f057836 365 } else if(T==1) {
JakBlackburn 5:f9b97f057836 366 lcd.number1(19);
JakBlackburn 5:f9b97f057836 367 } else if(T==2) {
JakBlackburn 5:f9b97f057836 368 lcd.number2(19);
JakBlackburn 5:f9b97f057836 369 } else if(T==3) {
JakBlackburn 5:f9b97f057836 370 lcd.number3(19);
JakBlackburn 5:f9b97f057836 371 } else if(T==4) {
JakBlackburn 5:f9b97f057836 372 lcd.number4(19);
JakBlackburn 5:f9b97f057836 373 } else if(T==5) {
JakBlackburn 5:f9b97f057836 374 lcd.number5(19);
JakBlackburn 5:f9b97f057836 375 } else if(T==6) {
JakBlackburn 5:f9b97f057836 376 lcd.number6(19);
JakBlackburn 5:f9b97f057836 377 } else if(T==7) {
JakBlackburn 5:f9b97f057836 378 lcd.number7(19);
JakBlackburn 5:f9b97f057836 379 } else if(T==8) {
JakBlackburn 5:f9b97f057836 380 lcd.number8(19);
JakBlackburn 5:f9b97f057836 381 } else if(T==9) {
JakBlackburn 5:f9b97f057836 382 lcd.number9(19);
JakBlackburn 5:f9b97f057836 383 } else {
JakBlackburn 5:f9b97f057836 384 error(4);
JakBlackburn 4:2e9aa626a02c 385 }
JakBlackburn 4:2e9aa626a02c 386 int H=Dist/100 %10;
JakBlackburn 4:2e9aa626a02c 387 pc.printf("Hundreds - %d \n",H);
JakBlackburn 5:f9b97f057836 388 if(H==0) {
JakBlackburn 5:f9b97f057836 389
JakBlackburn 5:f9b97f057836 390 } else if(H==1) {
JakBlackburn 5:f9b97f057836 391 lcd.number1(0);
JakBlackburn 5:f9b97f057836 392 } else if(H==2) {
JakBlackburn 5:f9b97f057836 393 lcd.number2(0);
JakBlackburn 5:f9b97f057836 394 } else if(H==3) {
JakBlackburn 5:f9b97f057836 395 lcd.number3(0);
JakBlackburn 5:f9b97f057836 396 } else if(H==4) {
JakBlackburn 5:f9b97f057836 397 lcd.number4(0);
JakBlackburn 5:f9b97f057836 398 } else if(H==5) {
JakBlackburn 5:f9b97f057836 399 lcd.number5(0);
JakBlackburn 5:f9b97f057836 400 } else if(H==6) {
JakBlackburn 5:f9b97f057836 401 lcd.number6(0);
JakBlackburn 5:f9b97f057836 402 } else if(H==7) {
JakBlackburn 5:f9b97f057836 403 lcd.number7(0);
JakBlackburn 5:f9b97f057836 404 } else if(H==8) {
JakBlackburn 5:f9b97f057836 405 lcd.number8(0);
JakBlackburn 5:f9b97f057836 406 } else if(H==9) {
JakBlackburn 5:f9b97f057836 407 lcd.number9(0);
JakBlackburn 5:f9b97f057836 408 } else {
JakBlackburn 5:f9b97f057836 409 error(4);
JakBlackburn 4:2e9aa626a02c 410 }
JakBlackburn 5:f9b97f057836 411 lcd.refresh();
JakBlackburn 4:2e9aa626a02c 412 }
JakBlackburn 4:2e9aa626a02c 413
JakBlackburn 4:2e9aa626a02c 414
JakBlackburn 4:2e9aa626a02c 415
JakBlackburn 4:2e9aa626a02c 416
JakBlackburn 4:2e9aa626a02c 417
JakBlackburn 4:2e9aa626a02c 418
JakBlackburn 5:f9b97f057836 419 void car()
JakBlackburn 5:f9b97f057836 420 {
JakBlackburn 7:962b5f044a9b 421 lcd.setPixel(4,19);lcd.setPixel(5,19);lcd.setPixel(6,19);lcd.setPixel(10,19);lcd.setPixel(11,19);lcd.setPixel(12,19);
JakBlackburn 7:962b5f044a9b 422 lcd.setPixel(4,20);lcd.setPixel(5,20);lcd.setPixel(6,20);lcd.setPixel(10,20);lcd.setPixel(11,20);lcd.setPixel(12,20);
JakBlackburn 7:962b5f044a9b 423 lcd.setPixel(1,21);lcd.setPixel(2,21);lcd.setPixel(3,21);lcd.setPixel(4,21);lcd.setPixel(5,21);lcd.setPixel(6,21);
JakBlackburn 7:962b5f044a9b 424 lcd.setPixel(7,21);lcd.setPixel(8,21);lcd.setPixel(9,21);lcd.setPixel(10,21);lcd.setPixel(11,21);lcd.setPixel(12,21);
JakBlackburn 7:962b5f044a9b 425 lcd.setPixel(13,21);lcd.setPixel(0,22);lcd.setPixel(1,22);lcd.setPixel(2,22);lcd.setPixel(3,22);lcd.setPixel(4,22);
JakBlackburn 7:962b5f044a9b 426 lcd.setPixel(6,22);lcd.setPixel(7,22);lcd.setPixel(8,22);lcd.setPixel(9,22);lcd.setPixel(10,22);lcd.setPixel(12,22);
JakBlackburn 7:962b5f044a9b 427 lcd.setPixel(13,22);lcd.setPixel(0,23);lcd.setPixel(1,23);lcd.setPixel(2,23);lcd.setPixel(3,23);lcd.setPixel(6,23);
JakBlackburn 7:962b5f044a9b 428 lcd.setPixel(7,23);lcd.setPixel(8,23);lcd.setPixel(9,23);lcd.setPixel(10,23);lcd.setPixel(12,23);lcd.setPixel(13,23);
JakBlackburn 7:962b5f044a9b 429 lcd.setPixel(0,24);lcd.setPixel(1,24);lcd.setPixel(2,24);lcd.setPixel(3,24);lcd.setPixel(6,24);lcd.setPixel(7,24);
JakBlackburn 7:962b5f044a9b 430 lcd.setPixel(8,24);lcd.setPixel(9,24);lcd.setPixel(10,24);lcd.setPixel(12,24);lcd.setPixel(13,24);lcd.setPixel(0,25);
JakBlackburn 7:962b5f044a9b 431 lcd.setPixel(1,25);lcd.setPixel(2,25);lcd.setPixel(3,25);lcd.setPixel(6,25);lcd.setPixel(7,25);lcd.setPixel(8,25);
JakBlackburn 7:962b5f044a9b 432 lcd.setPixel(9,25);lcd.setPixel(10,25);lcd.setPixel(12,25);lcd.setPixel(13,25);lcd.setPixel(0,26);lcd.setPixel(1,26);
JakBlackburn 7:962b5f044a9b 433 lcd.setPixel(2,26);lcd.setPixel(3,26);lcd.setPixel(4,26);lcd.setPixel(6,26);lcd.setPixel(7,26);lcd.setPixel(8,26);
JakBlackburn 7:962b5f044a9b 434 lcd.setPixel(9,26);lcd.setPixel(10,26);lcd.setPixel(12,26);lcd.setPixel(13,26);lcd.setPixel(1,27);lcd.setPixel(2,27);
JakBlackburn 7:962b5f044a9b 435 lcd.setPixel(3,27);lcd.setPixel(4,27);lcd.setPixel(5,27);lcd.setPixel(6,27);lcd.setPixel(7,27);lcd.setPixel(8,27);
JakBlackburn 7:962b5f044a9b 436 lcd.setPixel(9,27);lcd.setPixel(10,27);lcd.setPixel(11,27);lcd.setPixel(12,27);lcd.setPixel(13,27);lcd.setPixel(4,28);
JakBlackburn 7:962b5f044a9b 437 lcd.setPixel(5,28);lcd.setPixel(6,28);lcd.setPixel(10,28);lcd.setPixel(11,28);lcd.setPixel(12,28);lcd.setPixel(4,29);
JakBlackburn 7:962b5f044a9b 438 lcd.setPixel(5,29);lcd.setPixel(6,29);lcd.setPixel(10,29);lcd.setPixel(11,29);lcd.setPixel(12,29);
JakBlackburn 3:00933efbe463 439 }
JakBlackburn 3:00933efbe463 440
JakBlackburn 3:00933efbe463 441 void visToggle()
JakBlackburn 3:00933efbe463 442 {
JakBlackburn 7:962b5f044a9b 443 Vstate = Vfsm[Vstate].nextState[VisTog]; /// read input and update current state
JakBlackburn 7:962b5f044a9b 444 visual = Vfsm[Vstate].visual; /// set output depending on current state
JakBlackburn 3:00933efbe463 445 wait(0.2);
JakBlackburn 5:f9b97f057836 446 if(visual==0) {
JakBlackburn 3:00933efbe463 447 pc.printf("----Left to Right----\n\r");
JakBlackburn 3:00933efbe463 448 }
JakBlackburn 3:00933efbe463 449 if(visual==1) {
JakBlackburn 3:00933efbe463 450 pc.printf("----Up to Down----\n\r");
JakBlackburn 3:00933efbe463 451 }
JakBlackburn 3:00933efbe463 452 if(visual==2) {
JakBlackburn 4:2e9aa626a02c 453 pc.printf("----Car & Wall----\n\r");
JakBlackburn 4:2e9aa626a02c 454 }
JakBlackburn 4:2e9aa626a02c 455 if(visual==3) {
JakBlackburn 4:2e9aa626a02c 456 pc.printf("----Numbers----\n\r");
JakBlackburn 3:00933efbe463 457 }
JakBlackburn 7:962b5f044a9b 458 }
JakBlackburn 7:962b5f044a9b 459
JakBlackburn 7:962b5f044a9b 460 int semihost_powerdown(){
JakBlackburn 7:962b5f044a9b 461 uint32_t arg;
JakBlackburn 7:962b5f044a9b 462 return __semihost(USR_POWERDOWN, &arg);
JakBlackburn 0:73bfbe8729d4 463 }