Level 2 Project Range Device

Dependencies:   N5110 SDFileSystem SRF02 TMP102 mbed

Committer:
el15pjt
Date:
Wed Apr 27 09:09:55 2016 +0000
Revision:
8:fe6ebe807b9d
Parent:
7:14cfb0df30e6
Child:
9:bc259fc22fa2
Prior to tidying;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el15pjt 7:14cfb0df30e6 1 /**
el15pjt 7:14cfb0df30e6 2 @file main.h
el15pjt 7:14cfb0df30e6 3 @brief Header file containing functions prototypes, defines and global variables.
el15pjt 7:14cfb0df30e6 4 @brief Ranger Project
el15pjt 7:14cfb0df30e6 5 @brief Revision 1.0.
el15pjt 7:14cfb0df30e6 6 @author Philip Thompson
el15pjt 7:14cfb0df30e6 7 @date March 2016
el15pjt 7:14cfb0df30e6 8 @brief The following code has been writen for the University of Leeds ELEC264501 embedded system project and is intended to
el15pjt 7:14cfb0df30e6 9 create a programe that can read a distance from an SRF02 sensor and then based aponn the reading disply the distance on the screen
el15pjt 7:14cfb0df30e6 10 and increment the LEDs and buzzer according the provision of a temperature sensor is also provied as a secondary function when no
el15pjt 7:14cfb0df30e6 11 object is detected with in range.
el15pjt 7:14cfb0df30e6 12 */
el15pjt 7:14cfb0df30e6 13
el15pjt 7:14cfb0df30e6 14 #ifndef MAIN_H
el15pjt 7:14cfb0df30e6 15 #define MAIN_H
el15pjt 7:14cfb0df30e6 16 #include "mbed.h"
el15pjt 7:14cfb0df30e6 17 #include "mbed.h"
el15pjt 7:14cfb0df30e6 18 #include "SRF02.h"
el15pjt 7:14cfb0df30e6 19 #include "N5110.h"
el15pjt 7:14cfb0df30e6 20 #include "TMP102.h"
el15pjt 7:14cfb0df30e6 21 #include "SDFileSystem.h"
el15pjt 7:14cfb0df30e6 22
el15pjt 7:14cfb0df30e6 23 #define LOW 0 /// No output
el15pjt 7:14cfb0df30e6 24 #define HIGH 1 /// High output
el15pjt 7:14cfb0df30e6 25 #define METRIC 1
el15pjt 7:14cfb0df30e6 26 #define IMPERIAL 0
el15pjt 7:14cfb0df30e6 27
el15pjt 7:14cfb0df30e6 28
el15pjt 8:fe6ebe807b9d 29
el15pjt 7:14cfb0df30e6 30 /**
el15pjt 7:14cfb0df30e6 31 @namespace LEDs
el15pjt 7:14cfb0df30e6 32 @brief Output for Alert LEDs
el15pjt 7:14cfb0df30e6 33 */
el15pjt 7:14cfb0df30e6 34 DigitalOut rr_led (PTA1);
el15pjt 7:14cfb0df30e6 35 DigitalOut a_led (PTC2);
el15pjt 7:14cfb0df30e6 36 DigitalOut gg_led(PTB23);
el15pjt 7:14cfb0df30e6 37
el15pjt 7:14cfb0df30e6 38 /**
el15pjt 7:14cfb0df30e6 39 @namespace BOARDLEDs
el15pjt 7:14cfb0df30e6 40 @brief On board LEDs
el15pjt 7:14cfb0df30e6 41 */
el15pjt 7:14cfb0df30e6 42 DigitalOut r_led(LED_RED);
el15pjt 7:14cfb0df30e6 43 DigitalOut g_led(LED_GREEN);
el15pjt 7:14cfb0df30e6 44 DigitalOut b_led(LED_BLUE);
el15pjt 7:14cfb0df30e6 45
el15pjt 7:14cfb0df30e6 46 /**
el15pjt 7:14cfb0df30e6 47 @namespace Buzzer
el15pjt 7:14cfb0df30e6 48 @brief PWM output for Buzzer
el15pjt 7:14cfb0df30e6 49 */
el15pjt 7:14cfb0df30e6 50 PwmOut buzzer(PTA2);
el15pjt 7:14cfb0df30e6 51
el15pjt 7:14cfb0df30e6 52 /**
el15pjt 7:14cfb0df30e6 53 @namespace Buttons
el15pjt 7:14cfb0df30e6 54 @brief Button triggered Interrupts
el15pjt 7:14cfb0df30e6 55 */
el15pjt 7:14cfb0df30e6 56 InterruptIn sw1(PTB19);
el15pjt 7:14cfb0df30e6 57 InterruptIn sw2(PTB18);
el15pjt 7:14cfb0df30e6 58
el15pjt 7:14cfb0df30e6 59 /**
el15pjt 7:14cfb0df30e6 60 @namespace Timers
el15pjt 8:fe6ebe807b9d 61 @brief Tickers and Timeouts
el15pjt 7:14cfb0df30e6 62 */
el15pjt 7:14cfb0df30e6 63 Ticker ticker;
el15pjt 7:14cfb0df30e6 64 Ticker ticker_srf02;
el15pjt 8:fe6ebe807b9d 65 //Ticker ticker_tone;
el15pjt 7:14cfb0df30e6 66 Ticker ticker_standby;
el15pjt 7:14cfb0df30e6 67 Timeout buzzoff;
el15pjt 8:fe6ebe807b9d 68 Timeout buzzon;
el15pjt 7:14cfb0df30e6 69
el15pjt 7:14cfb0df30e6 70 // Create TMP102 object
el15pjt 7:14cfb0df30e6 71 TMP102 tmp102(I2C_SDA,I2C_SCL);
el15pjt 7:14cfb0df30e6 72
el15pjt 7:14cfb0df30e6 73 /**
el15pjt 7:14cfb0df30e6 74 @namespace Ranger
el15pjt 7:14cfb0df30e6 75 @brief Creat the Ranger object
el15pjt 7:14cfb0df30e6 76 */
el15pjt 7:14cfb0df30e6 77 SRF02 srf02(I2C_SDA,I2C_SCL);
el15pjt 7:14cfb0df30e6 78
el15pjt 7:14cfb0df30e6 79 /**
el15pjt 7:14cfb0df30e6 80 @namespace LCD
el15pjt 7:14cfb0df30e6 81 @brief Creats the LCD object
el15pjt 7:14cfb0df30e6 82 */
el15pjt 7:14cfb0df30e6 83 N5110 lcd(PTE26,PTA0,PTC4,PTD0,PTD2,PTD1,PTC3);
el15pjt 7:14cfb0df30e6 84
el15pjt 7:14cfb0df30e6 85 /// Connections to SD card holder on K64F (SPI interface)
el15pjt 7:14cfb0df30e6 86 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS
el15pjt 8:fe6ebe807b9d 87 FILE *fp;
el15pjt 7:14cfb0df30e6 88 /**
el15pjt 7:14cfb0df30e6 89 @namespace TimerFlags
el15pjt 7:14cfb0df30e6 90 @brief Flags for use with timed interupts
el15pjt 7:14cfb0df30e6 91 */
el15pjt 7:14cfb0df30e6 92 volatile int g_timer_flag_led = 0, g_timer_flag_srf02 = 0, g_timer_flag_tone = 0; /** Flag rised by interupts*/
el15pjt 7:14cfb0df30e6 93 volatile int g_timer_flag_standby = 0;
el15pjt 8:fe6ebe807b9d 94 volatile int buzz_flag = 0;
el15pjt 7:14cfb0df30e6 95 /**
el15pjt 7:14cfb0df30e6 96 @namespace ButtonFlages
el15pjt 7:14cfb0df30e6 97 @brief Flags for use with button interupts
el15pjt 7:14cfb0df30e6 98 */
el15pjt 7:14cfb0df30e6 99 volatile int g_sw1_flag = 0, g_sw2_flag = 0;
el15pjt 7:14cfb0df30e6 100
el15pjt 7:14cfb0df30e6 101 /**
el15pjt 7:14cfb0df30e6 102 @namespace RangePresets
el15pjt 7:14cfb0df30e6 103 @brief Preset range of the differant alert levels
el15pjt 7:14cfb0df30e6 104 */
el15pjt 8:fe6ebe807b9d 105 int r1 = 3,/*!< Upper limit of alert 1 */r2 = 10,/*!< Upper limit of alert 2 */r3 = 20,/*!< Upper limit of alert 3 */r4 = 30,/*!< Upper limit of alert 4 */r5 = 40,/*!< Upper limit of alert 5 */r6 = 50,/*!< Upper limit of alert 6 */r7 = 60; /*!< Upper limit of alert 7 */
el15pjt 7:14cfb0df30e6 106 float avgdistance;
el15pjt 7:14cfb0df30e6 107 int subpage; /*!< veriable to hold the page being viewed with in the submenu */
el15pjt 7:14cfb0df30e6 108 int page;/*!< veriable to hold the page being viewed with in the menu */
el15pjt 7:14cfb0df30e6 109 int offset = 0;/*!< veriable to hold the offset and adjust the 0 Range point */
el15pjt 7:14cfb0df30e6 110 int alert;/*!< veriable to hold the current alert level */
el15pjt 7:14cfb0df30e6 111 int distance;/*!< veriable to hold the distance read from the srf02 sensor */
el15pjt 7:14cfb0df30e6 112 float bright = 1;/*!< veriable to hold the current LED backlight of the 5110 LCD */
el15pjt 7:14cfb0df30e6 113 char units = METRIC;/*!< veriable to hold the current unit type set to METRIC as default */
el15pjt 7:14cfb0df30e6 114 int length, length1, length2, length3, length4;
el15pjt 7:14cfb0df30e6 115 char buffer[14], buffer1[14], buffer2[14], buffer3[14], buffer4[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el15pjt 7:14cfb0df30e6 116 float T;
el15pjt 8:fe6ebe807b9d 117 int standby = 1;
el15pjt 7:14cfb0df30e6 118 float c =1; /// convertion factor from Cm to inch
el15pjt 8:fe6ebe807b9d 119 int check_flag = 0;
el15pjt 7:14cfb0df30e6 120
el15pjt 7:14cfb0df30e6 121
el15pjt 7:14cfb0df30e6 122 struct Alertlevel {
el15pjt 7:14cfb0df30e6 123 char srr_led; /// stead RED LED state
el15pjt 7:14cfb0df30e6 124 char sa_led; /// stead AMBER LED state
el15pjt 7:14cfb0df30e6 125 char sgg_led; /// stead GREEN LED state
el15pjt 7:14cfb0df30e6 126 char frr_led;///FLASHING RED LED state
el15pjt 7:14cfb0df30e6 127 char fa_led; ///FLASHING AMBER LED state
el15pjt 7:14cfb0df30e6 128 char fgg_led; ///FLASHING GREEN LED state
el15pjt 8:fe6ebe807b9d 129 float toneon;
el15pjt 8:fe6ebe807b9d 130 float toneoff;
el15pjt 8:fe6ebe807b9d 131 }; /*!< Stucture to hold all outputs. Steady LEDs, Flashing LEDs, Tone on, Tonne off*/
el15pjt 7:14cfb0df30e6 132 typedef const struct Alertlevel STyp;
el15pjt 7:14cfb0df30e6 133
el15pjt 7:14cfb0df30e6 134 STyp Alertlevel[8] = {
el15pjt 7:14cfb0df30e6 135 {LOW,LOW,LOW,LOW,LOW,LOW,0,1}, // no output
el15pjt 8:fe6ebe807b9d 136 {LOW,LOW,LOW,LOW,LOW,HIGH,0.1,0.9}, //flash green
el15pjt 8:fe6ebe807b9d 137 {LOW,LOW,HIGH,LOW,LOW,LOW,0.1,0.5}, //steady green
el15pjt 8:fe6ebe807b9d 138 {LOW,LOW,HIGH,LOW,HIGH,LOW,0.1,0.3}, //flash amber
el15pjt 8:fe6ebe807b9d 139 {LOW,HIGH,HIGH,LOW,LOW,LOW,0.2,0.2}, //steady amber
el15pjt 8:fe6ebe807b9d 140 {LOW,HIGH,HIGH,HIGH,LOW,LOW,0.2,0.1}, //flash red
el15pjt 8:fe6ebe807b9d 141 {HIGH,HIGH,HIGH,LOW,LOW,LOW,0.1,0.1},// steady red
el15pjt 8:fe6ebe807b9d 142 {LOW,LOW,LOW,HIGH,HIGH,HIGH,1,0} // all flash
el15pjt 7:14cfb0df30e6 143 };/*!< Array contaning structures for diffent outputs */
el15pjt 7:14cfb0df30e6 144
el15pjt 8:fe6ebe807b9d 145 void flip();
el15pjt 8:fe6ebe807b9d 146 void buzzflag();
el15pjt 7:14cfb0df30e6 147
el15pjt 8:fe6ebe807b9d 148
el15pjt 8:fe6ebe807b9d 149 /** Controls the LCD while not in a Menu Function called to print to the LCD display
el15pjt 8:fe6ebe807b9d 150 @param i used to scale the max distaance to the width of the screen
el15pjt 8:fe6ebe807b9d 151 @param distance Distance read from sensor to be dispayed
el15pjt 8:fe6ebe807b9d 152 @param distbar used to adjust how far along the screen the bar is to go acorrding to distance
el15pjt 8:fe6ebe807b9d 153 @code
el15pjt 8:fe6ebe807b9d 154 if (alert == 0) {
el15pjt 8:fe6ebe807b9d 155 if (g_timer_flag_standby) {
el15pjt 8:fe6ebe807b9d 156 g_timer_flag_standby = 0;
el15pjt 8:fe6ebe807b9d 157 T = tmp102.get_temperature();
el15pjt 8:fe6ebe807b9d 158 standby++;
el15pjt 8:fe6ebe807b9d 159 if (standby >3) {
el15pjt 8:fe6ebe807b9d 160 standby = 3;
el15pjt 8:fe6ebe807b9d 161 }
el15pjt 8:fe6ebe807b9d 162 }
el15pjt 8:fe6ebe807b9d 163
el15pjt 8:fe6ebe807b9d 164 switch (standby) {
el15pjt 8:fe6ebe807b9d 165 case 1:
el15pjt 8:fe6ebe807b9d 166 if (check_flag == 1) {
el15pjt 8:fe6ebe807b9d 167 sprintf(buffer4,"COLLISIONCHECK");
el15pjt 8:fe6ebe807b9d 168 }
el15pjt 8:fe6ebe807b9d 169 lcd.clear();
el15pjt 8:fe6ebe807b9d 170 sprintf(buffer,"**PATH CLEAR**");
el15pjt 8:fe6ebe807b9d 171 lcd.printString(buffer,0,0);
el15pjt 8:fe6ebe807b9d 172 lcd.printString(buffer4,0,5);
el15pjt 8:fe6ebe807b9d 173 lcd.refresh();
el15pjt 8:fe6ebe807b9d 174 break;
el15pjt 8:fe6ebe807b9d 175 case 2:
el15pjt 8:fe6ebe807b9d 176 if (check_flag == 1) {
el15pjt 8:fe6ebe807b9d 177 sprintf(buffer4,"COLLISIONCHECK");
el15pjt 8:fe6ebe807b9d 178 lcd.clear();
el15pjt 8:fe6ebe807b9d 179 sprintf(buffer3,"TEMP = %.2f",T);
el15pjt 8:fe6ebe807b9d 180 sprintf(buffer2,"TEMPERATER");
el15pjt 8:fe6ebe807b9d 181 lcd.printString(buffer3,4,2);
el15pjt 8:fe6ebe807b9d 182 lcd.printString(buffer2,12,1);
el15pjt 8:fe6ebe807b9d 183 lcd.printString(buffer4,0,5);
el15pjt 8:fe6ebe807b9d 184
el15pjt 8:fe6ebe807b9d 185 break;
el15pjt 8:fe6ebe807b9d 186 case 3:
el15pjt 8:fe6ebe807b9d 187 if (check_flag == 1) {
el15pjt 8:fe6ebe807b9d 188 sprintf(buffer4,"COLLISIONCHECK");
el15pjt 8:fe6ebe807b9d 189 lcd.clear();
el15pjt 8:fe6ebe807b9d 190 sprintf(buffer3,"TEMP = %.2f",T);
el15pjt 8:fe6ebe807b9d 191 sprintf(buffer2,"TEMPERATER");
el15pjt 8:fe6ebe807b9d 192 lcd.refresh();
el15pjt 8:fe6ebe807b9d 193 lcd.printString(buffer3,4,2);
el15pjt 8:fe6ebe807b9d 194 lcd.printString(buffer2,12,1);
el15pjt 8:fe6ebe807b9d 195 lcd.printString(buffer4,0,5);
el15pjt 8:fe6ebe807b9d 196 lcd.setBrightness(0);
el15pjt 8:fe6ebe807b9d 197 break;
el15pjt 8:fe6ebe807b9d 198 }
el15pjt 8:fe6ebe807b9d 199 }
el15pjt 8:fe6ebe807b9d 200
el15pjt 8:fe6ebe807b9d 201 //If alert isn't 0 then the distance is to be dispayed alonng with the the distance bar
el15pjt 8:fe6ebe807b9d 202 else {
el15pjt 8:fe6ebe807b9d 203 lcd.setBrightness(bright);
el15pjt 8:fe6ebe807b9d 204 standby =0;
el15pjt 8:fe6ebe807b9d 205 lcd.clear();
el15pjt 8:fe6ebe807b9d 206
el15pjt 8:fe6ebe807b9d 207 if (units == METRIC) {
el15pjt 8:fe6ebe807b9d 208 sprintf(buffer,"%0.2f Cm",avgdistance);
el15pjt 8:fe6ebe807b9d 209 sprintf(buffer1,"****RANGE!****");
el15pjt 8:fe6ebe807b9d 210 sprintf(buffer2,"DISTANCE");
el15pjt 8:fe6ebe807b9d 211
el15pjt 8:fe6ebe807b9d 212 sprintf(buffer4,"Menu");
el15pjt 8:fe6ebe807b9d 213
el15pjt 8:fe6ebe807b9d 214 } else {
el15pjt 8:fe6ebe807b9d 215 sprintf(buffer,"%0.2f Inches",avgdistance);
el15pjt 8:fe6ebe807b9d 216 sprintf(buffer1,"****RANGE!****");
el15pjt 8:fe6ebe807b9d 217 sprintf(buffer2,"***DISTANCE***");
el15pjt 8:fe6ebe807b9d 218 sprintf(buffer4,"Menu");
el15pjt 8:fe6ebe807b9d 219 }
el15pjt 8:fe6ebe807b9d 220 lcd.printString(buffer,25,2);
el15pjt 8:fe6ebe807b9d 221 lcd.printString(buffer1,0,0);
el15pjt 8:fe6ebe807b9d 222 lcd.printString(buffer2,16,1);
el15pjt 8:fe6ebe807b9d 223 lcd.printString(buffer4,0,5);
el15pjt 8:fe6ebe807b9d 224
el15pjt 8:fe6ebe807b9d 225
el15pjt 8:fe6ebe807b9d 226 float h = (r7/84);
el15pjt 8:fe6ebe807b9d 227 float distbar = (avgdistance*h);
el15pjt 8:fe6ebe807b9d 228 //drawRect(int x0,int y0,int width,int height,int fill);
el15pjt 8:fe6ebe807b9d 229 lcd.drawRect(0,29,distbar,7,1); //
el15pjt 8:fe6ebe807b9d 230 lcd.refresh();
el15pjt 8:fe6ebe807b9d 231 @endcode
el15pjt 8:fe6ebe807b9d 232 */
el15pjt 7:14cfb0df30e6 233 void lcdoutput();
el15pjt 8:fe6ebe807b9d 234
el15pjt 7:14cfb0df30e6 235 void timer_isr_led();
el15pjt 7:14cfb0df30e6 236 void timer_isr_srf02();
el15pjt 7:14cfb0df30e6 237 void timer_isr_tone();
el15pjt 7:14cfb0df30e6 238 void timer_isr_standby();
el15pjt 8:fe6ebe807b9d 239
el15pjt 7:14cfb0df30e6 240 /** Called to increment to brightness by 0.2 each time when at 1 resets back to 0.0
el15pjt 7:14cfb0df30e6 241 @param bright 0.0-1
el15pjt 7:14cfb0df30e6 242 @returns lcd.setbrightness
el15pjt 7:14cfb0df30e6 243 @code
el15pjt 7:14cfb0df30e6 244 if (bright == 1.0) {
el15pjt 7:14cfb0df30e6 245 bright = 0;
el15pjt 7:14cfb0df30e6 246 } else {
el15pjt 7:14cfb0df30e6 247 bright += 0.2;
el15pjt 7:14cfb0df30e6 248 }
el15pjt 7:14cfb0df30e6 249 lcd.setBrightness(bright);
el15pjt 7:14cfb0df30e6 250 @endcode
el15pjt 7:14cfb0df30e6 251 */
el15pjt 7:14cfb0df30e6 252 void backlight();
el15pjt 8:fe6ebe807b9d 253 void Getdistance();
el15pjt 7:14cfb0df30e6 254 void init_K64F();
el15pjt 7:14cfb0df30e6 255 void sw2_isr();
el15pjt 7:14cfb0df30e6 256 void sw1_isr();
el15pjt 7:14cfb0df30e6 257 void setup();
el15pjt 7:14cfb0df30e6 258
el15pjt 7:14cfb0df30e6 259 /** A fuction used to determin the alert level given a range with the use of IF statments
el15pjt 7:14cfb0df30e6 260 @param distance The distance read from sensor
el15pjt 7:14cfb0df30e6 261 @param alert The level that distance falls with in 0 -7
el15pjt 7:14cfb0df30e6 262 @returns alert
el15pjt 7:14cfb0df30e6 263 @code
el15pjt 7:14cfb0df30e6 264 if (distance >= r6 && distance < r7) { // r6 150 and r7 200
el15pjt 7:14cfb0df30e6 265 alert = 1; /// alert 1 distance between preset 150Cm to 200Cm
el15pjt 7:14cfb0df30e6 266 } else if (distance >= r5 && distance < r6) {
el15pjt 7:14cfb0df30e6 267 alert = 2; /// alert 2 when between preset 90Cm to 150Cm
el15pjt 7:14cfb0df30e6 268 } else if (distance >= r4 && distance < r5) {
el15pjt 7:14cfb0df30e6 269 alert = 3; /// alert 3 when distance between 60Cm to 90Cm
el15pjt 7:14cfb0df30e6 270 } else if (distance >= r3 && distance < r4) {
el15pjt 7:14cfb0df30e6 271 alert = 4; /// alert 4 when distance between 40Cm and 60Cm
el15pjt 7:14cfb0df30e6 272 } else if ( distance > r2 && distance < r3) {
el15pjt 7:14cfb0df30e6 273 alert = 5; ///alert 5 when distance between 20Cm and 40m
el15pjt 7:14cfb0df30e6 274 } else if (distance > r1 && distance <= r2) { //r1 3 and r2 20
el15pjt 7:14cfb0df30e6 275 alert = 6; ///alert 6 when distance between 1 and 20
el15pjt 7:14cfb0df30e6 276 } else if (distance <=r1) {
el15pjt 7:14cfb0df30e6 277 alert = 7; ///alert 7 when distance below 1Cm
el15pjt 7:14cfb0df30e6 278 } else {
el15pjt 7:14cfb0df30e6 279 alert = 0; /// alert 0 all else
el15pjt 7:14cfb0df30e6 280 }
el15pjt 7:14cfb0df30e6 281 }
el15pjt 7:14cfb0df30e6 282 @endcode
el15pjt 7:14cfb0df30e6 283 */
el15pjt 7:14cfb0df30e6 284 void setalert();
el15pjt 7:14cfb0df30e6 285 /** If statments to determine the output of each LED by inspecting the struct in the relevent element of the alertlevel array
el15pjt 7:14cfb0df30e6 286
el15pjt 7:14cfb0df30e6 287 @code
el15pjt 7:14cfb0df30e6 288 if (alert ==7) {
el15pjt 7:14cfb0df30e6 289 if (g_timer_flag_led) {
el15pjt 7:14cfb0df30e6 290 g_timer_flag_led = 0; // if it has, clear the flag
el15pjt 7:14cfb0df30e6 291 rr_led = !rr_led;
el15pjt 7:14cfb0df30e6 292 gg_led = !gg_led;
el15pjt 7:14cfb0df30e6 293 a_led = !a_led;
el15pjt 7:14cfb0df30e6 294 }
el15pjt 7:14cfb0df30e6 295 } else if(Alertlevel[alert].fa_led == HIGH) {
el15pjt 7:14cfb0df30e6 296 if (g_timer_flag_led) {
el15pjt 7:14cfb0df30e6 297 g_timer_flag_led = 0; // if it has, clear the flag
el15pjt 7:14cfb0df30e6 298 a_led = !a_led;
el15pjt 7:14cfb0df30e6 299 }
el15pjt 7:14cfb0df30e6 300 } else if (Alertlevel[alert].frr_led == HIGH) {
el15pjt 7:14cfb0df30e6 301 if (g_timer_flag_led) {
el15pjt 7:14cfb0df30e6 302 g_timer_flag_led = 0; // if it has, clear the flag
el15pjt 7:14cfb0df30e6 303 rr_led = !rr_led;
el15pjt 7:14cfb0df30e6 304 }
el15pjt 7:14cfb0df30e6 305 } else if(Alertlevel[alert].fgg_led == HIGH) {
el15pjt 7:14cfb0df30e6 306 if (g_timer_flag_led) {
el15pjt 7:14cfb0df30e6 307 g_timer_flag_led = 0; // if it has, clear the flag
el15pjt 7:14cfb0df30e6 308 gg_led = !gg_led;
el15pjt 7:14cfb0df30e6 309 }
el15pjt 7:14cfb0df30e6 310 } else {
el15pjt 7:14cfb0df30e6 311 rr_led = Alertlevel[alert].srr_led;
el15pjt 7:14cfb0df30e6 312 a_led = Alertlevel[alert].sa_led;
el15pjt 7:14cfb0df30e6 313 gg_led = Alertlevel[alert].sgg_led;
el15pjt 7:14cfb0df30e6 314 }
el15pjt 7:14cfb0df30e6 315
el15pjt 7:14cfb0df30e6 316 }
el15pjt 7:14cfb0df30e6 317 @endcode*/
el15pjt 7:14cfb0df30e6 318 void setleds();
el15pjt 7:14cfb0df30e6 319 void setbuzzer();
el15pjt 7:14cfb0df30e6 320
el15pjt 7:14cfb0df30e6 321
el15pjt 7:14cfb0df30e6 322 void menu();
el15pjt 7:14cfb0df30e6 323 /**
el15pjt 7:14cfb0df30e6 324 {
el15pjt 7:14cfb0df30e6 325 Function called to invoke a menu within a while loop with button interupts used to move pages and adjust within a switch statment
el15pjt 7:14cfb0df30e6 326 @param g_sw1_flag 0 or 1 used to advance page
el15pjt 7:14cfb0df30e6 327 @param g_sw2_flag 0 or 1 used to adjust current item
el15pjt 7:14cfb0df30e6 328 @code
el15pjt 7:14cfb0df30e6 329 while(1) {
el15pjt 7:14cfb0df30e6 330
el15pjt 7:14cfb0df30e6 331
el15pjt 7:14cfb0df30e6 332 if (g_sw1_flag) {
el15pjt 7:14cfb0df30e6 333 g_sw1_flag = 0;
el15pjt 7:14cfb0df30e6 334 page++; /// Moves page
el15pjt 7:14cfb0df30e6 335 lcd.clear();
el15pjt 7:14cfb0df30e6 336 }
el15pjt 7:14cfb0df30e6 337 switch (page) {
el15pjt 7:14cfb0df30e6 338 case 0:
el15pjt 7:14cfb0df30e6 339 if (g_sw2_flag) {
el15pjt 7:14cfb0df30e6 340 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 7:14cfb0df30e6 341 backlight();
el15pjt 7:14cfb0df30e6 342 lcd.clear();
el15pjt 7:14cfb0df30e6 343 } else {
el15pjt 7:14cfb0df30e6 344 int lightbar = bright*84;
el15pjt 7:14cfb0df30e6 345 sprintf(buffer2,"*****MENU*****");
el15pjt 7:14cfb0df30e6 346 sprintf(buffer1,"BACKLIGHT");
el15pjt 7:14cfb0df30e6 347 sprintf(buffer3,"%.0f%%",bright*100);
el15pjt 7:14cfb0df30e6 348 lcd.printString(buffer2,0,0);
el15pjt 7:14cfb0df30e6 349 lcd.printString(buffer1,0,1);
el15pjt 7:14cfb0df30e6 350 lcd.printString(buffer3,0,2);
el15pjt 7:14cfb0df30e6 351 lcd.drawRect(0,38,lightbar,7,1);
el15pjt 7:14cfb0df30e6 352 lcd.refresh();
el15pjt 7:14cfb0df30e6 353
el15pjt 7:14cfb0df30e6 354 }
el15pjt 7:14cfb0df30e6 355 break;
el15pjt 7:14cfb0df30e6 356
el15pjt 7:14cfb0df30e6 357 case 1:
el15pjt 7:14cfb0df30e6 358 if (g_sw2_flag) {
el15pjt 7:14cfb0df30e6 359 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 7:14cfb0df30e6 360 if (offset == 20) {
el15pjt 7:14cfb0df30e6 361 offset = 0;
el15pjt 7:14cfb0df30e6 362 } else {
el15pjt 7:14cfb0df30e6 363 offset += 1;
el15pjt 7:14cfb0df30e6 364 }
el15pjt 7:14cfb0df30e6 365 } else {
el15pjt 7:14cfb0df30e6 366 length2 = sprintf(buffer2,"*****MENU*****");
el15pjt 7:14cfb0df30e6 367 length1 = sprintf(buffer1,"OFFSET");
el15pjt 7:14cfb0df30e6 368 length3 = sprintf(buffer3,"%i",offset);
el15pjt 7:14cfb0df30e6 369 lcd.printString(buffer2,0,0);
el15pjt 7:14cfb0df30e6 370 lcd.printString(buffer1,0,1);
el15pjt 7:14cfb0df30e6 371 lcd.printString(buffer3,0,2);
el15pjt 7:14cfb0df30e6 372 lcd.refresh();
el15pjt 7:14cfb0df30e6 373 }
el15pjt 7:14cfb0df30e6 374
el15pjt 7:14cfb0df30e6 375 break;
el15pjt 7:14cfb0df30e6 376
el15pjt 7:14cfb0df30e6 377 case 2:
el15pjt 7:14cfb0df30e6 378 if (g_sw2_flag) {
el15pjt 7:14cfb0df30e6 379 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 7:14cfb0df30e6 380 if (units == METRIC) {
el15pjt 7:14cfb0df30e6 381 units = IMPERIAL;
el15pjt 7:14cfb0df30e6 382 } else {
el15pjt 7:14cfb0df30e6 383 units = METRIC;
el15pjt 7:14cfb0df30e6 384 }
el15pjt 7:14cfb0df30e6 385 }
el15pjt 7:14cfb0df30e6 386 if (units == METRIC) {
el15pjt 7:14cfb0df30e6 387 sprintf(buffer3,"METRIC");
el15pjt 7:14cfb0df30e6 388 lcd.printString(buffer3,0,2);
el15pjt 7:14cfb0df30e6 389 } else {
el15pjt 7:14cfb0df30e6 390 sprintf(buffer3,"IMPERIAL");
el15pjt 7:14cfb0df30e6 391 lcd.printString(buffer3,0,2);
el15pjt 7:14cfb0df30e6 392 }
el15pjt 7:14cfb0df30e6 393
el15pjt 7:14cfb0df30e6 394 sprintf(buffer2,"*****MENU*****");
el15pjt 7:14cfb0df30e6 395 sprintf(buffer1,"UNITS");
el15pjt 7:14cfb0df30e6 396 lcd.printString(buffer2,0,0);
el15pjt 7:14cfb0df30e6 397 lcd.printString(buffer1,0,1);
el15pjt 7:14cfb0df30e6 398 lcd.refresh();
el15pjt 7:14cfb0df30e6 399
el15pjt 7:14cfb0df30e6 400 break;
el15pjt 7:14cfb0df30e6 401
el15pjt 7:14cfb0df30e6 402 case 3:
el15pjt 7:14cfb0df30e6 403
el15pjt 7:14cfb0df30e6 404 if (g_sw2_flag) {
el15pjt 7:14cfb0df30e6 405 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 7:14cfb0df30e6 406 submenu();
el15pjt 7:14cfb0df30e6 407 }
el15pjt 7:14cfb0df30e6 408 length2 = sprintf(buffer3,"*****MENU*****");
el15pjt 7:14cfb0df30e6 409 length3 = sprintf(buffer1,"RANGE");
el15pjt 7:14cfb0df30e6 410 length3 = sprintf(buffer2,"PARAMETERS");
el15pjt 7:14cfb0df30e6 411 lcd.printString(buffer3,0,0);
el15pjt 7:14cfb0df30e6 412 lcd.printString(buffer1,0,1);
el15pjt 7:14cfb0df30e6 413 lcd.printString(buffer2,0,2);
el15pjt 7:14cfb0df30e6 414
el15pjt 7:14cfb0df30e6 415
el15pjt 7:14cfb0df30e6 416 break;
el15pjt 7:14cfb0df30e6 417
el15pjt 7:14cfb0df30e6 418 default:
el15pjt 7:14cfb0df30e6 419 lcd.clear();
el15pjt 7:14cfb0df30e6 420 return;
el15pjt 7:14cfb0df30e6 421 }
el15pjt 7:14cfb0df30e6 422 }
el15pjt 7:14cfb0df30e6 423 @endcode
el15pjt 7:14cfb0df30e6 424 */
el15pjt 8:fe6ebe807b9d 425 void menu();
el15pjt 8:fe6ebe807b9d 426 /**
el15pjt 8:fe6ebe807b9d 427 @code
el15pjt 8:fe6ebe807b9d 428 while(1) {
el15pjt 8:fe6ebe807b9d 429 /// innterupt used to shift page
el15pjt 8:fe6ebe807b9d 430 if (g_sw1_flag) {
el15pjt 8:fe6ebe807b9d 431 g_sw1_flag = 0;
el15pjt 8:fe6ebe807b9d 432 subpage++;
el15pjt 8:fe6ebe807b9d 433 }
el15pjt 8:fe6ebe807b9d 434 switch (subpage) {
el15pjt 8:fe6ebe807b9d 435 ///interupt used to adjust range
el15pjt 8:fe6ebe807b9d 436 case 0:
el15pjt 8:fe6ebe807b9d 437 if (g_sw2_flag) {
el15pjt 8:fe6ebe807b9d 438 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 8:fe6ebe807b9d 439 if (r2 == r3) {
el15pjt 8:fe6ebe807b9d 440 r2 = 1;
el15pjt 8:fe6ebe807b9d 441 } else {
el15pjt 8:fe6ebe807b9d 442 r2 = r2+1;
el15pjt 7:14cfb0df30e6 443 }
el15pjt 8:fe6ebe807b9d 444 }
el15pjt 8:fe6ebe807b9d 445 length2 = sprintf(buffer1,"*****MENU*****");
el15pjt 8:fe6ebe807b9d 446 length3 = sprintf(buffer2,"RANGE");
el15pjt 8:fe6ebe807b9d 447 length3 = sprintf(buffer3,"PARAMETERS");
el15pjt 8:fe6ebe807b9d 448 length4 = sprintf(buffer4,"1Cm to %iCm",r2);
el15pjt 8:fe6ebe807b9d 449 lcd.printString(buffer1,0,0);
el15pjt 8:fe6ebe807b9d 450 lcd.printString(buffer2,0,1);
el15pjt 8:fe6ebe807b9d 451 lcd.printString(buffer3,0,2);
el15pjt 8:fe6ebe807b9d 452 lcd.printString(buffer4,0,3);
el15pjt 8:fe6ebe807b9d 453 break;
el15pjt 7:14cfb0df30e6 454
el15pjt 8:fe6ebe807b9d 455 case 1:
el15pjt 7:14cfb0df30e6 456
el15pjt 8:fe6ebe807b9d 457 if (g_sw2_flag) {
el15pjt 8:fe6ebe807b9d 458 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 8:fe6ebe807b9d 459 if (r3 == r4) {
el15pjt 8:fe6ebe807b9d 460 r3 = r2;
el15pjt 8:fe6ebe807b9d 461 } else {
el15pjt 8:fe6ebe807b9d 462 r3 += 1;
el15pjt 7:14cfb0df30e6 463 }
el15pjt 8:fe6ebe807b9d 464 }
el15pjt 7:14cfb0df30e6 465
el15pjt 8:fe6ebe807b9d 466 sprintf(buffer1,"*****MENU*****");
el15pjt 8:fe6ebe807b9d 467 sprintf(buffer2,"RANGE");
el15pjt 8:fe6ebe807b9d 468 sprintf(buffer3,"PARAMETERS");
el15pjt 8:fe6ebe807b9d 469 sprintf(buffer4,"%iCm to %iCm",r2,r3);
el15pjt 8:fe6ebe807b9d 470 lcd.printString(buffer1,0,0);
el15pjt 8:fe6ebe807b9d 471 lcd.printString(buffer2,0,1);
el15pjt 8:fe6ebe807b9d 472 lcd.printString(buffer3,0,2);
el15pjt 8:fe6ebe807b9d 473 lcd.printString(buffer4,0,3);
el15pjt 8:fe6ebe807b9d 474 break;
el15pjt 7:14cfb0df30e6 475
el15pjt 8:fe6ebe807b9d 476 case 2:
el15pjt 7:14cfb0df30e6 477
el15pjt 8:fe6ebe807b9d 478 if (g_sw2_flag) {
el15pjt 8:fe6ebe807b9d 479 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 8:fe6ebe807b9d 480 if (r4 == r5) {
el15pjt 8:fe6ebe807b9d 481 r4 = r3;
el15pjt 8:fe6ebe807b9d 482 } else {
el15pjt 8:fe6ebe807b9d 483 r4 += 1;
el15pjt 7:14cfb0df30e6 484 }
el15pjt 8:fe6ebe807b9d 485 }
el15pjt 7:14cfb0df30e6 486
el15pjt 8:fe6ebe807b9d 487 sprintf(buffer1,"*****MENU*****");
el15pjt 8:fe6ebe807b9d 488 sprintf(buffer2,"RANGE");
el15pjt 8:fe6ebe807b9d 489 sprintf(buffer3,"PARAMETERS");
el15pjt 8:fe6ebe807b9d 490 sprintf(buffer4,"%iCm to %iCm",r3,r4);
el15pjt 8:fe6ebe807b9d 491 lcd.printString(buffer1,0,0);
el15pjt 8:fe6ebe807b9d 492 lcd.printString(buffer2,0,1);
el15pjt 8:fe6ebe807b9d 493 lcd.printString(buffer3,0,2);
el15pjt 8:fe6ebe807b9d 494 lcd.printString(buffer4,0,3);
el15pjt 8:fe6ebe807b9d 495 break;
el15pjt 7:14cfb0df30e6 496
el15pjt 8:fe6ebe807b9d 497 case 3:
el15pjt 7:14cfb0df30e6 498
el15pjt 8:fe6ebe807b9d 499 if (g_sw2_flag) {
el15pjt 8:fe6ebe807b9d 500 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 8:fe6ebe807b9d 501 if (r5 == r6) {
el15pjt 8:fe6ebe807b9d 502 r5 = r4;
el15pjt 8:fe6ebe807b9d 503 } else {
el15pjt 8:fe6ebe807b9d 504 r5 += 1;
el15pjt 7:14cfb0df30e6 505 }
el15pjt 8:fe6ebe807b9d 506 }
el15pjt 7:14cfb0df30e6 507
el15pjt 8:fe6ebe807b9d 508 sprintf(buffer1,"*****MENU*****");
el15pjt 8:fe6ebe807b9d 509 sprintf(buffer2,"RANGE");
el15pjt 8:fe6ebe807b9d 510 sprintf(buffer3,"PARAMETERS");
el15pjt 8:fe6ebe807b9d 511 sprintf(buffer4,"%iCm to %iCm",r4,r5);
el15pjt 8:fe6ebe807b9d 512 lcd.printString(buffer1,0,0);
el15pjt 8:fe6ebe807b9d 513 lcd.printString(buffer2,0,1);
el15pjt 8:fe6ebe807b9d 514 lcd.printString(buffer3,0,2);
el15pjt 8:fe6ebe807b9d 515 lcd.printString(buffer4,0,3);
el15pjt 8:fe6ebe807b9d 516 break;
el15pjt 8:fe6ebe807b9d 517 case 4:
el15pjt 7:14cfb0df30e6 518
el15pjt 8:fe6ebe807b9d 519 if (g_sw2_flag) {
el15pjt 8:fe6ebe807b9d 520 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 8:fe6ebe807b9d 521 if (r6 == r7) {
el15pjt 8:fe6ebe807b9d 522 r6 = r5;
el15pjt 8:fe6ebe807b9d 523 } else {
el15pjt 8:fe6ebe807b9d 524 r6 += 1;
el15pjt 7:14cfb0df30e6 525 }
el15pjt 8:fe6ebe807b9d 526 }
el15pjt 7:14cfb0df30e6 527
el15pjt 8:fe6ebe807b9d 528 length2 = sprintf(buffer1,"*****MENU*****");
el15pjt 8:fe6ebe807b9d 529 length3 = sprintf(buffer2,"RANGE");
el15pjt 8:fe6ebe807b9d 530 length3 = sprintf(buffer3,"PARAMETERS");
el15pjt 8:fe6ebe807b9d 531 length3 = sprintf(buffer4,"%iCm to %iCm",r5,r6);
el15pjt 8:fe6ebe807b9d 532 lcd.printString(buffer1,0,0);
el15pjt 8:fe6ebe807b9d 533 lcd.printString(buffer2,0,1);
el15pjt 8:fe6ebe807b9d 534 lcd.printString(buffer3,0,2);
el15pjt 8:fe6ebe807b9d 535 lcd.printString(buffer4,0,3);
el15pjt 8:fe6ebe807b9d 536 break;
el15pjt 8:fe6ebe807b9d 537 case 5:
el15pjt 7:14cfb0df30e6 538
el15pjt 8:fe6ebe807b9d 539 if (g_sw2_flag) {
el15pjt 8:fe6ebe807b9d 540 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 8:fe6ebe807b9d 541 if (r7 == 300) {
el15pjt 8:fe6ebe807b9d 542 r7 = r6;
el15pjt 8:fe6ebe807b9d 543 } else {
el15pjt 8:fe6ebe807b9d 544 r7 += 1;
el15pjt 7:14cfb0df30e6 545 }
el15pjt 8:fe6ebe807b9d 546 }
el15pjt 7:14cfb0df30e6 547
el15pjt 8:fe6ebe807b9d 548 length2 = sprintf(buffer1,"*****MENU*****");
el15pjt 8:fe6ebe807b9d 549 length3 = sprintf(buffer2,"RANGE");
el15pjt 8:fe6ebe807b9d 550 length3 = sprintf(buffer3,"PARAMETERS");
el15pjt 8:fe6ebe807b9d 551 length3 = sprintf(buffer4,"%iCm to %iCm",r6,r7);
el15pjt 8:fe6ebe807b9d 552 lcd.printString(buffer1,0,0);
el15pjt 8:fe6ebe807b9d 553 lcd.printString(buffer2,0,1);
el15pjt 8:fe6ebe807b9d 554 lcd.printString(buffer3,0,2);
el15pjt 8:fe6ebe807b9d 555 lcd.printString(buffer4,0,3);
el15pjt 8:fe6ebe807b9d 556 break;
el15pjt 7:14cfb0df30e6 557
el15pjt 8:fe6ebe807b9d 558 default:
el15pjt 8:fe6ebe807b9d 559 lcd.clear();
el15pjt 8:fe6ebe807b9d 560 // save();
el15pjt 8:fe6ebe807b9d 561 return;
el15pjt 7:14cfb0df30e6 562 }
el15pjt 8:fe6ebe807b9d 563 }
el15pjt 8:fe6ebe807b9d 564 }
el15pjt 8:fe6ebe807b9d 565 @endcode
el15pjt 8:fe6ebe807b9d 566 */
el15pjt 8:fe6ebe807b9d 567 void submenu();
el15pjt 8:fe6ebe807b9d 568 void save();
el15pjt 8:fe6ebe807b9d 569 void load();
el15pjt 8:fe6ebe807b9d 570 void GetDistance();
el15pjt 7:14cfb0df30e6 571
el15pjt 7:14cfb0df30e6 572 #endif