hi

Dependencies:   4DGL-uLCD-SE Servo HC_SR04_Ultrasonic_Library mbed-rtos mbed

Created by David Sanchez, Jonathan Arthur, and Jong Pil Park

Smart Door Lock

Overview

The smart door lock system was designed with the purpose of adding a modular form of security and convenience to any door. A servo was connected to a door lock which locks and unlocks the door through three different methods: Using an app on a phone via Bluetooth , the use of pushbuttons, and a set of timers which lock the door after a certain time. Sonar was also implemented to determine whether the door is in an opened or closed state. An LCD was used to display the current state of the locking mechanism. Lastly, a speaker and an amplifier are included which are used as an alarm that goes off when the door is opened without authorization.

Bluetooth Thread

/media/uploads/Philipjp/ble.jpg

Adafruit BLEMbed
VinVu
gnd,CTSGnd
TXOp10
RXIp9

To be able to wirelessly unlock the door knob we used the adafruit BLE which can communicate with the Bluefruit app. We created a function which prints a line to the phone asking for a password. It waits until something is typed in and if the password is correct it unlocks/locks the door. If the password is not correct it just prints the same line again. This function runs on a separate thread so that other things can be done simultaneously.

void bluetooth(){
      
      while(1){

       blue.printf("enter password\n");   
             if (blue.getc()=='!')
              {
              if (blue.getc()=='!')
              {
               if (blue.getc()=='!')
              {
               if (blue.getc()=='!')
               {
                      i=!i;   
                     blue.printf("password is correct\n");  
               }
               }
               }
               }          
                                  }//end while loop
    }

LCD Thread

/media/uploads/Philipjp/8185.png

uLCD cableMbed
Vcc5V
GndGnd
TXp13
RXp14
RESETp15

Another thread was used for displaying the status of the door. If the door is closed a red message is displayed on the LCD and a green message is displayed if the door is opened. The LCD also tells if the door is locked or unlocked. The code for the LCD is provided below. This thread uses a mutex so that the program does not lock up.

void LCD()
{
    while(1)
    {
       mut.lock();
       if(i==0){
             
             uLCD.locate(7,9);
             uLCD.printf("Locked       ");
             }
             else 
             {
                 uLCD.locate(7,9);
             uLCD.printf("Unlocked");
             
     }
       mut.unlock();
       
       
       
       
       if (j==0)
       {
           mut.lock();
         
           uLCD.line(0, 0, 127, 0, RED);
            uLCD.line(127, 0, 127, 127, RED);
            uLCD.line(127, 127, 0, 127, RED);
             uLCD.line(0, 127, 0, 0, RED);
           uLCD.color(RED);
           uLCD.locate(7,8);
            uLCD.text_width(1);
           uLCD.text_height(1);
           uLCD.printf("CLOSED   ");
           mut.unlock();
       }//end if
       
       if(j==1)
        {
        
            mut.lock();
          
            uLCD.line(0, 0, 127, 0, GREEN);
            uLCD.line(127, 0, 127, 127, GREEN);
            uLCD.line(127, 127, 0, 127, GREEN);
             uLCD.line(0, 127, 0, 0, GREEN);
           uLCD.color(GREEN);
           uLCD.locate(7,8);
           uLCD.text_width(1);
           uLCD.text_height(1);
           uLCD.printf("OPEN    ");
          
         
            mut.unlock();
        }  
           
           
        Thread::wait(2);
                 
    }//end while
}//end LCD

Light Sensor Thread

/media/uploads/davidscque/lightsen.png

A light sensor is used to tell if it is night time. This thread checks if the amount of light is low and if it is it locks the door after 10 minutes.

void LEDT(){
     while(1){
           
           
           
            
              mut.lock(); 
              if(photocell<0.010)
              {
               mut.unlock(); 
               Thread::wait(100000);
               Thread::wait(100000);
               Thread::wait(100000);
                 mut.lock(); 
               if(photocell<0.010)
               i=0;
               } //end if
               
               
                 mut.unlock(); 
                 
                 
               //Thread::yield();  
                 
            }//end while
              

         
         }

