ELEC2645 (2015/16) / Mbed 2 deprecated EL15PJT_Ranger

Dependencies:   N5110 SDFileSystem SRF02 TMP102 mbed

Fork of Ranger by Philip Thompson

Committer:
el15pjt
Date:
Wed May 04 22:16:06 2016 +0000
Revision:
10:c9f3c22368f1
Parent:
9:bc259fc22fa2
Child:
11:b64d123b9f4f
LEDs control revise and buzzer revised.

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