Security Lock

You are currently viewing a revision titled "Security Lock Coding", saved on December 20, 2012 at 5:53 pm by Tim
Title
Security Lock Coding
Content
#include <Servo.h> //Getting the Servo library Servo myservo; //Initializing servo as myservo int code[] = {0, 0, 0, 0}; //This variable is where button presses are stored. //These variables initlaize pins (buttons and LEDs) int buttonOnePin = 12; int buttonTwoPin = 11; int buttonThreePin = 10; int buttonFourPin = 9; int redLedPin = 8; int greenLedPin = 7; //buttonPin stores the pin numbers in an array so it is easier to access int buttonPin[] = {12, 11, 10, 9}; //Initializing arrays (sets of variables) that store the states of the buttons int reading[] = {0,0,0, 0}; int buttonState[] = {0,0,0, 0}; int lastButtonState[] = {0,0,0,0}; //The number of butons used minus one (To identify the location of the button //being tested in an array, in which the first number is considered 0 not 1 so //the total numbers in an array is one less than the actual number of buttons. int numberButtons = 3; int numberButtonsPressed=0; //Stores the number of times the button has been pressed //An array that keeps track of the last time the pins were checked long lastDebounceTime[] = {0, 0, 0, 0}; long debounceDelay = 50; //Milliseconds the button must be held down to not be noise long resetDelay = 10000; //Sets the delay before resetting to 10 seconds long lastPressTime = 0; //Time since the button was last pressed //Stores whether or not each button has been pressed (true/false) boolean buttonPressed[]={0,0,0,0}; void setup() { //Initialize the buttons as inputs pinMode(buttonOnePin, INPUT); pinMode(buttonTwoPin, INPUT); pinMode(buttonThreePin, INPUT); pinMode(buttonFourPin, INPUT); //Sets the servo pin myservo.attach(6); //Initial the LEDs as outputs pinMode(redLedPin, OUTPUT); pinMode(greenLedPin, OUTPUT); } void loop() { //If no button has been pressed for more than resetDelay (10 seconds), //set the values in code[] to 0 if((millis()-lastPressTime) > resetDelay) { code[0] = code[1] = code[2] = 0; } //This for loop initializes the variable counter and runs through and then //increases counter. It keeps looping through (changing counter) until counter //is equal to numberButtons, with 4 buttons it is until counter is 3 for(int counter = 0; counter <= numberButtons; counter++) { long time = millis(); //Interal timer //Set the current reading of the button being tested to the //opposite of what is read on buttonPin (it seems to be reading //a non-pressed button as high and a pressed one as low, I'm not //sure why). reading[counter] = !digitalRead(buttonPin[counter]); //If the button has been pressed, makes sure it is not just //noise and if it's not noise then set the number in code to //the buttonpin of the pressed button. if (reading[counter] == HIGH) { lastPressTime=time; //Set the last time a button was pressed to the current time if((time-lastDebounceTime[counter]) > debounceDelay) { //makes sure it isnt noise. buttonPressed[counter]=true; //Set buttonPressed to true //While the buttonPressed is true, increase numberButtonsPressed //by one and then exit the loop. while(buttonPressed[counter]==true) { numberButtonsPressed++; break; } //If pressed, put the pin of the button being tested into the correct spot //in the array code. ie. If it is the first button pressed put it in the //first spot, the second goes in the secondspot, etc. code[(numberButtonsPressed-1)] = buttonPin[counter]; } //This delay makes it so you can press a button once and the button number will only //go into one spot in code[]. Changing the number of milliseconds here changes how //long you need to press the button for. delay(120); } else { //The button state is low, reset the lastDebounceTime lastDebounceTime[counter] = time; } } //If 4 buttons have been pressed, reset the number of buttons to 0 if(numberButtonsPressed >= 4) { numberButtonsPressed=0; } //Check if the code is what we want if((code[0] == 12) && (code[1] == 11) && (code[2] == 10) && (code[3] == 9)) { digitalWrite(greenLedPin, HIGH); //Turn green LED on digitalWrite(redLedPin, LOW); //Turn red LED off myservo.write(120); //Move the servo to 120 degrees (unlocked) } //If the code is not what we want else { digitalWrite(redLedPin, HIGH); //Turn red LED on digitalWrite(greenLedPin, LOW); //Turn green LED off myservo.write(140); //move the servo to 140 degrees (locked) } }
Excerpt
Footnotes


Old New Date Created Author Actions
December 20, 2012 at 10:53 pm Tim