Speaker Thread

/media/uploads/Philipjp/speaker.jpg /media/uploads/davidscque/amp.jpg

MbedTPA2005D1Speaker
gndpwr-,in-
Voutpwr+
p18in+
out++
out--

This thread checks if the door is opened while it is locked and makes the alarm go off.

void Pwspeaker()
    {
        
        while(1)
        {
            
         while(i==0&&j==1)
         {
           speaker.PlayNote(969.0, 0.5, 1.0);
        speaker.PlayNote(800.0, 0.5, 1.0);

          }   
            
            
            
        }
            
    }

Main Thread

/media/uploads/Philipjp/servoproduct.jpg.200x200_q85.jpg /media/uploads/Philipjp/servocable.png

Servo MotorMbed
BlackGnd
RED5V
Yellowp21

/media/uploads/Philipjp/hcsr04.jpg

Sonar SenorMbed
Vcc5V
GndGnd
trigp6
echop7

/media/uploads/Philipjp/bottom.jpg

Pb1Pb2Pb3Mbed
pin1p19
pin1p 23
pin1p24
pin2pin2pin2gnd

/media/uploads/Philipjp/rgbled.jpg

RGBLED lightMbed
REDp26
GndGnd
GREENp29
BLUEp30

The main thread initializes all the other threads, checks if the pushbuttons are pressed and checks if the door is closed or open. The pushbuttons simply unlock and lock the door. There is a third pushbutton that locks the door but 10 seconds after being pressed. This gives the person time to open and close the door before it locks. Sonar is used to check if the door is closed or open. The main thread initializes the sonar so that the distance from the sensor to an object is constantly measured. If this distance is greater than a certain value then it means that the door is open. This is used for the alarm which is turned on if the door is open while it is locked. An RGB LED used to indicate the status of the door. If the door is locked the green LED turns on and if the door is unlocked the red LED turns on. The blue LED turns on when the door is open.

