Hallo,
Ich sitze hier bei einem Freund über einem Ardunio Projekt Zahleschloss für eine Türöffnung.
Es funktioniert alles einwandfrei so wie es soll. Wir möchten nun aber ein weiteren Taster als Notöffnung einbinden.
#include <Password.h> //http://playground.arduino.cc/uploads/Code/Password.zip //tells to use password library
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip //tells to use keypad library
Password password = Password( "123" ); //password to unlock, can be changed
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {5, 6, 7, 8};
byte colPins[COLS] = {2, 3, 4};
// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
Serial.write(254);
Serial.write(0x01);
delay(100);
pinMode(11, OUTPUT); //green light
pinMode(12, OUTPUT); //red light
pinMode(52, OUTPUT); //Test
pinMode(22, INPUT); //rot
keypad.addEventListener(keypadEvent); //add an event listener for this keypad
}
void loop()
{
keypad.getKey();
}
//take care of some special events
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
Serial.print("Enter:");
Serial.println(eKey);
delay(10);
Serial.write(254);
switch (eKey){
case '#': checkPassword(); delay(1); break; //Ziffer 5 beendet Code
case '0': password.reset(); delay(1); break; //Ziffer sperrt Code und muss als erste Ziffer genutzt werden
default: password.append(eKey); delay(1);
}
}
}
void checkPassword(){
if (password.evaluate()){ //if password is right open
Serial.println("Accepted");
Serial.write(254);delay(10);
//Add code to run if it works
digitalWrite(52, HIGH);
digitalWrite(11, HIGH);
delay(1000);
digitalWrite(11, LOW);
delay(200);
digitalWrite(11, HIGH);
delay(1000);
digitalWrite(11, LOW);
delay(200);
digitalWrite(11, HIGH);
delay(1000);
digitalWrite(11, LOW);
delay(200);
digitalWrite(11, HIGH);
delay(1000);
digitalWrite(11, LOW);
delay(200);
digitalWrite(11, HIGH);
delay(10000);
digitalWrite(12, HIGH);
}
else
{
Serial.println("Denied"); //if passwords wrong keep locked
Serial.write(254);delay(10);
//add code to run if it did not work
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(100);
}
}
Der Taster ist an Pin 22 angeschlossen und soll wenn er gedrückt wird Pin 52 auslösen. Das ganze oben wurde dafür mit diesem Programmcode ergänzt:
am anfang nach Aufruf der Libarys:
int taster=22;
int tasterstatus=0;
und am Ende des ganzen Codes:
tasterstatus=digitalRead(taster);
if (tasterstatus == HIGH)
{
digitalWrite(52, HIGH);
delay (1000);
digitalWrite(52, LOW);
delay (1000);
Aber der Taster reagiert nicht. Woran könnte das liegen?
Grüße hugoLOST