A simple digital lock with attempted audio guidance

Dependencies:   FATFileSystem TextLCD mbed

Fork of Digital_Lock_with_audio by NITH ece

Committer:
kit2
Date:
Fri May 17 17:17:24 2013 +0000
Revision:
5:d45608f231d3
Parent:
4:74d697416c75
Audio guidance not working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kit2 2:9bdba6204bb4 1 /* Digital Lock System
kit2 2:9bdba6204bb4 2 Components Used:
kit2 2:9bdba6204bb4 3 NGX Baseboord
kit2 2:9bdba6204bb4 4 MPR121 Capacitive touch panel as keypad( p26, p9, p10)// IRQ, SDA, SCL
kit2 2:9bdba6204bb4 5 LCD for display(p24, p25, p27, p28, p29, p30) // rs, e, d4-d7
kit2 2:9bdba6204bb4 6 Motor for opening/closing the lock(p11, p12) // for input in H Bridge
kit2 2:9bdba6204bb4 7 Baseboard SD Card for storing Forest.wav
kit2 2:9bdba6204bb4 8 Baseboard audio jack 3.5 mm
4180_1 0:e09703934ff4 9
kit2 2:9bdba6204bb4 10 By using touch panel as input we enter the desired password to open the lock.
kit2 2:9bdba6204bb4 11 Initially we store a password in array ORG[] which can be compared with the password(length= 7)entered by the user.
kit2 2:9bdba6204bb4 12
kit2 2:9bdba6204bb4 13 If the entered password is correct then motor opens the door.
kit2 2:9bdba6204bb4 14 In case of wrong password the user is asked to re-enter the password. 3 trials are given after which door is permanently
kit2 2:9bdba6204bb4 15 locked.
kit2 2:9bdba6204bb4 16 Option to change the password is also provided.
kit2 2:9bdba6204bb4 17 The process is guided by display of instruction on the LCD.
kit2 2:9bdba6204bb4 18
kit2 2:9bdba6204bb4 19
kit2 2:9bdba6204bb4 20 Under Progress:
kit2 2:9bdba6204bb4 21 An attempt is being made to guide the user by playing relavent audio files along with the instructions on LCD.
kit2 2:9bdba6204bb4 22 The "forest.wav" file is the one that we are attempting to play along with LCD instructions.
kit2 2:9bdba6204bb4 23 the bit rate of the wave file is 176kbps.
kit2 2:9bdba6204bb4 24 */
kit2 1:85eb1c94154a 25
4180_1 0:e09703934ff4 26
4180_1 0:e09703934ff4 27
kit2 1:85eb1c94154a 28 #include "mbed.h"
kit2 1:85eb1c94154a 29 #include "SDFileSystem.h"
4180_1 0:e09703934ff4 30 #include <string>
4180_1 0:e09703934ff4 31 #include <list>
kit2 1:85eb1c94154a 32 #include <mpr121.h>
kit2 1:85eb1c94154a 33 #include "TextLCD.h"
kit2 1:85eb1c94154a 34 #include <stdio.h>
kit2 1:85eb1c94154a 35 #include <stdlib.h>
kit2 1:85eb1c94154a 36 #include <sstream>
kit2 1:85eb1c94154a 37 #include <iostream>
4180_1 0:e09703934ff4 38
kit2 1:85eb1c94154a 39
kit2 1:85eb1c94154a 40 //------------------------------------------------------------------initialize lcd
4180_1 0:e09703934ff4 41
kit2 1:85eb1c94154a 42 TextLCD lcd(p24, p25, p27, p28, p29, p30); // rs, e, d4-d7
kit2 1:85eb1c94154a 43 //--------------------------------------------------------------------
kit2 1:85eb1c94154a 44
kit2 1:85eb1c94154a 45 //------------------------------------------------------------------initial touch pannel
4180_1 0:e09703934ff4 46 DigitalOut led1(LED1);
4180_1 0:e09703934ff4 47 DigitalOut led2(LED2);
4180_1 0:e09703934ff4 48 DigitalOut led3(LED3);
4180_1 0:e09703934ff4 49 DigitalOut led4(LED4);
kit2 1:85eb1c94154a 50 DigitalOut servo(p12);
kit2 1:85eb1c94154a 51 int org[7] = {0,0,0,0,0,0,0};
kit2 1:85eb1c94154a 52 int Nums[7] = {0,0,0,0,0,0,0};
kit2 1:85eb1c94154a 53 int counter = 0;
kit2 1:85eb1c94154a 54 int count2 = 0;
kit2 2:9bdba6204bb4 55 int k=0;
kit2 5:d45608f231d3 56 DigitalOut servo1(p11);
kit2 5:d45608f231d3 57 DigitalOut servo2(p12);
kit2 1:85eb1c94154a 58 //------------------------------------------- Create the interrupt receiver object on pin 26
4180_1 0:e09703934ff4 59 InterruptIn interrupt(p26);
kit2 1:85eb1c94154a 60
4180_1 0:e09703934ff4 61
kit2 1:85eb1c94154a 62 //-------------------------------------------------------- Setup the i2c bus on pins 28 and 27
kit2 1:85eb1c94154a 63 I2C i2c(p9, p10);
kit2 1:85eb1c94154a 64
4180_1 0:e09703934ff4 65
kit2 1:85eb1c94154a 66 //------------------------------------------ constructor(i2c object, i2c address of the mpr121)
4180_1 0:e09703934ff4 67 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
4180_1 0:e09703934ff4 68
kit2 1:85eb1c94154a 69 //-------------------------------------------------------------------touch panel initialised
kit2 1:85eb1c94154a 70
kit2 1:85eb1c94154a 71
kit2 1:85eb1c94154a 72
kit2 1:85eb1c94154a 73 //---------------------------------------------------------------------------------------------playing audio
kit2 1:85eb1c94154a 74 AnalogOut DACout(p18);
kit2 5:d45608f231d3 75 //DigitalOut digout(LED4);
kit2 1:85eb1c94154a 76 Ticker tick;
kit2 1:85eb1c94154a 77 SDFileSystem sd(p5, p6, p7, p8, "sd"); // NGX mbed base board
kit2 1:85eb1c94154a 78
kit2 1:85eb1c94154a 79 #define SAMPLE_FREQ 40000
kit2 1:85eb1c94154a 80 #define BUF_SIZE (SAMPLE_FREQ/10)
kit2 1:85eb1c94154a 81 #define SLICE_BUF_SIZE 1
kit2 1:85eb1c94154a 82
kit2 1:85eb1c94154a 83 void dac_out(void);
kit2 1:85eb1c94154a 84 void play_wave(char *);
kit2 1:85eb1c94154a 85 void cleanup(char *);
kit2 1:85eb1c94154a 86 void fill_adc_buf(short *, unsigned);
kit2 1:85eb1c94154a 87 void swapword(unsigned *);
kit2 1:85eb1c94154a 88
kit2 1:85eb1c94154a 89 // a FIFO for the DAC
kit2 1:85eb1c94154a 90 short DAC_fifo[256];
kit2 1:85eb1c94154a 91 short DAC_wptr;
kit2 1:85eb1c94154a 92 short DAC_rptr;
kit2 1:85eb1c94154a 93 short DAC_on;
kit2 1:85eb1c94154a 94
kit2 1:85eb1c94154a 95 typedef struct uFMT_STRUCT {
kit2 1:85eb1c94154a 96 short comp_code;
kit2 1:85eb1c94154a 97 short num_channels;
kit2 1:85eb1c94154a 98 unsigned sample_rate;
kit2 1:85eb1c94154a 99 unsigned avg_Bps;
kit2 1:85eb1c94154a 100 short block_align;
kit2 1:85eb1c94154a 101 short sig_bps;
kit2 1:85eb1c94154a 102 } FMT_STRUCT;
kit2 4:74d697416c75 103
kit2 4:74d697416c75 104
kit2 4:74d697416c75 105
kit2 1:85eb1c94154a 106 void play_wave(char *wavname)
kit2 1:85eb1c94154a 107 {
kit2 1:85eb1c94154a 108 unsigned chunk_id,chunk_size,channel;
kit2 1:85eb1c94154a 109 // unsigned *data_wptr,data,samp_int,i;
kit2 1:85eb1c94154a 110 unsigned data,samp_int,i;
kit2 1:85eb1c94154a 111 short dac_data;
kit2 1:85eb1c94154a 112 char *slice_buf;
kit2 1:85eb1c94154a 113 short *data_sptr;
kit2 1:85eb1c94154a 114 // char *data_bptr;
kit2 1:85eb1c94154a 115 FMT_STRUCT wav_format;
kit2 1:85eb1c94154a 116 FILE *wavfile;
kit2 1:85eb1c94154a 117 long slice,num_slices;
kit2 1:85eb1c94154a 118 DAC_wptr=0;
kit2 1:85eb1c94154a 119 DAC_rptr=0;
kit2 1:85eb1c94154a 120 for (i=0;i<256;i+=2)
kit2 1:85eb1c94154a 121 {
kit2 1:85eb1c94154a 122 DAC_fifo[i]=0;
kit2 1:85eb1c94154a 123 DAC_fifo[i+1]=3000;
kit2 1:85eb1c94154a 124 }
kit2 1:85eb1c94154a 125 DAC_wptr=4;
kit2 1:85eb1c94154a 126 DAC_on=0;
kit2 1:85eb1c94154a 127
kit2 1:85eb1c94154a 128 led1=led2=led3=led4=0;
kit2 4:74d697416c75 129 lcd.cls();
kit2 4:74d697416c75 130 lcd.printf("Playing wave file '%s'\n",wavname);
kit2 1:85eb1c94154a 131
kit2 1:85eb1c94154a 132 wavfile=fopen(wavname,"rb");
kit2 1:85eb1c94154a 133 if (!wavfile) {
kit2 4:74d697416c75 134 lcd.cls();
kit2 1:85eb1c94154a 135 printf("Unable to open wav file '%s'\n",wavname);
kit2 1:85eb1c94154a 136 exit(1);
kit2 1:85eb1c94154a 137 }
kit2 1:85eb1c94154a 138
kit2 1:85eb1c94154a 139 fread(&chunk_id,4,1,wavfile);
kit2 1:85eb1c94154a 140 fread(&chunk_size,4,1,wavfile);
kit2 1:85eb1c94154a 141 while (!feof(wavfile)) {
kit2 4:74d697416c75 142
kit2 4:74d697416c75 143
kit2 4:74d697416c75 144 lcd.cls();
kit2 4:74d697416c75 145 lcd.printf("Read chunk ID 0x%x, size 0x%x\n",chunk_id,chunk_size);
kit2 1:85eb1c94154a 146 switch (chunk_id) {
kit2 1:85eb1c94154a 147 case 0x46464952:
kit2 1:85eb1c94154a 148 fread(&data,4,1,wavfile);
kit2 4:74d697416c75 149 lcd.cls();
kit2 4:74d697416c75 150 lcd.printf("RIFF chunk\n");
kit2 4:74d697416c75 151 wait(1);
kit2 4:74d697416c75 152 lcd.cls();
kit2 4:74d697416c75 153 lcd.printf(" chunk size %d (0x%x)\n",chunk_size,chunk_size);
kit2 4:74d697416c75 154 lcd.cls();
kit2 4:74d697416c75 155 lcd.printf(" RIFF type 0x%x\n",data);
kit2 1:85eb1c94154a 156 break;
kit2 1:85eb1c94154a 157 case 0x20746d66:
kit2 1:85eb1c94154a 158 fread(&wav_format,sizeof(wav_format),1,wavfile);
kit2 4:74d697416c75 159 lcd.cls();
kit2 4:74d697416c75 160 lcd.printf("FORMAT chunk\n");
kit2 4:74d697416c75 161 wait(1);
kit2 4:74d697416c75 162 lcd.cls();
kit2 4:74d697416c75 163 lcd.printf(" chunk size %d (0x%x)\n",chunk_size,chunk_size);
kit2 4:74d697416c75 164 wait(1);
kit2 4:74d697416c75 165 lcd.cls();
kit2 4:74d697416c75 166 lcd.printf(" compression code %d\n",wav_format.comp_code);
kit2 4:74d697416c75 167 wait(1);
kit2 4:74d697416c75 168 lcd.cls();
kit2 4:74d697416c75 169 lcd.printf(" %d channels\n",wav_format.num_channels);
kit2 4:74d697416c75 170 wait(1);
kit2 4:74d697416c75 171 lcd.cls();
kit2 4:74d697416c75 172 lcd.printf(" %d samples/sec\n",wav_format.sample_rate);
kit2 4:74d697416c75 173 wait(1);
kit2 4:74d697416c75 174 lcd.cls();
kit2 4:74d697416c75 175 lcd.printf(" %d bytes/sec\n",wav_format.avg_Bps);
kit2 4:74d697416c75 176 wait(1);
kit2 4:74d697416c75 177 lcd.cls();
kit2 4:74d697416c75 178 lcd.printf(" block align %d\n",wav_format.block_align);
kit2 4:74d697416c75 179 wait(1);
kit2 4:74d697416c75 180 lcd.cls();
kit2 4:74d697416c75 181 lcd.printf(" %d bits per sample\n",wav_format.sig_bps);
kit2 1:85eb1c94154a 182 if (chunk_size > sizeof(wav_format))
kit2 1:85eb1c94154a 183 fseek(wavfile,chunk_size-sizeof(wav_format),SEEK_CUR);
kit2 1:85eb1c94154a 184 // create a slice buffer large enough to hold multiple slices
kit2 1:85eb1c94154a 185 slice_buf=(char *)malloc(wav_format.block_align*SLICE_BUF_SIZE);
kit2 1:85eb1c94154a 186 if (!slice_buf) {
kit2 4:74d697416c75 187 lcd.cls();
kit2 4:74d697416c75 188 lcd.printf("Unable to malloc slice buffer");
kit2 1:85eb1c94154a 189 exit(1);
kit2 1:85eb1c94154a 190 }
kit2 1:85eb1c94154a 191 break;
kit2 1:85eb1c94154a 192 case 0x61746164:
kit2 1:85eb1c94154a 193 slice_buf=(char *)malloc(wav_format.block_align*SLICE_BUF_SIZE);
kit2 1:85eb1c94154a 194 if (!slice_buf) {
kit2 4:74d697416c75 195 lcd.cls();
kit2 4:74d697416c75 196 lcd.printf("Unable to malloc slice buffer");
kit2 1:85eb1c94154a 197 exit(1);
kit2 1:85eb1c94154a 198 } num_slices=chunk_size/wav_format.block_align;
kit2 4:74d697416c75 199 lcd.cls();
kit2 4:74d697416c75 200 lcd.printf("DATA chunk\n");
kit2 4:74d697416c75 201 lcd.cls();
kit2 4:74d697416c75 202 lcd.printf(" chunk size %d (0x%x)\n",chunk_size,chunk_size);
kit2 4:74d697416c75 203 lcd.cls();
kit2 4:74d697416c75 204 lcd.printf(" %d slices\n",num_slices);
kit2 4:74d697416c75 205 lcd.cls();
kit2 4:74d697416c75 206 lcd.printf(" Ideal sample interval=%d\n",(unsigned)(1000000.0/wav_format.sample_rate));
kit2 1:85eb1c94154a 207 samp_int=1000000/(wav_format.sample_rate);
kit2 4:74d697416c75 208 lcd.cls();
kit2 4:74d697416c75 209 lcd.printf(" programmed interrupt tick interval=%d\n",samp_int);
kit2 1:85eb1c94154a 210 // starting up ticker to write samples out -- no printfs until tick.detach is called
kit2 1:85eb1c94154a 211 tick.attach_us(&dac_out, samp_int);
kit2 1:85eb1c94154a 212 DAC_on=1;
kit2 1:85eb1c94154a 213 led2=1;
kit2 1:85eb1c94154a 214 for (slice=0;slice<num_slices;slice+=SLICE_BUF_SIZE) {
kit2 1:85eb1c94154a 215 fread(slice_buf,wav_format.block_align*SLICE_BUF_SIZE,1,wavfile);
kit2 1:85eb1c94154a 216 if (feof(wavfile)) {
kit2 4:74d697416c75 217 lcd.cls();
kit2 4:74d697416c75 218 lcd.printf("Oops -- not enough slices in the wave file\n");
kit2 1:85eb1c94154a 219 exit(1);
kit2 1:85eb1c94154a 220 }
kit2 1:85eb1c94154a 221 data_sptr=(short *)slice_buf;
kit2 1:85eb1c94154a 222 for (i=0;i<SLICE_BUF_SIZE;i++) {
kit2 1:85eb1c94154a 223 dac_data=0;
kit2 1:85eb1c94154a 224
kit2 1:85eb1c94154a 225 // for a stereo wave file average the two channels.
kit2 1:85eb1c94154a 226 for (channel=0;channel<wav_format.num_channels;channel++) {
kit2 1:85eb1c94154a 227 switch (wav_format.sig_bps) {
kit2 1:85eb1c94154a 228 case 16:
kit2 1:85eb1c94154a 229 dac_data+=( ((int)(*data_sptr++)) +32768)>>5;
kit2 1:85eb1c94154a 230 break;
kit2 1:85eb1c94154a 231 }
kit2 1:85eb1c94154a 232 }
kit2 1:85eb1c94154a 233 dac_data>>=1;
kit2 1:85eb1c94154a 234 DAC_fifo[DAC_wptr]=dac_data;
kit2 1:85eb1c94154a 235 DAC_wptr=(DAC_wptr+1) & 0xff;
kit2 1:85eb1c94154a 236 while (DAC_wptr==DAC_rptr) {
kit2 1:85eb1c94154a 237 led1=1;
kit2 1:85eb1c94154a 238 }
kit2 1:85eb1c94154a 239 led1=0;
kit2 1:85eb1c94154a 240 }
kit2 1:85eb1c94154a 241 }
kit2 1:85eb1c94154a 242 DAC_on=0;
kit2 1:85eb1c94154a 243 led2=0;
kit2 1:85eb1c94154a 244 tick.detach();
kit2 4:74d697416c75 245 lcd.cls();
kit2 4:74d697416c75 246 lcd.printf("Ticker detached\n");
kit2 1:85eb1c94154a 247 led3=1;
kit2 1:85eb1c94154a 248 free(slice_buf);
kit2 1:85eb1c94154a 249 break;
kit2 1:85eb1c94154a 250 case 0x5453494c:
kit2 4:74d697416c75 251 lcd.cls();
kit2 4:74d697416c75 252 lcd.printf("INFO chunk, size %d\n",chunk_size);
kit2 1:85eb1c94154a 253 fseek(wavfile,chunk_size,SEEK_CUR);
kit2 1:85eb1c94154a 254 break;
kit2 1:85eb1c94154a 255 default:
kit2 4:74d697416c75 256 lcd.cls();
kit2 4:74d697416c75 257 lcd.printf("unknown chunk type 0x%x, size %d\n",chunk_id,chunk_size);
kit2 1:85eb1c94154a 258 data=fseek(wavfile,chunk_size,SEEK_CUR);
kit2 1:85eb1c94154a 259 break;
kit2 1:85eb1c94154a 260 }
kit2 1:85eb1c94154a 261 fread(&chunk_id,4,1,wavfile);
kit2 1:85eb1c94154a 262 fread(&chunk_size,4,1,wavfile);
kit2 1:85eb1c94154a 263 }
kit2 4:74d697416c75 264 lcd.cls();
kit2 4:74d697416c75 265 lcd.printf("Done with wave file\n");
kit2 1:85eb1c94154a 266 fclose(wavfile);
kit2 1:85eb1c94154a 267 led1=0;
kit2 1:85eb1c94154a 268 }
kit2 1:85eb1c94154a 269
kit2 1:85eb1c94154a 270
kit2 1:85eb1c94154a 271 void dac_out()
kit2 1:85eb1c94154a 272 {
kit2 1:85eb1c94154a 273 if (DAC_on) {
kit2 5:d45608f231d3 274 led4=1;
kit2 1:85eb1c94154a 275 DACout.write_u16(DAC_fifo[DAC_rptr]);
kit2 1:85eb1c94154a 276 DAC_rptr=(DAC_rptr+1) & 0xff;
kit2 5:d45608f231d3 277 led4=0;
kit2 1:85eb1c94154a 278 }
kit2 1:85eb1c94154a 279 }
kit2 1:85eb1c94154a 280
kit2 1:85eb1c94154a 281
kit2 1:85eb1c94154a 282
kit2 1:85eb1c94154a 283
kit2 1:85eb1c94154a 284 //---------------------------------------------------------------------------------------------
kit2 1:85eb1c94154a 285
kit2 1:85eb1c94154a 286 //-------------------------------------------------------------------------------obtaining input
kit2 1:85eb1c94154a 287
kit2 2:9bdba6204bb4 288
4180_1 0:e09703934ff4 289 void fallInterrupt() {
kit2 1:85eb1c94154a 290 int key_code=0;
4180_1 0:e09703934ff4 291 int i=0;
4180_1 0:e09703934ff4 292 int value=mpr121.read(0x00);
4180_1 0:e09703934ff4 293 value +=mpr121.read(0x01)<<8;
kit2 1:85eb1c94154a 294
4180_1 0:e09703934ff4 295 i=0;
4180_1 0:e09703934ff4 296 // puts key number out to LEDs for demo
kit2 1:85eb1c94154a 297 for (i=0; i<12; i++)
kit2 1:85eb1c94154a 298 {
kit2 1:85eb1c94154a 299 if (((value>>i)&0x01)==1)
kit2 2:9bdba6204bb4 300 {
kit2 2:9bdba6204bb4 301 if(counter==0)
kit2 2:9bdba6204bb4 302 {
kit2 2:9bdba6204bb4 303 lcd.cls();
kit2 2:9bdba6204bb4 304 lcd.printf("");
kit2 2:9bdba6204bb4 305 }
kit2 1:85eb1c94154a 306 key_code=i;
kit2 1:85eb1c94154a 307 lcd.printf("%d", i);
kit2 1:85eb1c94154a 308 if(counter < 7)
kit2 1:85eb1c94154a 309 {
kit2 2:9bdba6204bb4 310
kit2 1:85eb1c94154a 311 Nums[counter] = i;
kit2 1:85eb1c94154a 312 counter++;
kit2 1:85eb1c94154a 313 }
4180_1 0:e09703934ff4 314 }
kit2 1:85eb1c94154a 315 }
4180_1 0:e09703934ff4 316 led4=key_code & 0x01;
4180_1 0:e09703934ff4 317 led3=(key_code>>1) & 0x01;
4180_1 0:e09703934ff4 318 led2=(key_code>>2) & 0x01;
4180_1 0:e09703934ff4 319 led1=(key_code>>3) & 0x01;
4180_1 0:e09703934ff4 320 }
kit2 1:85eb1c94154a 321
4180_1 0:e09703934ff4 322
kit2 1:85eb1c94154a 323 //------------------------------------------------------------------------------MAIN
4180_1 0:e09703934ff4 324
4180_1 0:e09703934ff4 325
kit2 1:85eb1c94154a 326 int main()
kit2 1:85eb1c94154a 327 {
4180_1 0:e09703934ff4 328
kit2 1:85eb1c94154a 329 //------------------------------------------------to start enter new password which user wants to set
kit2 1:85eb1c94154a 330 lcd.cls();
kit2 1:85eb1c94154a 331 lcd.printf("enter your new password\n");
kit2 4:74d697416c75 332
kit2 4:74d697416c75 333 //play_wave("/sd/forest.wav");
kit2 1:85eb1c94154a 334 wait(0.5);
4180_1 0:e09703934ff4 335
kit2 1:85eb1c94154a 336 int k;
kit2 1:85eb1c94154a 337 //----------------------------------------------enter password
kit2 1:85eb1c94154a 338 while(1)
kit2 1:85eb1c94154a 339 {
kit2 1:85eb1c94154a 340 interrupt.fall(&fallInterrupt);
kit2 1:85eb1c94154a 341 interrupt.mode(PullUp);
kit2 1:85eb1c94154a 342 if(counter==7){
kit2 1:85eb1c94154a 343 break;}
4180_1 0:e09703934ff4 344 }
kit2 1:85eb1c94154a 345
kit2 1:85eb1c94154a 346
kit2 1:85eb1c94154a 347 for (k=0; k<7; k++)
kit2 1:85eb1c94154a 348 {
kit2 1:85eb1c94154a 349 org[k]=Nums[k];
kit2 1:85eb1c94154a 350 }
kit2 1:85eb1c94154a 351
kit2 1:85eb1c94154a 352 wait(1);
kit2 1:85eb1c94154a 353
kit2 1:85eb1c94154a 354 AGAIN:
kit2 1:85eb1c94154a 355 lcd.cls();
kit2 1:85eb1c94154a 356 lcd.printf("1-open door\n2-reset password");
kit2 4:74d697416c75 357 play_wave("/sd/forest.wav");
4180_1 0:e09703934ff4 358 interrupt.fall(&fallInterrupt);
4180_1 0:e09703934ff4 359 interrupt.mode(PullUp);
kit2 1:85eb1c94154a 360
kit2 1:85eb1c94154a 361 while (1)
kit2 1:85eb1c94154a 362 {
kit2 1:85eb1c94154a 363 counter=0;
kit2 1:85eb1c94154a 364 if(Nums[0]==1)
kit2 1:85eb1c94154a 365 {
kit2 1:85eb1c94154a 366 lcd.cls();
kit2 1:85eb1c94154a 367 //---------------------------------------------------enter the password
kit2 1:85eb1c94154a 368 lcd.printf("enter your password\n");
kit2 4:74d697416c75 369 play_wave("/sd/forest.wav");
kit2 1:85eb1c94154a 370 wait(1);
kit2 1:85eb1c94154a 371
kit2 1:85eb1c94154a 372 while(1)
kit2 1:85eb1c94154a 373 {
kit2 1:85eb1c94154a 374 interrupt.fall(&fallInterrupt);
kit2 1:85eb1c94154a 375 interrupt.mode(PullUp);
kit2 1:85eb1c94154a 376 if(counter==7){break;}
kit2 1:85eb1c94154a 377 }
kit2 1:85eb1c94154a 378 if(counter == 7)
kit2 1:85eb1c94154a 379 {
kit2 1:85eb1c94154a 380 wait(1);
kit2 1:85eb1c94154a 381 //lcd.printf("%d",Nums[4]);
kit2 1:85eb1c94154a 382 for(k=0;k<7;k++)
kit2 1:85eb1c94154a 383 {
kit2 1:85eb1c94154a 384 lcd.printf("%d",Nums[k]);
kit2 1:85eb1c94154a 385 wait(1);
kit2 1:85eb1c94154a 386 }
kit2 1:85eb1c94154a 387 if((Nums[0] == org[0]) && (Nums[1] == org[1]) && (Nums[2] == org[2])&&(Nums[3] == org[3]) && (Nums[4] == org[4]) &&(Nums[5] == org[5])&& (Nums[6] == org[6]))
kit2 1:85eb1c94154a 388 {
kit2 1:85eb1c94154a 389 lcd.cls();
kit2 1:85eb1c94154a 390 lcd.printf("password is correct, door open\n");
kit2 1:85eb1c94154a 391 servo=1;
kit2 1:85eb1c94154a 392 wait(1);
kit2 1:85eb1c94154a 393 lcd.cls();
kit2 1:85eb1c94154a 394 lcd.printf("opening door...\n");
kit2 4:74d697416c75 395 play_wave("/sd/forest.wav");
kit2 5:d45608f231d3 396 servo1 = 1;
kit2 5:d45608f231d3 397 servo2 = 0;
kit2 2:9bdba6204bb4 398 wait(5);
kit2 5:d45608f231d3 399 servo1 = 0;
kit2 5:d45608f231d3 400 servo2 = 1;
kit2 2:9bdba6204bb4 401 wait(5);
kit2 1:85eb1c94154a 402 goto AGAIN;
kit2 1:85eb1c94154a 403 }
kit2 1:85eb1c94154a 404 else
kit2 1:85eb1c94154a 405 {
kit2 2:9bdba6204bb4 406
kit2 1:85eb1c94154a 407 lcd.cls();
kit2 1:85eb1c94154a 408 lcd.printf("password incorrect.retry\n");
kit2 2:9bdba6204bb4 409 play_wave("/sd/forest.wav");
kit2 2:9bdba6204bb4 410 wait(10);
kit2 1:85eb1c94154a 411 goto AGAIN;
kit2 1:85eb1c94154a 412 }
kit2 1:85eb1c94154a 413 }
kit2 1:85eb1c94154a 414 }
kit2 1:85eb1c94154a 415
kit2 1:85eb1c94154a 416
kit2 1:85eb1c94154a 417 wait(1);
kit2 1:85eb1c94154a 418 if(Nums[0]==2)
kit2 1:85eb1c94154a 419 {
kit2 1:85eb1c94154a 420 wait(1);
kit2 1:85eb1c94154a 421 counter=0;
kit2 1:85eb1c94154a 422 lcd.cls();
kit2 1:85eb1c94154a 423 lcd.printf("enter your old password\n");
kit2 1:85eb1c94154a 424 play_wave("/sd/forest.wav");
kit2 1:85eb1c94154a 425 while(1)
kit2 1:85eb1c94154a 426 {
kit2 1:85eb1c94154a 427 interrupt.fall(&fallInterrupt);
kit2 1:85eb1c94154a 428 interrupt.mode(PullUp);
kit2 1:85eb1c94154a 429 if(counter==7){break;}
kit2 1:85eb1c94154a 430 }
kit2 1:85eb1c94154a 431
kit2 1:85eb1c94154a 432 if(counter == 7)
kit2 1:85eb1c94154a 433 {
kit2 1:85eb1c94154a 434
kit2 1:85eb1c94154a 435 if((Nums[0] == org[0]) && (Nums[1] == org[1]) && (Nums[2] == org[2])&&(Nums[3] == org[3]) && (Nums[4] == org[4]) &&(Nums[5] == org[5])&& (Nums[6] == org[6]))
kit2 1:85eb1c94154a 436 {
kit2 1:85eb1c94154a 437 counter=0;
kit2 1:85eb1c94154a 438 lcd.cls();
kit2 1:85eb1c94154a 439 lcd.printf("enter your new password");
kit2 1:85eb1c94154a 440 play_wave("/sd/forest.wav");
kit2 1:85eb1c94154a 441 while(1)
kit2 1:85eb1c94154a 442 {
kit2 1:85eb1c94154a 443 interrupt.fall(&fallInterrupt);
kit2 1:85eb1c94154a 444 interrupt.mode(PullUp);
kit2 1:85eb1c94154a 445 if(counter==7){break;}
kit2 1:85eb1c94154a 446 }
kit2 1:85eb1c94154a 447
kit2 1:85eb1c94154a 448 for (k=0; k<7; k++)
kit2 1:85eb1c94154a 449 {
kit2 1:85eb1c94154a 450 org[k]=Nums[k];
kit2 1:85eb1c94154a 451 }
kit2 1:85eb1c94154a 452
kit2 1:85eb1c94154a 453 lcd.cls();
kit2 1:85eb1c94154a 454 lcd.printf("password changed");
kit2 1:85eb1c94154a 455 play_wave("/sd/forest.wav");
kit2 1:85eb1c94154a 456 goto AGAIN;
kit2 1:85eb1c94154a 457 }
kit2 1:85eb1c94154a 458 else
kit2 1:85eb1c94154a 459 {
kit2 1:85eb1c94154a 460 lcd.cls();
kit2 1:85eb1c94154a 461 lcd.printf("password incorrect.retry\n");
kit2 2:9bdba6204bb4 462 k++;
kit2 2:9bdba6204bb4 463 if(k==3)
kit2 2:9bdba6204bb4 464 {
kit2 2:9bdba6204bb4 465 lcd.cls();
kit2 2:9bdba6204bb4 466 lcd.printf("Locked");
kit2 2:9bdba6204bb4 467 wait(30);
kit2 2:9bdba6204bb4 468 }
kit2 1:85eb1c94154a 469 play_wave("/sd/forest.wav");
kit2 1:85eb1c94154a 470 goto AGAIN;
kit2 1:85eb1c94154a 471 }
kit2 1:85eb1c94154a 472 }
4180_1 0:e09703934ff4 473 }
kit2 2:9bdba6204bb4 474 else
kit2 2:9bdba6204bb4 475 {
kit2 2:9bdba6204bb4 476 goto AGAIN;
kit2 1:85eb1c94154a 477 }
kit2 1:85eb1c94154a 478 }
kit2 2:9bdba6204bb4 479 }