hola, con mi hijo estamos aprendiendo a programar con arduino.
estamos en una parte muy basica. pero nos topamos con una alarma, que ahora a mi me intereso, pero no le encuentro la vuelta.
lo que quiero lograr es esto:
que cuando se active, me de la opcion de desarmarla, sin necesidad de esperar a que suene por intrusion.
otra, muy relacionada, que cuando por ejemplo, vuelvo a mi casa, y la alarma me detecte, me de un tiempo para ingresar la clave y desarmarla.
se que es una pavada, pero no le encuentro la vuelta.
estoy usando un display 16x2 I2C, y un teclado matrical 4x4.
aca dejo el codigo. espero darme a entender.
#include <LiquidCrystal_I2C.h> // includes the LiquidCrystal Library
#include <Keypad.h>
#include <Wire.h>
#define sensorA 11
#define buzzer1 A0
#define rele A1
int sensorReed_alarma = 10;
int screenOffMsg =0;
String password="1234";
String tempPassword;
boolean activated = false; // State of the alarm
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword; // State of the entered password to stop the alarm
boolean passChangeMode = false;
boolean passChanged = false;
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
byte rowPins[ROWS] = {9, 8, 7, 6}; //Row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //Column pinouts of the keypad
char keypressed;
//define the cymbols on the buttons of the keypads
char keyMap[ROWS][COLS] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x03f, 16, 2); // Creates an LC object.
void setup() {
lcd.begin();
pinMode(buzzer1, OUTPUT); // define A0, buzzer1 como una salida
pinMode(rele, OUTPUT); // Sets the rele as an Output (A1)
pinMode(sensorReed_alarma, INPUT); // Sets the sensorReed_alarma as an Input ( pin 11)
}
void loop() {
if (activateAlarm) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("A");lcd.print("c");lcd.print("t");lcd.print("i");lcd.print("v");lcd.print("a");lcd.print("n");lcd.print("d");lcd.print("o");lcd.print(" ");lcd.print("a");lcd.print("l");lcd.print("a");lcd.print("r");lcd.print("m");lcd.print("a");
lcd.setCursor(0,1);
tone(buzzer1, 2000, 100);
lcd.print(" ");lcd.print("A");lcd.print("c");lcd.print("t");lcd.print("i");lcd.print("v");lcd.print("a");lcd.print("d");lcd.print("a");lcd.print(" ");lcd.print("e");lcd.print("n");lcd.print(":");
tone(buzzer1, 2000, 100);
int countdown = 3; // espera 6 segundos para activar alarma.
while (countdown != 0) {
lcd.setCursor(13,1);
lcd.print(countdown);
countdown--;
tone(buzzer1, 1000, 200);
delay(1000);
}
lcd.clear(); // alarma armada
lcd.print(" ");lcd.print(" ");lcd.print(" ");lcd.print(" ");lcd.print(" ");lcd.print("A");lcd.print("l");lcd.print("a");lcd.print("r");lcd.print("m");lcd.print("a");
lcd.setCursor(2,1);
lcd.print("*");lcd.print("*");lcd.print("*");lcd.print("A");lcd.print("r");lcd.print("m");lcd.print("a");lcd.print("d");lcd.print("a");lcd.print("*");lcd.print("*");lcd.print("*");
activateAlarm = false;
alarmActivated = true;
}
if (alarmActivated == true){
if(digitalRead(sensorA) == HIGH){
lcd.clear();
lcd.print("!");lcd.print("!");lcd.print("!");lcd.print("I");lcd.print("N");lcd.print("T");lcd.print("R");lcd.print("U");lcd.print("S");lcd.print("I");lcd.print("O");lcd.print("N");lcd.print("!");lcd.print("!");lcd.print("!");
enterPassword();
tone(buzzer1, 800, 500);
lcd.clear();
}
}
if (!alarmActivated) {
if (screenOffMsg == 0 ){
lcd.clear();
digitalWrite(rele, HIGH);
lcd.setCursor(0,0);
lcd.print("A");lcd.print("");lcd.print("-");lcd.print("a");lcd.print("c");lcd.print("t");lcd.print("i");lcd.print("v");lcd.print("a");lcd.print("r");
lcd.setCursor(0,1);
lcd.print("B");lcd.print("");lcd.print("-");lcd.print("c");lcd.print("a");lcd.print("m");lcd.print("b");lcd.print("i");lcd.print("a");lcd.print("r");lcd.print(" ");lcd.print("c");lcd.print("l");lcd.print("a");lcd.print("v");lcd.print("e");
screenOffMsg = 1;
}
keypressed = myKeypad.getKey() ;
if (keypressed =='A'){ //If A is pressed, activate the alarm
tone(buzzer1, 1000, 200);
activateAlarm = true;
}
else if (keypressed =='B') { // cambio de clave
lcd.clear();
int i=1;
tone(buzzer1, 2000, 100);
tempPassword = "";
lcd.setCursor(0,0);
lcd.print("c");lcd.print("l");lcd.print("a");lcd.print("v");lcd.print("e");lcd.print(" ");lcd.print("a");lcd.print("c");lcd.print("t");lcd.print("u");lcd.print("a");lcd.print("l");lcd.print(":");
lcd.setCursor(0,1);
lcd.print(">");
passChangeMode = true;
passChanged = true;
while(passChanged) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY){
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
keypressed == '8' || keypressed == '9' ) {
tempPassword += keypressed;
lcd.setCursor(i,1);
lcd.print("*");
i++;
tone(buzzer1, 2000, 100);
}
}
if ( keypressed == '*') { // cuando se ingresa nueva clave
i=1;
tone(buzzer1, 2000, 100);
if (password == tempPassword) {
tempPassword="";
lcd.clear();
lcd.setCursor(0,0);
lcd.print("n");lcd.print("u");lcd.print("e");lcd.print("v");lcd.print("a");lcd.print(" ");lcd.print("c");lcd.print("l");lcd.print("a");lcd.print("v");lcd.print("e");lcd.print("?");lcd.print("?");
lcd.setCursor(0,1);
lcd.print(">");
while(passChangeMode) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY){
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
keypressed == '8' || keypressed == '9' ) {
tempPassword += keypressed;
lcd.setCursor(i,1);
lcd.print("*");
i++;
tone(buzzer1, 2000, 100);
}
}
if ( keypressed == '*') {
i=1;
tone(buzzer1, 2000, 100);
password = tempPassword;
passChangeMode = false;
passChanged = false;
screenOffMsg = 0;
}
}
}
}
}
}
}
}
void enterPassword() {
int k=5;
tempPassword = "";
activated = true;
lcd.clear();
lcd.setCursor(2,0);
lcd.print("*");lcd.print("*");lcd.print("*");lcd.print("A");lcd.print("L");lcd.print("A");lcd.print("R");lcd.print("M");lcd.print("A");lcd.print("*");lcd.print("*");lcd.print("*");
lcd.setCursor(0,1);
delay(3000);
digitalWrite(rele, LOW); // Send 1KHz sound signal
lcd.print("w");lcd.print("a");lcd.print("s");lcd.print("s");lcd.print(">");
while(activated) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY){
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
keypressed == '8' || keypressed == '9' ) {
tempPassword += keypressed;
lcd.setCursor(k,1);
lcd.print("*");
k++;
}
}
if (k > 9 || keypressed == '#') {
tempPassword = "";
k=5;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("*");lcd.print("*");lcd.print("*");lcd.print("A");lcd.print("L");lcd.print("A");lcd.print("R");lcd.print("M");lcd.print("A");lcd.print("*");lcd.print("*");lcd.print("*");
lcd.setCursor(0,1);
lcd.print("P");lcd.print("a");lcd.print("s");lcd.print("s");lcd.print(">");
}
if ( keypressed == '*') {
if ( tempPassword == password ) {
activated = false;
alarmActivated = false;
noTone(buzzer1);
screenOffMsg = 0;
}
else if (tempPassword != password) {
lcd.setCursor(0,1);
lcd.print("i");lcd.print("n");lcd.print("c");lcd.print("o");lcd.print("r");lcd.print("e");lcd.print("c");lcd.print("o");lcd.print(" ");lcd.print("r");lcd.print("e");lcd.print("i");lcd.print("n");lcd.print("g");lcd.print("r");lcd.print("e");lcd.print("s");lcd.print("e");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("*** ALARM ***");
lcd.setCursor(0,1);
lcd.print("P");lcd.print("a");lcd.print("s");lcd.print("s");lcd.print(">");
}
}
}
}
estamos en una parte muy basica. pero nos topamos con una alarma, que ahora a mi me intereso, pero no le encuentro la vuelta.
lo que quiero lograr es esto:
que cuando se active, me de la opcion de desarmarla, sin necesidad de esperar a que suene por intrusion.
otra, muy relacionada, que cuando por ejemplo, vuelvo a mi casa, y la alarma me detecte, me de un tiempo para ingresar la clave y desarmarla.
se que es una pavada, pero no le encuentro la vuelta.
estoy usando un display 16x2 I2C, y un teclado matrical 4x4.
aca dejo el codigo. espero darme a entender.
#include <LiquidCrystal_I2C.h> // includes the LiquidCrystal Library
#include <Keypad.h>
#include <Wire.h>
#define sensorA 11
#define buzzer1 A0
#define rele A1
int sensorReed_alarma = 10;
int screenOffMsg =0;
String password="1234";
String tempPassword;
boolean activated = false; // State of the alarm
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword; // State of the entered password to stop the alarm
boolean passChangeMode = false;
boolean passChanged = false;
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
byte rowPins[ROWS] = {9, 8, 7, 6}; //Row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //Column pinouts of the keypad
char keypressed;
//define the cymbols on the buttons of the keypads
char keyMap[ROWS][COLS] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x03f, 16, 2); // Creates an LC object.
void setup() {
lcd.begin();
pinMode(buzzer1, OUTPUT); // define A0, buzzer1 como una salida
pinMode(rele, OUTPUT); // Sets the rele as an Output (A1)
pinMode(sensorReed_alarma, INPUT); // Sets the sensorReed_alarma as an Input ( pin 11)
}
void loop() {
if (activateAlarm) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("A");lcd.print("c");lcd.print("t");lcd.print("i");lcd.print("v");lcd.print("a");lcd.print("n");lcd.print("d");lcd.print("o");lcd.print(" ");lcd.print("a");lcd.print("l");lcd.print("a");lcd.print("r");lcd.print("m");lcd.print("a");
lcd.setCursor(0,1);
tone(buzzer1, 2000, 100);
lcd.print(" ");lcd.print("A");lcd.print("c");lcd.print("t");lcd.print("i");lcd.print("v");lcd.print("a");lcd.print("d");lcd.print("a");lcd.print(" ");lcd.print("e");lcd.print("n");lcd.print(":");
tone(buzzer1, 2000, 100);
int countdown = 3; // espera 6 segundos para activar alarma.
while (countdown != 0) {
lcd.setCursor(13,1);
lcd.print(countdown);
countdown--;
tone(buzzer1, 1000, 200);
delay(1000);
}
lcd.clear(); // alarma armada
lcd.print(" ");lcd.print(" ");lcd.print(" ");lcd.print(" ");lcd.print(" ");lcd.print("A");lcd.print("l");lcd.print("a");lcd.print("r");lcd.print("m");lcd.print("a");
lcd.setCursor(2,1);
lcd.print("*");lcd.print("*");lcd.print("*");lcd.print("A");lcd.print("r");lcd.print("m");lcd.print("a");lcd.print("d");lcd.print("a");lcd.print("*");lcd.print("*");lcd.print("*");
activateAlarm = false;
alarmActivated = true;
}
if (alarmActivated == true){
if(digitalRead(sensorA) == HIGH){
lcd.clear();
lcd.print("!");lcd.print("!");lcd.print("!");lcd.print("I");lcd.print("N");lcd.print("T");lcd.print("R");lcd.print("U");lcd.print("S");lcd.print("I");lcd.print("O");lcd.print("N");lcd.print("!");lcd.print("!");lcd.print("!");
enterPassword();
tone(buzzer1, 800, 500);
lcd.clear();
}
}
if (!alarmActivated) {
if (screenOffMsg == 0 ){
lcd.clear();
digitalWrite(rele, HIGH);
lcd.setCursor(0,0);
lcd.print("A");lcd.print("");lcd.print("-");lcd.print("a");lcd.print("c");lcd.print("t");lcd.print("i");lcd.print("v");lcd.print("a");lcd.print("r");
lcd.setCursor(0,1);
lcd.print("B");lcd.print("");lcd.print("-");lcd.print("c");lcd.print("a");lcd.print("m");lcd.print("b");lcd.print("i");lcd.print("a");lcd.print("r");lcd.print(" ");lcd.print("c");lcd.print("l");lcd.print("a");lcd.print("v");lcd.print("e");
screenOffMsg = 1;
}
keypressed = myKeypad.getKey() ;
if (keypressed =='A'){ //If A is pressed, activate the alarm
tone(buzzer1, 1000, 200);
activateAlarm = true;
}
else if (keypressed =='B') { // cambio de clave
lcd.clear();
int i=1;
tone(buzzer1, 2000, 100);
tempPassword = "";
lcd.setCursor(0,0);
lcd.print("c");lcd.print("l");lcd.print("a");lcd.print("v");lcd.print("e");lcd.print(" ");lcd.print("a");lcd.print("c");lcd.print("t");lcd.print("u");lcd.print("a");lcd.print("l");lcd.print(":");
lcd.setCursor(0,1);
lcd.print(">");
passChangeMode = true;
passChanged = true;
while(passChanged) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY){
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
keypressed == '8' || keypressed == '9' ) {
tempPassword += keypressed;
lcd.setCursor(i,1);
lcd.print("*");
i++;
tone(buzzer1, 2000, 100);
}
}
if ( keypressed == '*') { // cuando se ingresa nueva clave
i=1;
tone(buzzer1, 2000, 100);
if (password == tempPassword) {
tempPassword="";
lcd.clear();
lcd.setCursor(0,0);
lcd.print("n");lcd.print("u");lcd.print("e");lcd.print("v");lcd.print("a");lcd.print(" ");lcd.print("c");lcd.print("l");lcd.print("a");lcd.print("v");lcd.print("e");lcd.print("?");lcd.print("?");
lcd.setCursor(0,1);
lcd.print(">");
while(passChangeMode) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY){
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
keypressed == '8' || keypressed == '9' ) {
tempPassword += keypressed;
lcd.setCursor(i,1);
lcd.print("*");
i++;
tone(buzzer1, 2000, 100);
}
}
if ( keypressed == '*') {
i=1;
tone(buzzer1, 2000, 100);
password = tempPassword;
passChangeMode = false;
passChanged = false;
screenOffMsg = 0;
}
}
}
}
}
}
}
}
void enterPassword() {
int k=5;
tempPassword = "";
activated = true;
lcd.clear();
lcd.setCursor(2,0);
lcd.print("*");lcd.print("*");lcd.print("*");lcd.print("A");lcd.print("L");lcd.print("A");lcd.print("R");lcd.print("M");lcd.print("A");lcd.print("*");lcd.print("*");lcd.print("*");
lcd.setCursor(0,1);
delay(3000);
digitalWrite(rele, LOW); // Send 1KHz sound signal
lcd.print("w");lcd.print("a");lcd.print("s");lcd.print("s");lcd.print(">");
while(activated) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY){
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
keypressed == '8' || keypressed == '9' ) {
tempPassword += keypressed;
lcd.setCursor(k,1);
lcd.print("*");
k++;
}
}
if (k > 9 || keypressed == '#') {
tempPassword = "";
k=5;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("*");lcd.print("*");lcd.print("*");lcd.print("A");lcd.print("L");lcd.print("A");lcd.print("R");lcd.print("M");lcd.print("A");lcd.print("*");lcd.print("*");lcd.print("*");
lcd.setCursor(0,1);
lcd.print("P");lcd.print("a");lcd.print("s");lcd.print("s");lcd.print(">");
}
if ( keypressed == '*') {
if ( tempPassword == password ) {
activated = false;
alarmActivated = false;
noTone(buzzer1);
screenOffMsg = 0;
}
else if (tempPassword != password) {
lcd.setCursor(0,1);
lcd.print("i");lcd.print("n");lcd.print("c");lcd.print("o");lcd.print("r");lcd.print("e");lcd.print("c");lcd.print("o");lcd.print(" ");lcd.print("r");lcd.print("e");lcd.print("i");lcd.print("n");lcd.print("g");lcd.print("r");lcd.print("e");lcd.print("s");lcd.print("e");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("*** ALARM ***");
lcd.setCursor(0,1);
lcd.print("P");lcd.print("a");lcd.print("s");lcd.print("s");lcd.print(">");
}
}
}
}