int main() {    
uLCD.baudrate(3000000);
 pb1.mode(PullUp);
  pb2.mode(PullUp);
  pb3.mode(PullUp);
   mu.startUpdates();//start measuring the distance

thread3.start(Pwspeaker);       
         thread.start(bluetooth);
  thread2.start(LCD);
  thread4.start(LEDT);
 
   while(1){
       
       
        LEDG =!i;
        LEDB = 0;
        LEDR= i;   
            
    if(pb3==0){
     
     mut.lock();
     uLCD.cls();
     uLCD.color(RED);
     uLCD.locate(3,3);
     uLCD.text_width(3);
     uLCD.text_height(3);
     uLCD.printf("10");
     
          wait(1);
          uLCD.cls();
           uLCD.color(RED);
     uLCD.locate(3,3);
     uLCD.text_width(3);
     uLCD.text_height(3);
          uLCD.printf("9");
          wait(1);
          uLCD.cls();
           uLCD.color(RED);
     uLCD.locate(3,3);
     uLCD.text_width(3);
     uLCD.text_height(3);
          uLCD.printf("8");
          wait(1);
          uLCD.cls();
           uLCD.color(RED);
     uLCD.locate(3,3);
     uLCD.text_width(3);
     uLCD.text_height(3);
          uLCD.printf("7");
          wait(1);
          uLCD.cls();
           uLCD.color(RED);
     uLCD.locate(3,3);
     uLCD.text_width(3);
     uLCD.text_height(3);
          uLCD.printf("6");
          wait(1);
          uLCD.cls();
           uLCD.color(RED);
     uLCD.locate(3,3);
     uLCD.text_width(3);
     uLCD.text_height(3);
          uLCD.printf("5");
          wait(1);
          uLCD.cls();
           uLCD.color(RED);
     uLCD.locate(3,3);
     uLCD.text_width(3);
     uLCD.text_height(3);
          uLCD.printf("4");
          wait(1);
          uLCD.cls();
           uLCD.color(RED);
     uLCD.locate(3,3);
     uLCD.text_width(3);
     uLCD.text_height(3);
          uLCD.printf("3");
          wait(1);
          uLCD.cls();
           uLCD.color(RED);
     uLCD.locate(3,3);
     uLCD.text_width(3);
     uLCD.text_height(3);
          uLCD.printf("2");
          wait(1);
          uLCD.cls();
           uLCD.color(RED);
     uLCD.locate(3,3);
     uLCD.text_width(3);
     uLCD.text_height(3);
          uLCD.printf("1");
          wait(1);
          uLCD.cls();
           
     i=0;
     mut.unlock();
    
     } 
     
     
        
        
        
            
   if (pb1==0){//Locked
        
        i = 0;
      
        }
       
    if (pb2==0){//Unlocked
        i = 1;
        
        }
         if (j==1){//close
            LEDR =0;
           LEDG = 0;
           LEDB =1;
        }
       
  
 
   
        myservo=i;
      
      mut.lock();
        mu.checkDistance();
        mut.unlock();
        printf("%f \n",dist2);
        if (dist2>0.5f)
        {
            led=1;
            j=1;
           
        }
        else 
        {
            led=0;
            j=0;
           
            }
                
            
    }//end while
}//end main
Committer:
davidscque
Date:
Tue May 01 04:54:34 2018 +0000
Revision:
1:21d56f84fe51
Parent:
0:0e43a69efacd
final edit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davidscque 0:0e43a69efacd 1 #include "mbed.h"
davidscque 0:0e43a69efacd 2 #include "Servo.h"
davidscque 0:0e43a69efacd 3 #include "ultrasonic.h"
davidscque 0:0e43a69efacd 4 #include "rtos.h"
davidscque 0:0e43a69efacd 5 #include "uLCD_4DGL.h"
davidscque 1:21d56f84fe51 6 #include "Speaker.h"
davidscque 1:21d56f84fe51 7 //#include "PinDetect.h"
davidscque 1:21d56f84fe51 8
davidscque 1:21d56f84fe51 9 //#include <mpr121.h>
davidscque 1:21d56f84fe51 10
davidscque 1:21d56f84fe51 11
davidscque 0:0e43a69efacd 12 float dist2;
davidscque 0:0e43a69efacd 13 Mutex mut;
davidscque 0:0e43a69efacd 14 void dist(int distance)
davidscque 0:0e43a69efacd 15 {
davidscque 0:0e43a69efacd 16 //put code here to execute when the distance has changed
davidscque 0:0e43a69efacd 17 //printf("Distance %f feet\r\n", distance/1000.0*3.28084);
davidscque 0:0e43a69efacd 18 mut.lock();
davidscque 0:0e43a69efacd 19 dist2 = distance/1000.0*3.28084;
davidscque 0:0e43a69efacd 20 mut.unlock();
davidscque 0:0e43a69efacd 21 }
davidscque 0:0e43a69efacd 22 Thread thread;
davidscque 0:0e43a69efacd 23 Thread thread2;
davidscque 1:21d56f84fe51 24 Thread thread3;
davidscque 1:21d56f84fe51 25 Thread thread4;
davidscque 0:0e43a69efacd 26 DigitalOut led(p8);
davidscque 0:0e43a69efacd 27 ultrasonic mu(p6, p7, .1, 1, &dist);
davidscque 0:0e43a69efacd 28 Servo myservo(p21);
davidscque 0:0e43a69efacd 29 PwmOut myled(LED1);
davidscque 1:21d56f84fe51 30 //AnalogIn mypotentiometer(p20);
davidscque 1:21d56f84fe51 31 Speaker speaker(p18);
davidscque 0:0e43a69efacd 32 RawSerial blue(p9,p10);
davidscque 0:0e43a69efacd 33 uLCD_4DGL uLCD(p13, p14, p15);
davidscque 1:21d56f84fe51 34 DigitalOut LEDR(p26); //DigitalOuts for LEDs
davidscque 1:21d56f84fe51 35 DigitalOut LEDG(p29);
davidscque 1:21d56f84fe51 36 DigitalOut LEDB(p30);
davidscque 1:21d56f84fe51 37
davidscque 1:21d56f84fe51 38 DigitalIn pb3(p19);
davidscque 1:21d56f84fe51 39
davidscque 1:21d56f84fe51 40 DigitalOut LED(LED1);
davidscque 1:21d56f84fe51 41 DigitalIn pb1(p23); //locked
davidscque 1:21d56f84fe51 42 DigitalIn pb2(p24); //unlocked
davidscque 1:21d56f84fe51 43
davidscque 1:21d56f84fe51 44 Serial pc(USBTX,USBRX);
davidscque 1:21d56f84fe51 45 InterruptIn interrupt(p25);
davidscque 1:21d56f84fe51 46 I2C i2c(p28, p27);
davidscque 1:21d56f84fe51 47 AnalogIn photocell(p20);
davidscque 1:21d56f84fe51 48 //Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
davidscque 1:21d56f84fe51 49
davidscque 1:21d56f84fe51 50
davidscque 0:0e43a69efacd 51 float i =0.0;
davidscque 0:0e43a69efacd 52 float j=0.0;
davidscque 0:0e43a69efacd 53
davidscque 1:21d56f84fe51 54
davidscque 1:21d56f84fe51 55 void LEDT(){
davidscque 1:21d56f84fe51 56 while(1){
davidscque 1:21d56f84fe51 57
davidscque 1:21d56f84fe51 58
davidscque 1:21d56f84fe51 59
davidscque 1:21d56f84fe51 60
davidscque 1:21d56f84fe51 61 mut.lock();
davidscque 1:21d56f84fe51 62 if(photocell<0.010)
davidscque 1:21d56f84fe51 63 {
davidscque 1:21d56f84fe51 64 mut.unlock();
davidscque 1:21d56f84fe51 65 Thread::wait(100000);
davidscque 1:21d56f84fe51 66 Thread::wait(100000);
davidscque 1:21d56f84fe51 67 Thread::wait(100000);
davidscque 1:21d56f84fe51 68 mut.lock();
davidscque 1:21d56f84fe51 69 if(photocell<0.010)
davidscque 1:21d56f84fe51 70 i=0;
davidscque 1:21d56f84fe51 71 } //end if
davidscque 1:21d56f84fe51 72
davidscque 1:21d56f84fe51 73
davidscque 1:21d56f84fe51 74 mut.unlock();
davidscque 1:21d56f84fe51 75
davidscque 1:21d56f84fe51 76
davidscque 1:21d56f84fe51 77 //Thread::yield();
davidscque 1:21d56f84fe51 78
davidscque 1:21d56f84fe51 79 }//end while
davidscque 1:21d56f84fe51 80
davidscque 1:21d56f84fe51 81
davidscque 1:21d56f84fe51 82
davidscque 1:21d56f84fe51 83 }
davidscque 1:21d56f84fe51 84
davidscque 1:21d56f84fe51 85
davidscque 1:21d56f84fe51 86
davidscque 1:21d56f84fe51 87
davidscque 1:21d56f84fe51 88
davidscque 1:21d56f84fe51 89
davidscque 1:21d56f84fe51 90
davidscque 1:21d56f84fe51 91
davidscque 1:21d56f84fe51 92
davidscque 1:21d56f84fe51 93
davidscque 0:0e43a69efacd 94 void LCD()
davidscque 0:0e43a69efacd 95 {
davidscque 0:0e43a69efacd 96 while(1)
davidscque 0:0e43a69efacd 97 {
davidscque 1:21d56f84fe51 98 mut.lock();
davidscque 1:21d56f84fe51 99 if(i==0){
davidscque 1:21d56f84fe51 100
davidscque 1:21d56f84fe51 101 uLCD.locate(7,9);
davidscque 1:21d56f84fe51 102 uLCD.printf("Locked ");
davidscque 1:21d56f84fe51 103 }
davidscque 1:21d56f84fe51 104 else
davidscque 1:21d56f84fe51 105 {
davidscque 1:21d56f84fe51 106 uLCD.locate(7,9);
davidscque 1:21d56f84fe51 107 uLCD.printf("Unlocked");
davidscque 1:21d56f84fe51 108
davidscque 1:21d56f84fe51 109 }
davidscque 1:21d56f84fe51 110 mut.unlock();
davidscque 1:21d56f84fe51 111
davidscque 1:21d56f84fe51 112
davidscque 1:21d56f84fe51 113
davidscque 1:21d56f84fe51 114
davidscque 1:21d56f84fe51 115 if (j==0)
davidscque 0:0e43a69efacd 116 {
davidscque 0:0e43a69efacd 117 mut.lock();
davidscque 1:21d56f84fe51 118
davidscque 1:21d56f84fe51 119 uLCD.line(0, 0, 127, 0, RED);
davidscque 1:21d56f84fe51 120 uLCD.line(127, 0, 127, 127, RED);
davidscque 1:21d56f84fe51 121 uLCD.line(127, 127, 0, 127, RED);
davidscque 1:21d56f84fe51 122 uLCD.line(0, 127, 0, 0, RED);
davidscque 0:0e43a69efacd 123 uLCD.color(RED);
davidscque 1:21d56f84fe51 124 uLCD.locate(7,8);
davidscque 1:21d56f84fe51 125 uLCD.text_width(1);
davidscque 1:21d56f84fe51 126 uLCD.text_height(1);
davidscque 1:21d56f84fe51 127 uLCD.printf("CLOSED ");
davidscque 0:0e43a69efacd 128 mut.unlock();
davidscque 1:21d56f84fe51 129 }//end if
davidscque 1:21d56f84fe51 130
davidscque 1:21d56f84fe51 131 if(j==1)
davidscque 0:0e43a69efacd 132 {
davidscque 0:0e43a69efacd 133
davidscque 0:0e43a69efacd 134 mut.lock();
davidscque 1:21d56f84fe51 135
davidscque 1:21d56f84fe51 136 uLCD.line(0, 0, 127, 0, GREEN);
davidscque 1:21d56f84fe51 137 uLCD.line(127, 0, 127, 127, GREEN);
davidscque 1:21d56f84fe51 138 uLCD.line(127, 127, 0, 127, GREEN);
davidscque 1:21d56f84fe51 139 uLCD.line(0, 127, 0, 0, GREEN);
davidscque 0:0e43a69efacd 140 uLCD.color(GREEN);
davidscque 1:21d56f84fe51 141 uLCD.locate(7,8);
davidscque 1:21d56f84fe51 142 uLCD.text_width(1);
davidscque 1:21d56f84fe51 143 uLCD.text_height(1);
davidscque 1:21d56f84fe51 144 uLCD.printf("OPEN ");
davidscque 1:21d56f84fe51 145
davidscque 1:21d56f84fe51 146
davidscque 1:21d56f84fe51 147 mut.unlock();
davidscque 0:0e43a69efacd 148 }
davidscque 0:0e43a69efacd 149
davidscque 0:0e43a69efacd 150
davidscque 1:21d56f84fe51 151 Thread::wait(2);
davidscque 1:21d56f84fe51 152
davidscque 1:21d56f84fe51 153 }//end while
davidscque 1:21d56f84fe51 154 }//end LCD
davidscque 0:0e43a69efacd 155
davidscque 0:0e43a69efacd 156
davidscque 0:0e43a69efacd 157 void bluetooth(){
davidscque 0:0e43a69efacd 158 char bnum=0;
davidscque 1:21d56f84fe51 159
davidscque 1:21d56f84fe51 160
davidscque 1:21d56f84fe51 161
davidscque 1:21d56f84fe51 162 while(1)
davidscque 1:21d56f84fe51 163 {
davidscque 1:21d56f84fe51 164 blue.printf("enter password\n");
davidscque 0:0e43a69efacd 165
davidscque 1:21d56f84fe51 166 if (blue.getc()=='!')
davidscque 0:0e43a69efacd 167 {
davidscque 0:0e43a69efacd 168 if (blue.getc()=='!')
davidscque 0:0e43a69efacd 169 {
davidscque 0:0e43a69efacd 170 if (blue.getc()=='!')
davidscque 0:0e43a69efacd 171 {
davidscque 0:0e43a69efacd 172 if (blue.getc()=='!')
davidscque 0:0e43a69efacd 173 {
davidscque 0:0e43a69efacd 174 i=!i;
davidscque 0:0e43a69efacd 175 blue.printf("password is correct\n");
davidscque 1:21d56f84fe51 176
davidscque 0:0e43a69efacd 177 }
davidscque 0:0e43a69efacd 178
davidscque 0:0e43a69efacd 179
davidscque 0:0e43a69efacd 180
davidscque 0:0e43a69efacd 181 }
davidscque 0:0e43a69efacd 182 }
davidscque 0:0e43a69efacd 183 }
davidscque 0:0e43a69efacd 184 // mut.unlock();
davidscque 0:0e43a69efacd 185
davidscque 0:0e43a69efacd 186 }//end while loop
davidscque 0:0e43a69efacd 187 }
davidscque 1:21d56f84fe51 188
davidscque 1:21d56f84fe51 189 void Pwspeaker()
davidscque 1:21d56f84fe51 190 {
davidscque 1:21d56f84fe51 191
davidscque 1:21d56f84fe51 192 while(1)
davidscque 1:21d56f84fe51 193 {
davidscque 1:21d56f84fe51 194
davidscque 1:21d56f84fe51 195 while(i==0&&j==1)
davidscque 1:21d56f84fe51 196 {
davidscque 1:21d56f84fe51 197 speaker.PlayNote(969.0, 0.5, 1.0);
davidscque 1:21d56f84fe51 198 speaker.PlayNote(800.0, 0.5, 1.0);
davidscque 1:21d56f84fe51 199
davidscque 1:21d56f84fe51 200 }
davidscque 1:21d56f84fe51 201
davidscque 1:21d56f84fe51 202
davidscque 1:21d56f84fe51 203
davidscque 1:21d56f84fe51 204 }
davidscque 1:21d56f84fe51 205
davidscque 1:21d56f84fe51 206 }
davidscque 0:0e43a69efacd 207
davidscque 0:0e43a69efacd 208 int main() {
davidscque 0:0e43a69efacd 209 uLCD.baudrate(3000000);
davidscque 1:21d56f84fe51 210 pb1.mode(PullUp);
davidscque 1:21d56f84fe51 211 pb2.mode(PullUp);
davidscque 1:21d56f84fe51 212 pb3.mode(PullUp);
davidscque 0:0e43a69efacd 213 mu.startUpdates();//start measuring the distance
davidscque 1:21d56f84fe51 214
davidscque 1:21d56f84fe51 215 thread3.start(Pwspeaker);
davidscque 1:21d56f84fe51 216 thread.start(bluetooth);
davidscque 0:0e43a69efacd 217 thread2.start(LCD);
davidscque 1:21d56f84fe51 218 thread4.start(LEDT);
davidscque 1:21d56f84fe51 219
davidscque 0:0e43a69efacd 220 while(1){
davidscque 1:21d56f84fe51 221
davidscque 1:21d56f84fe51 222
davidscque 1:21d56f84fe51 223 LEDG =!i;
davidscque 1:21d56f84fe51 224 LEDB = 0;
davidscque 1:21d56f84fe51 225 LEDR= i;
davidscque 1:21d56f84fe51 226
davidscque 1:21d56f84fe51 227 if(pb3==0){
davidscque 1:21d56f84fe51 228
davidscque 1:21d56f84fe51 229 mut.lock();
davidscque 1:21d56f84fe51 230 uLCD.cls();
davidscque 1:21d56f84fe51 231 uLCD.color(RED);
davidscque 1:21d56f84fe51 232 uLCD.locate(3,3);
davidscque 1:21d56f84fe51 233 uLCD.text_width(3);
davidscque 1:21d56f84fe51 234 uLCD.text_height(3);
davidscque 1:21d56f84fe51 235 uLCD.printf("10");
davidscque 1:21d56f84fe51 236
davidscque 1:21d56f84fe51 237 wait(1);
davidscque 1:21d56f84fe51 238 uLCD.cls();
davidscque 1:21d56f84fe51 239 uLCD.color(RED);
davidscque 1:21d56f84fe51 240 uLCD.locate(3,3);
davidscque 1:21d56f84fe51 241 uLCD.text_width(3);
davidscque 1:21d56f84fe51 242 uLCD.text_height(3);
davidscque 1:21d56f84fe51 243 uLCD.printf("9");
davidscque 1:21d56f84fe51 244 wait(1);
davidscque 1:21d56f84fe51 245 uLCD.cls();
davidscque 1:21d56f84fe51 246 uLCD.color(RED);
davidscque 1:21d56f84fe51 247 uLCD.locate(3,3);
davidscque 1:21d56f84fe51 248 uLCD.text_width(3);
davidscque 1:21d56f84fe51 249 uLCD.text_height(3);
davidscque 1:21d56f84fe51 250 uLCD.printf("8");
davidscque 1:21d56f84fe51 251 wait(1);
davidscque 1:21d56f84fe51 252 uLCD.cls();
davidscque 1:21d56f84fe51 253 uLCD.color(RED);
davidscque 1:21d56f84fe51 254 uLCD.locate(3,3);
davidscque 1:21d56f84fe51 255 uLCD.text_width(3);
davidscque 1:21d56f84fe51 256 uLCD.text_height(3);
davidscque 1:21d56f84fe51 257 uLCD.printf("7");
davidscque 1:21d56f84fe51 258 wait(1);
davidscque 1:21d56f84fe51 259 uLCD.cls();
davidscque 1:21d56f84fe51 260 uLCD.color(RED);
davidscque 1:21d56f84fe51 261 uLCD.locate(3,3);
davidscque 1:21d56f84fe51 262 uLCD.text_width(3);
davidscque 1:21d56f84fe51 263 uLCD.text_height(3);
davidscque 1:21d56f84fe51 264 uLCD.printf("6");
davidscque 1:21d56f84fe51 265 wait(1);
davidscque 1:21d56f84fe51 266 uLCD.cls();
davidscque 1:21d56f84fe51 267 uLCD.color(RED);
davidscque 1:21d56f84fe51 268 uLCD.locate(3,3);
davidscque 1:21d56f84fe51 269 uLCD.text_width(3);
davidscque 1:21d56f84fe51 270 uLCD.text_height(3);
davidscque 1:21d56f84fe51 271 uLCD.printf("5");
davidscque 1:21d56f84fe51 272 wait(1);
davidscque 1:21d56f84fe51 273 uLCD.cls();
davidscque 1:21d56f84fe51 274 uLCD.color(RED);
davidscque 1:21d56f84fe51 275 uLCD.locate(3,3);
davidscque 1:21d56f84fe51 276 uLCD.text_width(3);
davidscque 1:21d56f84fe51 277 uLCD.text_height(3);
davidscque 1:21d56f84fe51 278 uLCD.printf("4");
davidscque 1:21d56f84fe51 279 wait(1);
davidscque 1:21d56f84fe51 280 uLCD.cls();
davidscque 1:21d56f84fe51 281 uLCD.color(RED);
davidscque 1:21d56f84fe51 282 uLCD.locate(3,3);
davidscque 1:21d56f84fe51 283 uLCD.text_width(3);
davidscque 1:21d56f84fe51 284 uLCD.text_height(3);
davidscque 1:21d56f84fe51 285 uLCD.printf("3");
davidscque 1:21d56f84fe51 286 wait(1);
davidscque 1:21d56f84fe51 287 uLCD.cls();
davidscque 1:21d56f84fe51 288 uLCD.color(RED);
davidscque 1:21d56f84fe51 289 uLCD.locate(3,3);
davidscque 1:21d56f84fe51 290 uLCD.text_width(3);
davidscque 1:21d56f84fe51 291 uLCD.text_height(3);
davidscque 1:21d56f84fe51 292 uLCD.printf("2");
davidscque 1:21d56f84fe51 293 wait(1);
davidscque 1:21d56f84fe51 294 uLCD.cls();
davidscque 1:21d56f84fe51 295 uLCD.color(RED);
davidscque 1:21d56f84fe51 296 uLCD.locate(3,3);
davidscque 1:21d56f84fe51 297 uLCD.text_width(3);
davidscque 1:21d56f84fe51 298 uLCD.text_height(3);
davidscque 1:21d56f84fe51 299 uLCD.printf("1");
davidscque 1:21d56f84fe51 300 wait(1);
davidscque 1:21d56f84fe51 301 uLCD.cls();
davidscque 1:21d56f84fe51 302
davidscque 1:21d56f84fe51 303 i=0;
davidscque 1:21d56f84fe51 304 mut.unlock();
davidscque 0:0e43a69efacd 305
davidscque 1:21d56f84fe51 306 }
davidscque 1:21d56f84fe51 307
davidscque 1:21d56f84fe51 308
davidscque 1:21d56f84fe51 309
davidscque 1:21d56f84fe51 310
davidscque 1:21d56f84fe51 311
davidscque 1:21d56f84fe51 312
davidscque 1:21d56f84fe51 313 if (pb1==0){//Locked
davidscque 1:21d56f84fe51 314
davidscque 1:21d56f84fe51 315 i = 0;
davidscque 1:21d56f84fe51 316
davidscque 1:21d56f84fe51 317 }
davidscque 1:21d56f84fe51 318
davidscque 1:21d56f84fe51 319 if (pb2==0){//Unlocked
davidscque 1:21d56f84fe51 320 i = 1;
davidscque 1:21d56f84fe51 321
davidscque 1:21d56f84fe51 322 }
davidscque 1:21d56f84fe51 323 if (j==1){//close
davidscque 1:21d56f84fe51 324 LEDR =0;
davidscque 1:21d56f84fe51 325 LEDG = 0;
davidscque 1:21d56f84fe51 326 LEDB =1;
davidscque 1:21d56f84fe51 327 }
davidscque 1:21d56f84fe51 328
davidscque 1:21d56f84fe51 329
davidscque 1:21d56f84fe51 330
davidscque 0:0e43a69efacd 331
davidscque 0:0e43a69efacd 332 myservo=i;
davidscque 1:21d56f84fe51 333
davidscque 0:0e43a69efacd 334 mut.lock();
davidscque 0:0e43a69efacd 335 mu.checkDistance();
davidscque 0:0e43a69efacd 336 mut.unlock();
davidscque 0:0e43a69efacd 337 printf("%f \n",dist2);
davidscque 0:0e43a69efacd 338 if (dist2>0.5f)
davidscque 0:0e43a69efacd 339 {
davidscque 0:0e43a69efacd 340 led=1;
davidscque 0:0e43a69efacd 341 j=1;
davidscque 1:21d56f84fe51 342
davidscque 0:0e43a69efacd 343 }
davidscque 0:0e43a69efacd 344 else
davidscque 0:0e43a69efacd 345 {
davidscque 0:0e43a69efacd 346 led=0;
davidscque 0:0e43a69efacd 347 j=0;
davidscque 1:21d56f84fe51 348
davidscque 0:0e43a69efacd 349 }
davidscque 1:21d56f84fe51 350
davidscque 0:0e43a69efacd 351
davidscque 0:0e43a69efacd 352 }//end while
davidscque 1:21d56f84fe51 353 }//end main