A safe using the mbed, dc motor, solenoid, and more!

Dependencies:   4DGL-uLCD-SE DebounceIn Motordriver PinDetect SDFileSystem mbed-rtos mbed

Committer:
adamlawrence
Date:
Fri Apr 29 20:01:29 2016 +0000
Revision:
0:6b5c0ae5acc6
initial commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adamlawrence 0:6b5c0ae5acc6 1 #include "mbed.h"
adamlawrence 0:6b5c0ae5acc6 2 #include <cmath>
adamlawrence 0:6b5c0ae5acc6 3 #include "solenoid.h"
adamlawrence 0:6b5c0ae5acc6 4 #include "rtos.h"
adamlawrence 0:6b5c0ae5acc6 5 #include "uLCD_4DGL.h"
adamlawrence 0:6b5c0ae5acc6 6 #include "TMP36.h"
adamlawrence 0:6b5c0ae5acc6 7 #include "motordriver.h"
adamlawrence 0:6b5c0ae5acc6 8 #include "PinDetect.h"
adamlawrence 0:6b5c0ae5acc6 9 #include "mpr121.h" //touchpad
adamlawrence 0:6b5c0ae5acc6 10 #include "DebounceIn.h"
adamlawrence 0:6b5c0ae5acc6 11 #include "Speaker.h" //used for playing tones
adamlawrence 0:6b5c0ae5acc6 12 Speaker mySpeaker(p18);
adamlawrence 0:6b5c0ae5acc6 13 Serial blue(p13,p14); //blue tooth device
adamlawrence 0:6b5c0ae5acc6 14 TMP36 myTMP36(p15); //Analog in
adamlawrence 0:6b5c0ae5acc6 15 Mutex mut; //standard io mutex lock
adamlawrence 0:6b5c0ae5acc6 16 DigitalOut led1(LED1);
adamlawrence 0:6b5c0ae5acc6 17 DigitalOut led2(LED2);
adamlawrence 0:6b5c0ae5acc6 18 DigitalOut led3(LED3);
adamlawrence 0:6b5c0ae5acc6 19 DigitalOut led4(LED4);
adamlawrence 0:6b5c0ae5acc6 20 AnalogIn ir(p19); //Sharp IR sensor
adamlawrence 0:6b5c0ae5acc6 21 uLCD_4DGL uLCD(p28,p27,p30); //create a global lcd object
adamlawrence 0:6b5c0ae5acc6 22 I2C i2c(p9, p10);
adamlawrence 0:6b5c0ae5acc6 23 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
adamlawrence 0:6b5c0ae5acc6 24 InterruptIn interrupt(p25);
adamlawrence 0:6b5c0ae5acc6 25 PinDetect pb1(p21);//push button 1
adamlawrence 0:6b5c0ae5acc6 26 PinDetect pb2(p22);//push button 2
adamlawrence 0:6b5c0ae5acc6 27 PinDetect pb3(p23);//push button 3
adamlawrence 0:6b5c0ae5acc6 28 PinDetect pb4(p24);//push button 4
adamlawrence 0:6b5c0ae5acc6 29 Motor left(p26, p16, p17, 1); // pwm, fwd, rev, has brake feature
adamlawrence 0:6b5c0ae5acc6 30 Solenoid mySolenoid(p8);
adamlawrence 0:6b5c0ae5acc6 31 char bnum=0;
adamlawrence 0:6b5c0ae5acc6 32 char bhit=0;
adamlawrence 0:6b5c0ae5acc6 33 float tempC = 0.0;
adamlawrence 0:6b5c0ae5acc6 34 bool shadeDown = true; //true shade is down, false shade is up
adamlawrence 0:6b5c0ae5acc6 35 bool tempMode = false; //false is celcius, true is fahrenheit
adamlawrence 0:6b5c0ae5acc6 36 int combo[5];
adamlawrence 0:6b5c0ae5acc6 37 bool setUp = false; //boolean for initial setup of safe (will be set to true after passcode is entered)
adamlawrence 0:6b5c0ae5acc6 38 bool locked = true; //boolean if safe is locked or not.
adamlawrence 0:6b5c0ae5acc6 39 int passCode[5];
adamlawrence 0:6b5c0ae5acc6 40 int j = 0;
adamlawrence 0:6b5c0ae5acc6 41 int passVal = 0; //keeps track of correct input values
adamlawrence 0:6b5c0ae5acc6 42 bool passed = true; //this boolean will be used to unlock the safe
adamlawrence 0:6b5c0ae5acc6 43 bool pb1push = false; //pushbutton 1 was pushed boolean
adamlawrence 0:6b5c0ae5acc6 44 bool pb2push = false;
adamlawrence 0:6b5c0ae5acc6 45 bool pb3push = false;
adamlawrence 0:6b5c0ae5acc6 46 bool pb4push = false;
adamlawrence 0:6b5c0ae5acc6 47 int failVal = 0; //counts failed attempts
adamlawrence 0:6b5c0ae5acc6 48 int key_code = -17; //set this to a negative number that won't ever be in Simon's array and also isn't a possible value for drawing
adamlawrence 0:6b5c0ae5acc6 49 void fallInterrupt() {
adamlawrence 0:6b5c0ae5acc6 50 int i=0;
adamlawrence 0:6b5c0ae5acc6 51 int value=mpr121.read(0x00);
adamlawrence 0:6b5c0ae5acc6 52 value +=mpr121.read(0x01)<<8;
adamlawrence 0:6b5c0ae5acc6 53 // LED demo mod
adamlawrence 0:6b5c0ae5acc6 54 i=0;
adamlawrence 0:6b5c0ae5acc6 55 // puts key number out to LEDs for demo
adamlawrence 0:6b5c0ae5acc6 56 for (i=0; i<12; i++) {
adamlawrence 0:6b5c0ae5acc6 57 if (((value>>i)&0x01)==1) key_code=i;
adamlawrence 0:6b5c0ae5acc6 58 }
adamlawrence 0:6b5c0ae5acc6 59
adamlawrence 0:6b5c0ae5acc6 60 }
adamlawrence 0:6b5c0ae5acc6 61 void unlocker() {
adamlawrence 0:6b5c0ae5acc6 62 mySolenoid =1;
adamlawrence 0:6b5c0ae5acc6 63
adamlawrence 0:6b5c0ae5acc6 64 wait(2);
adamlawrence 0:6b5c0ae5acc6 65 mySolenoid = 0;
adamlawrence 0:6b5c0ae5acc6 66 }
adamlawrence 0:6b5c0ae5acc6 67 void lockInterrupt() {
adamlawrence 0:6b5c0ae5acc6 68 //button 1
adamlawrence 0:6b5c0ae5acc6 69 pb1push = true;
adamlawrence 0:6b5c0ae5acc6 70 led1 = 1;
adamlawrence 0:6b5c0ae5acc6 71 wait(0.5);
adamlawrence 0:6b5c0ae5acc6 72 led1 = 0;
adamlawrence 0:6b5c0ae5acc6 73 mySpeaker.PlayNote(400, 0.5, 1.0);
adamlawrence 0:6b5c0ae5acc6 74 }
adamlawrence 0:6b5c0ae5acc6 75 void shadeInterrupt() {
adamlawrence 0:6b5c0ae5acc6 76 //button 2
adamlawrence 0:6b5c0ae5acc6 77 pb2push = true;
adamlawrence 0:6b5c0ae5acc6 78 led2 = 1;
adamlawrence 0:6b5c0ae5acc6 79 wait(0.5);
adamlawrence 0:6b5c0ae5acc6 80 led2 = 0;
adamlawrence 0:6b5c0ae5acc6 81 mySpeaker.PlayNote(800, 0.5, 1.0);
adamlawrence 0:6b5c0ae5acc6 82 }
adamlawrence 0:6b5c0ae5acc6 83 void settingsInterrupt() {
adamlawrence 0:6b5c0ae5acc6 84 //button 3
adamlawrence 0:6b5c0ae5acc6 85 //will be able to change passcode.
adamlawrence 0:6b5c0ae5acc6 86 //change temp display
adamlawrence 0:6b5c0ae5acc6 87 //change display shade.
adamlawrence 0:6b5c0ae5acc6 88 pb3push = true;
adamlawrence 0:6b5c0ae5acc6 89 led3 = 1;
adamlawrence 0:6b5c0ae5acc6 90 wait(0.5);
adamlawrence 0:6b5c0ae5acc6 91 led3 = 0;
adamlawrence 0:6b5c0ae5acc6 92 mySpeaker.PlayNote(1200, 0.5, 1.0);
adamlawrence 0:6b5c0ae5acc6 93 }
adamlawrence 0:6b5c0ae5acc6 94
adamlawrence 0:6b5c0ae5acc6 95 void exitInterrupt() {
adamlawrence 0:6b5c0ae5acc6 96 //button 4
adamlawrence 0:6b5c0ae5acc6 97 pb4push = true;
adamlawrence 0:6b5c0ae5acc6 98 led4 = 1;
adamlawrence 0:6b5c0ae5acc6 99 wait(0.5);
adamlawrence 0:6b5c0ae5acc6 100 led4 = 0;
adamlawrence 0:6b5c0ae5acc6 101 mySpeaker.PlayNote(1600, 0.5, 1.0);
adamlawrence 0:6b5c0ae5acc6 102 }
adamlawrence 0:6b5c0ae5acc6 103 void setPassword() {
adamlawrence 0:6b5c0ae5acc6 104 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 105 uLCD.color(WHITE);
adamlawrence 0:6b5c0ae5acc6 106 uLCD.printf("Please put in your \n 5 digit passcode now \n \n \n \n");
adamlawrence 0:6b5c0ae5acc6 107 wait(0.5);
adamlawrence 0:6b5c0ae5acc6 108 int i = 0;
adamlawrence 0:6b5c0ae5acc6 109 while(i < 5 && !pb4push) {
adamlawrence 0:6b5c0ae5acc6 110 if (key_code >= 0) {
adamlawrence 0:6b5c0ae5acc6 111 combo[i] = key_code;
adamlawrence 0:6b5c0ae5acc6 112 uLCD.text_height(4);
adamlawrence 0:6b5c0ae5acc6 113 uLCD.text_width(2);
adamlawrence 0:6b5c0ae5acc6 114 uLCD.printf("%d ",combo[i]);
adamlawrence 0:6b5c0ae5acc6 115 i++;
adamlawrence 0:6b5c0ae5acc6 116 key_code = -4;
adamlawrence 0:6b5c0ae5acc6 117 }
adamlawrence 0:6b5c0ae5acc6 118 }
adamlawrence 0:6b5c0ae5acc6 119 wait(0.5);
adamlawrence 0:6b5c0ae5acc6 120 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 121 uLCD.printf("Passcode saved. \nLock engaged. \n");
adamlawrence 0:6b5c0ae5acc6 122 wait(1);
adamlawrence 0:6b5c0ae5acc6 123 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 124 }
adamlawrence 0:6b5c0ae5acc6 125 void shadeMove() {
adamlawrence 0:6b5c0ae5acc6 126 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 127 if(shadeDown) {
adamlawrence 0:6b5c0ae5acc6 128
adamlawrence 0:6b5c0ae5acc6 129 shadeDown = false;
adamlawrence 0:6b5c0ae5acc6 130 //turn motor backward.
adamlawrence 0:6b5c0ae5acc6 131 for (int i = 0; i < 6 ; i ++) {
adamlawrence 0:6b5c0ae5acc6 132 led1=!led1;
adamlawrence 0:6b5c0ae5acc6 133 left.speed(.5);
adamlawrence 0:6b5c0ae5acc6 134 wait(0.2);
adamlawrence 0:6b5c0ae5acc6 135 }
adamlawrence 0:6b5c0ae5acc6 136 left.speed(0);
adamlawrence 0:6b5c0ae5acc6 137 uLCD.printf("Removing shade.");
adamlawrence 0:6b5c0ae5acc6 138 wait(2); //might need to be longer dependent on actual mplementation speed
adamlawrence 0:6b5c0ae5acc6 139 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 140 } else {
adamlawrence 0:6b5c0ae5acc6 141 shadeDown = true;
adamlawrence 0:6b5c0ae5acc6 142 for (int i = 0; i < 6 ; i ++) {
adamlawrence 0:6b5c0ae5acc6 143 led1=!led1;
adamlawrence 0:6b5c0ae5acc6 144 left.speed(-.5);
adamlawrence 0:6b5c0ae5acc6 145 wait(0.2);
adamlawrence 0:6b5c0ae5acc6 146 }
adamlawrence 0:6b5c0ae5acc6 147 left.speed(0);
adamlawrence 0:6b5c0ae5acc6 148 //turn motor forward
adamlawrence 0:6b5c0ae5acc6 149 uLCD.printf("Placing shade.");
adamlawrence 0:6b5c0ae5acc6 150 wait(2); //might need to be longer dependent on actual mplementation speed
adamlawrence 0:6b5c0ae5acc6 151 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 152 }
adamlawrence 0:6b5c0ae5acc6 153 }
adamlawrence 0:6b5c0ae5acc6 154 void bluetoothOn() {
adamlawrence 0:6b5c0ae5acc6 155 while (!pb4push) {
adamlawrence 0:6b5c0ae5acc6 156 if (blue.getc()=='!') {
adamlawrence 0:6b5c0ae5acc6 157 uLCD.locate(0,0);
adamlawrence 0:6b5c0ae5acc6 158 uLCD.printf("In Bluetooth Mode.");
adamlawrence 0:6b5c0ae5acc6 159 if (blue.getc()=='B') { //button data packet
adamlawrence 0:6b5c0ae5acc6 160 bnum = blue.getc(); //button number
adamlawrence 0:6b5c0ae5acc6 161 bhit = blue.getc(); //1=hit, 0=release
adamlawrence 0:6b5c0ae5acc6 162 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
adamlawrence 0:6b5c0ae5acc6 163 // myled = bnum - '0'; //current button number will appear on LEDs
adamlawrence 0:6b5c0ae5acc6 164 switch (bnum) {
adamlawrence 0:6b5c0ae5acc6 165 case '1': //number button 1
adamlawrence 0:6b5c0ae5acc6 166 if (bhit=='1') {
adamlawrence 0:6b5c0ae5acc6 167 unlocker();
adamlawrence 0:6b5c0ae5acc6 168 //add hit code here
adamlawrence 0:6b5c0ae5acc6 169 //open safe (or close safe) dependent on state
adamlawrence 0:6b5c0ae5acc6 170 } else {
adamlawrence 0:6b5c0ae5acc6 171 //add release code here
adamlawrence 0:6b5c0ae5acc6 172 }
adamlawrence 0:6b5c0ae5acc6 173 break;
adamlawrence 0:6b5c0ae5acc6 174 case '2': //number button 2
adamlawrence 0:6b5c0ae5acc6 175 if (bhit=='1') {
adamlawrence 0:6b5c0ae5acc6 176 //add hit code here
adamlawrence 0:6b5c0ae5acc6 177 //move shade
adamlawrence 0:6b5c0ae5acc6 178 shadeMove();
adamlawrence 0:6b5c0ae5acc6 179 } else {
adamlawrence 0:6b5c0ae5acc6 180
adamlawrence 0:6b5c0ae5acc6 181 //add release code here
adamlawrence 0:6b5c0ae5acc6 182 }
adamlawrence 0:6b5c0ae5acc6 183 break;
adamlawrence 0:6b5c0ae5acc6 184 case '3': //number button 3
adamlawrence 0:6b5c0ae5acc6 185 if (bhit=='1') {
adamlawrence 0:6b5c0ae5acc6 186 tempMode = !tempMode;
adamlawrence 0:6b5c0ae5acc6 187 } else {
adamlawrence 0:6b5c0ae5acc6 188 //add release code here
adamlawrence 0:6b5c0ae5acc6 189 }
adamlawrence 0:6b5c0ae5acc6 190 break;
adamlawrence 0:6b5c0ae5acc6 191 case '4': //number button 4
adamlawrence 0:6b5c0ae5acc6 192 if (bhit=='1') {
adamlawrence 0:6b5c0ae5acc6 193 //add hit code here
adamlawrence 0:6b5c0ae5acc6 194 pb4push = true;
adamlawrence 0:6b5c0ae5acc6 195 } else {
adamlawrence 0:6b5c0ae5acc6 196 //add release code here
adamlawrence 0:6b5c0ae5acc6 197 }
adamlawrence 0:6b5c0ae5acc6 198 break;
adamlawrence 0:6b5c0ae5acc6 199
adamlawrence 0:6b5c0ae5acc6 200 }
adamlawrence 0:6b5c0ae5acc6 201 }
adamlawrence 0:6b5c0ae5acc6 202 }
adamlawrence 0:6b5c0ae5acc6 203 }
adamlawrence 0:6b5c0ae5acc6 204 }
adamlawrence 0:6b5c0ae5acc6 205 }
adamlawrence 0:6b5c0ae5acc6 206 int main() {
adamlawrence 0:6b5c0ae5acc6 207 set_time(46800); // Set RTC time to Wed, 28 Oct 2009 11:35:37 let's change this to wahtever the presentation day is.
adamlawrence 0:6b5c0ae5acc6 208 //clock stuff goes here
adamlawrence 0:6b5c0ae5acc6 209
adamlawrence 0:6b5c0ae5acc6 210 pb1.mode(PullUp); //the safe unlock/lock method initiator
adamlawrence 0:6b5c0ae5acc6 211 pb2.mode(PullUp); //the shade button
adamlawrence 0:6b5c0ae5acc6 212 pb3.mode(PullUp); //temperature button
adamlawrence 0:6b5c0ae5acc6 213 pb4.mode(PullUp); //exit routine button
adamlawrence 0:6b5c0ae5acc6 214 wait(.01);
adamlawrence 0:6b5c0ae5acc6 215 // Setup Interrupt callback functions for a pb hit
adamlawrence 0:6b5c0ae5acc6 216 pb1.attach_deasserted(&lockInterrupt);
adamlawrence 0:6b5c0ae5acc6 217 pb2.attach_deasserted(&shadeInterrupt);
adamlawrence 0:6b5c0ae5acc6 218 pb3.attach_deasserted(&settingsInterrupt);
adamlawrence 0:6b5c0ae5acc6 219 pb4.attach_deasserted(&exitInterrupt);
adamlawrence 0:6b5c0ae5acc6 220 pb1.setSampleFrequency();
adamlawrence 0:6b5c0ae5acc6 221 pb2.setSampleFrequency();
adamlawrence 0:6b5c0ae5acc6 222 pb3.setSampleFrequency();
adamlawrence 0:6b5c0ae5acc6 223 pb4.setSampleFrequency();
adamlawrence 0:6b5c0ae5acc6 224 interrupt.fall(&fallInterrupt); //setting up the touch pad for use by assigning a method for the falling side of the touchpad interrupt
adamlawrence 0:6b5c0ae5acc6 225 interrupt.mode(PullUp); //put the interrupt mode to pull up, so that interrupts will trigger when the touchpad is hit
adamlawrence 0:6b5c0ae5acc6 226 while(1) {
adamlawrence 0:6b5c0ae5acc6 227 time_t seconds = time(NULL);
adamlawrence 0:6b5c0ae5acc6 228 //if ir.read is greater than .5 beep(?)
adamlawrence 0:6b5c0ae5acc6 229 tempC = myTMP36.read();
adamlawrence 0:6b5c0ae5acc6 230 if (!setUp) {
adamlawrence 0:6b5c0ae5acc6 231 mut.lock();
adamlawrence 0:6b5c0ae5acc6 232 uLCD.color(WHITE);
adamlawrence 0:6b5c0ae5acc6 233 uLCD.printf("Welcome to \nSMART Safe.");
adamlawrence 0:6b5c0ae5acc6 234
adamlawrence 0:6b5c0ae5acc6 235 wait(1.0);
adamlawrence 0:6b5c0ae5acc6 236 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 237 setPassword();
adamlawrence 0:6b5c0ae5acc6 238 mut.unlock();
adamlawrence 0:6b5c0ae5acc6 239 setUp = true;
adamlawrence 0:6b5c0ae5acc6 240 //put in clock
adamlawrence 0:6b5c0ae5acc6 241 //put in temp
adamlawrence 0:6b5c0ae5acc6 242 } else if (pb1push) {
adamlawrence 0:6b5c0ae5acc6 243 pb1push = false;
adamlawrence 0:6b5c0ae5acc6 244 pb4push = false;
adamlawrence 0:6b5c0ae5acc6 245 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 246 uLCD.printf("Enter your pass code now.\n");
adamlawrence 0:6b5c0ae5acc6 247 while (passVal < 5 && failVal < 5 && !pb4push) {
adamlawrence 0:6b5c0ae5acc6 248 if(key_code >= 0) {
adamlawrence 0:6b5c0ae5acc6 249 uLCD.text_height(4);
adamlawrence 0:6b5c0ae5acc6 250 uLCD.printf("%d ",key_code);
adamlawrence 0:6b5c0ae5acc6 251 if (key_code == combo[j]) {
adamlawrence 0:6b5c0ae5acc6 252 passVal++;
adamlawrence 0:6b5c0ae5acc6 253 passed = true;
adamlawrence 0:6b5c0ae5acc6 254 } else {
adamlawrence 0:6b5c0ae5acc6 255 passed = false;
adamlawrence 0:6b5c0ae5acc6 256 j = 0;
adamlawrence 0:6b5c0ae5acc6 257 failVal++;
adamlawrence 0:6b5c0ae5acc6 258 }
adamlawrence 0:6b5c0ae5acc6 259 key_code = -1;
adamlawrence 0:6b5c0ae5acc6 260 }
adamlawrence 0:6b5c0ae5acc6 261 if (passVal == 5 && passed && failVal < 5) {
adamlawrence 0:6b5c0ae5acc6 262 passed = true;
adamlawrence 0:6b5c0ae5acc6 263 pb1push = false;
adamlawrence 0:6b5c0ae5acc6 264 j = 0;
adamlawrence 0:6b5c0ae5acc6 265 failVal = 0;
adamlawrence 0:6b5c0ae5acc6 266 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 267 uLCD.printf("Safe unlocked.");
adamlawrence 0:6b5c0ae5acc6 268 locked = false;
adamlawrence 0:6b5c0ae5acc6 269 unlocker();
adamlawrence 0:6b5c0ae5acc6 270 locked = true;
adamlawrence 0:6b5c0ae5acc6 271 break;
adamlawrence 0:6b5c0ae5acc6 272 }
adamlawrence 0:6b5c0ae5acc6 273 if (failVal == 5) {
adamlawrence 0:6b5c0ae5acc6 274 uLCD.printf("You have put in \n the wrong password \n five times. \n You are locked out.");
adamlawrence 0:6b5c0ae5acc6 275 }
adamlawrence 0:6b5c0ae5acc6 276 }
adamlawrence 0:6b5c0ae5acc6 277 if(pb4push){
adamlawrence 0:6b5c0ae5acc6 278 pb4push = false;
adamlawrence 0:6b5c0ae5acc6 279 uLCD.printf("Unlocking \nsequence \naborted.");
adamlawrence 0:6b5c0ae5acc6 280 }
adamlawrence 0:6b5c0ae5acc6 281 passVal = 0;
adamlawrence 0:6b5c0ae5acc6 282 failVal = 0;
adamlawrence 0:6b5c0ae5acc6 283 wait(1);
adamlawrence 0:6b5c0ae5acc6 284 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 285 } else if (pb2push) {
adamlawrence 0:6b5c0ae5acc6 286 pb2push = false;
adamlawrence 0:6b5c0ae5acc6 287
adamlawrence 0:6b5c0ae5acc6 288 shadeMove();
adamlawrence 0:6b5c0ae5acc6 289
adamlawrence 0:6b5c0ae5acc6 290 } else if(pb3push){
adamlawrence 0:6b5c0ae5acc6 291 pb3push = false;
adamlawrence 0:6b5c0ae5acc6 292 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 293 while (!pb4push) {
adamlawrence 0:6b5c0ae5acc6 294 uLCD.locate(0,0);
adamlawrence 0:6b5c0ae5acc6 295 uLCD.printf("Change Temperature Format (1)\n");
adamlawrence 0:6b5c0ae5acc6 296 uLCD.printf("Change Passcode (2) \n");
adamlawrence 0:6b5c0ae5acc6 297 uLCD.printf("Enter BLUETOOTH \n mode (3)\n");
adamlawrence 0:6b5c0ae5acc6 298 uLCD.printf("Exit menu (4)");
adamlawrence 0:6b5c0ae5acc6 299 wait(1);
adamlawrence 0:6b5c0ae5acc6 300 if (pb1push) {
adamlawrence 0:6b5c0ae5acc6 301 pb1push = false;
adamlawrence 0:6b5c0ae5acc6 302 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 303 uLCD.printf("Fahrenheit (1)\n");
adamlawrence 0:6b5c0ae5acc6 304 uLCD.printf("Celcius (2)");
adamlawrence 0:6b5c0ae5acc6 305 wait(1);
adamlawrence 0:6b5c0ae5acc6 306 bool action = false;
adamlawrence 0:6b5c0ae5acc6 307 while (!pb4push && !action) {
adamlawrence 0:6b5c0ae5acc6 308 if (pb1push) {
adamlawrence 0:6b5c0ae5acc6 309 action = true;
adamlawrence 0:6b5c0ae5acc6 310 pb1push = false;
adamlawrence 0:6b5c0ae5acc6 311 tempMode = true;//thermometer change to F
adamlawrence 0:6b5c0ae5acc6 312 break;
adamlawrence 0:6b5c0ae5acc6 313 } else if (pb2push) {
adamlawrence 0:6b5c0ae5acc6 314 action = true;
adamlawrence 0:6b5c0ae5acc6 315 pb2push = false;
adamlawrence 0:6b5c0ae5acc6 316 tempMode = false;//themometer change to C
adamlawrence 0:6b5c0ae5acc6 317 break;
adamlawrence 0:6b5c0ae5acc6 318 }
adamlawrence 0:6b5c0ae5acc6 319 led1 = !led1;
adamlawrence 0:6b5c0ae5acc6 320 wait(.5);
adamlawrence 0:6b5c0ae5acc6 321 }
adamlawrence 0:6b5c0ae5acc6 322 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 323 } else if (pb2push) { //this is going to change the time of day.
adamlawrence 0:6b5c0ae5acc6 324 pb2push = false;
adamlawrence 0:6b5c0ae5acc6 325 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 326 setPassword();
adamlawrence 0:6b5c0ae5acc6 327 } else if (pb3push) {
adamlawrence 0:6b5c0ae5acc6 328 pb3push = false;
adamlawrence 0:6b5c0ae5acc6 329 bluetoothOn();
adamlawrence 0:6b5c0ae5acc6 330
adamlawrence 0:6b5c0ae5acc6 331 }
adamlawrence 0:6b5c0ae5acc6 332 }
adamlawrence 0:6b5c0ae5acc6 333 uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 334 led1 =1;
adamlawrence 0:6b5c0ae5acc6 335 led2 =1;
adamlawrence 0:6b5c0ae5acc6 336 pb4push = false;
adamlawrence 0:6b5c0ae5acc6 337 } else {
adamlawrence 0:6b5c0ae5acc6 338 float temp = myTMP36.read();
adamlawrence 0:6b5c0ae5acc6 339 if (tempMode) {
adamlawrence 0:6b5c0ae5acc6 340 temp = (temp * 1.8) + 32;
adamlawrence 0:6b5c0ae5acc6 341 }
adamlawrence 0:6b5c0ae5acc6 342 if (locked) {
adamlawrence 0:6b5c0ae5acc6 343 uLCD.text_height(4);
adamlawrence 0:6b5c0ae5acc6 344 uLCD.color(RED);
adamlawrence 0:6b5c0ae5acc6 345 uLCD.locate(4,0);
adamlawrence 0:6b5c0ae5acc6 346 uLCD.printf("Locked");
adamlawrence 0:6b5c0ae5acc6 347 uLCD.color(WHITE);
adamlawrence 0:6b5c0ae5acc6 348 uLCD.text_height(3);
adamlawrence 0:6b5c0ae5acc6 349 uLCD.locate(1,2);
adamlawrence 0:6b5c0ae5acc6 350 char buffer[32];
adamlawrence 0:6b5c0ae5acc6 351 strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));
adamlawrence 0:6b5c0ae5acc6 352 uLCD.printf("Time %s",buffer);
adamlawrence 0:6b5c0ae5acc6 353 uLCD.locate(1,4);
adamlawrence 0:6b5c0ae5acc6 354 if (tempMode) {
adamlawrence 0:6b5c0ae5acc6 355 uLCD.printf("Temp %3.2f F",temp);
adamlawrence 0:6b5c0ae5acc6 356 } else {
adamlawrence 0:6b5c0ae5acc6 357 uLCD.printf("Temp %3.2f C",temp);
adamlawrence 0:6b5c0ae5acc6 358 }
adamlawrence 0:6b5c0ae5acc6 359 wait(2);
adamlawrence 0:6b5c0ae5acc6 360 //uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 361 } else {
adamlawrence 0:6b5c0ae5acc6 362 uLCD.text_height(4);
adamlawrence 0:6b5c0ae5acc6 363 uLCD.color(GREEN);
adamlawrence 0:6b5c0ae5acc6 364 uLCD.locate(4,0);
adamlawrence 0:6b5c0ae5acc6 365 uLCD.printf("Unlocked");
adamlawrence 0:6b5c0ae5acc6 366 uLCD.color(WHITE);
adamlawrence 0:6b5c0ae5acc6 367 uLCD.text_height(3);
adamlawrence 0:6b5c0ae5acc6 368 uLCD.locate(1,2);
adamlawrence 0:6b5c0ae5acc6 369 char buffer[32];
adamlawrence 0:6b5c0ae5acc6 370 strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));
adamlawrence 0:6b5c0ae5acc6 371 uLCD.printf("Time %s",buffer);
adamlawrence 0:6b5c0ae5acc6 372 uLCD.locate(1,4);
adamlawrence 0:6b5c0ae5acc6 373 if (tempMode) {
adamlawrence 0:6b5c0ae5acc6 374 uLCD.printf("Temp %3.2f F",temp);
adamlawrence 0:6b5c0ae5acc6 375 } else {
adamlawrence 0:6b5c0ae5acc6 376 uLCD.printf("Temp %3.2f C",temp);
adamlawrence 0:6b5c0ae5acc6 377 }
adamlawrence 0:6b5c0ae5acc6 378 wait(2);
adamlawrence 0:6b5c0ae5acc6 379 //uLCD.cls();
adamlawrence 0:6b5c0ae5acc6 380
adamlawrence 0:6b5c0ae5acc6 381 }
adamlawrence 0:6b5c0ae5acc6 382
adamlawrence 0:6b5c0ae5acc6 383 }
adamlawrence 0:6b5c0ae5acc6 384
adamlawrence 0:6b5c0ae5acc6 385 }
adamlawrence 0:6b5c0ae5acc6 386 }