hola explico un poco el proyecto para que se entienda.
estoy haciendo que una puerta se abra sola al poner una clave, cada persona tiene su clave y el propietario puede hacer que algunas personas no entren, también tiene pestillo eléctrico y todo lo de cerrar el pestillo bloquear a algunas personas abrir la puerta y cerrarla se controla con un mando.
la cosa es que ya tengo mucho echo y como no tengo experiencia programando, están en distintos códigos.
un código es la pantalla y el teclado,
otro es el sensor infrarrojo,
y el otro es el control de 2 motores .
dejo aquí los códigos:
PANTALLA Y TECLADO
#include <IRremote.h>
int RECV_PIN = 3;
//=======================================================
//= Librerías y variables globales del programa =
//=======================================================
#include <LiquidCrystal.h>
#include <Keypad.h>
#define TAM 4
//=============================
//= Configuración LCD =
//=============================
LiquidCrystal lcd(13,12,11,10,9,8);
//===========================================
//= Configuración teclado matricial =
//===========================================
const byte rows = 4;
const byte cols = 4;
char keys[rows][cols] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[rows] = {14,15,16,17};
byte colPins[cols] = {18,19,20,21 };
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, rows, cols );
//==============================
//= Variables globales =
//==============================
//Variable para guardar cada uno de los dígitos ingresados por el teclado matricial
int digito = 0;
//Arreglo para guardar la clave ingresada
int claveIngresada[TAM] = {0};
//Nombres de los usuarios registrados
const char* ptrNombres[TAM] = {"Mario", "Carlota", "David", "Jessica"};
//Claves de los usuarios registrados
int listaClaves[TAM][TAM]={{9,1,0,2},{5,7,9,0},{5,2,2,5},{0,1,1,4}};
//Saldos de cada uno de los usuarios registrados
// Variable para contar el número de dígitos ingresados
int cont = 0;
//===================================
//= Prototipos de funciones =
//===================================
int comparaClave( int *ptrClave, int ptrListaClaves[][4] );
//===============================================
//= Inicio de programa, configuraciones =
//===============================================
void setup() {
Serial.begin(9600);
//Indica al programa la cantidad de filas y columnas que se usarán en el LCD
lcd.begin(16, 2);
//Establece el cursor del LCD en la primera línea y primera columna
lcd.setCursor(0, 0);
//Se imprime un mensaje para solicitar la clave por parte del usuario
lcd.print("Ingrese la clave");
}
//==========================================
//= Funcionalidad de la aplicación =
//==========================================
void loop() {
//Establece el cursor del LCD en la segunda línea
lcd.setCursor(0, 1);
//Se lee el dígito ingresado en el teclado matricial
digito = keypad.waitForKey();
//Se identifica si el caracter ingresado es el '*' para limpiar la segunda fila del LCD
//y luego situar el cursor en la primera columna de la segunda fila
if ( digito == '*'){
lcd.print(" ");
lcd.setCursor(0, 1);
cont = 0;
}
//Cuando se ingresa un digito, se resta 48 (ver código ASCII) y se almacena cada uno de estos en
//el arreglo claveIngresada para comparar la clave con el arreglo de claves registrado.
else{
digito -= 48;
claveIngresada[cont] = digito;
cont++;
if( cont == 4 ){
int registro = comparaClave(claveIngresada,listaClaves);
if (registro != -1) {
lcd.print(ptrNombres[registro]);
lcd.print("<==");
}
else {
lcd.print("No existente");
}
cont = 0;
delay(4000);
lcd.setCursor(0, 1);
lcd.print(" ");
}
delay(100);
}
}
int comparaClave(int* ptrClave,int ptrListaClaves[][4]){
for (int registro = 0; registro < TAM; ++registro) {
for (int digito = 0; digito < TAM; ++digito) {
if (ptrClave[digito] != ptrListaClaves[registro][digito]){
break;
}
if (digito == TAM - 1) return registro;
}
}
return -1;
}
SENSOR INFRAROJOS
const int motorpestillo = 7;
const int motorpuerta = 6;
//Library
#include "IRremote.h"
//Variable
int receiverPin = 3;
IRrecv irrecv(receiverPin);
decode_results results;
void setup(){
Serial.begin(9600);
Serial.println(F("IR Receiver Decoder"));
irrecv.enableIRIn(); // Start the receiver
pinMode(motorpestillo , OUTPUT);
pinMode(motorpuerta , OUTPUT);
}
void loop() {
if (irrecv.decode(&results)){ // IR signal received?
convertIR();
irrecv.resume(); // receive the next value
}
}
void convertIR() // convert IR code
{
Serial.print(results.value);
Serial.print(F(" -> "));
switch(results.value)
{
case 0xFFA25D: Serial.println(F("POWER")); break;
case 0xFFE21D: Serial.println(F("FUNC/STOP")); break;
case 0xFF629D: Serial.println(F("VOL+")); break;
case 0xFF22DD:
Serial.println(F("FAST BACK"));
digitalWrite(motorpestillo , LOW);
break;
case 0xFF02FD: Serial.println(F("PAUSE")); break;
case 0xFFC23D:
Serial.println(F("FAST FORWARD"));
digitalWrite(motorpestillo , HIGH);
break;
case 0xFFE01F:
Serial.println(F("DOWN"));
digitalWrite(motorpuerta , LOW);
break;
case 0xFFA857: Serial.println(F("VOL-")); break;
case 0xFF906F:
Serial.println(F("UP"));
digitalWrite(motorpuerta , HIGH);
break;
case 0xFF9867: Serial.println(F("EQ")); break;
case 0xFFB04F: Serial.println(F("ST/REPT")); break;
case 0xFF6897: Serial.println(F("0")); break;
case 0xFF30CF: Serial.println(F("1")); break;
case 0xFF18E7: Serial.println(F("2")); break;
case 0xFF7A85: Serial.println(F("3")); break;
case 0xFF10EF: Serial.println(F("4")); break;
case 0xFF38C7: Serial.println(F("5")); break;
case 0xFF5AA5: Serial.println(F("6")); break;
case 0xFF42BD: Serial.println(F("7")); break;
case 0xFF4AB5: Serial.println(F("8")); break;
case 0xFF52AD: Serial.println(F("9")); break;
case 0xFFFFFFFF: Serial.println(F(" REPEAT"));break;
default:
Serial.println(F(" unknown "));
}
delay(500);
}
MOTORES
const int leftForward = 4;
const int leftBackward = 5;
const int rightForward = 6;
const int rightBackward = 7;
void setup()
{
pinMode(leftForward , OUTPUT);
pinMode(leftBackward , OUTPUT);
pinMode(rightForward , OUTPUT);
pinMode(rightBackward , OUTPUT);
}
void loop()
{
//abrir puerta
digitalWrite(leftForward , HIGH);
digitalWrite(leftBackward , LOW);
delay(5000);
//cerrar puerta
digitalWrite(leftForward , LOW);
digitalWrite(leftBackward , HIGH);
delay(5000);
//poner pestillo
digitalWrite(rightForward , LOW);
digitalWrite(rightBackward , HIGH);
delay(5000);
//quitar pestillo
digitalWrite(rightForward , HIGH);
digitalWrite(rightBackward , LOW);
delay(5000);
}