A safe using the mbed, dc motor, solenoid, and more!
Dependencies: 4DGL-uLCD-SE DebounceIn Motordriver PinDetect SDFileSystem mbed-rtos mbed
main.cpp@0:6b5c0ae5acc6, 2016-04-29 (annotated)
- Committer:
- adamlawrence
- Date:
- Fri Apr 29 20:01:29 2016 +0000
- Revision:
- 0:6b5c0ae5acc6
initial commit;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |