Go Down

Topic: Ayuda para Proyecto Alarma Casera. (Read 11076 times) previous topic - next topic

Imagina

#45
Jun 01, 2012, 01:57 pm Last Edit: Jun 01, 2012, 02:02 pm by Imagina Reason: 1
Hola molloperfidia,

No tiene sentido que no realice esas línes. Si quieres asegurarte que lo realice siempre que sea un código correcto, prueba de la siguiente manera.


Code: [Select]
void loop() {
 if(Num_bit >= 26){                                         // Si se ha recibido un codigo completo...
   if (Cod_Bin != Ant_Cod_Bin)                             // Evita lecturas Repetitivas
     {
     if (Log_Correcto() || Ant_Cod_Bin==Master)            // Si es Correcto o (Master + Codigo Nuevo)
    {
        digitalWrite(relepin,HIGH);                                      // Activa el relé durante 0.2 segundos, seguidamente lo desactiva
        delay(200);
        digitalWrite(relepin,LOW);

       if (Cod_Bin==Master) Tiempo=millis() + 1200;                // Solo se dispone de este tiempo para Registrar / Eliminar a un Usuario (un Segundo + delay anterior)
       if (Ant_Cod_Bin==Master && Cod_Bin!=Master) Nuevo(); // Si Codigo Master + Otro Codigo --> Decide si Registrarlo o Eliminarlo...
    }
      else Serial.println("NO REGISTRADO");                 // Aquí lo que tenga que suceder si no se está registrado
     }  


Puedes quitarle el último delay que has puesto, y añadirle el tiempo del primer delay a "Tiempo", para que siga conservando el segundo que tienes para registrar o eliminar un código, puesto que esos 200 milisegundos el programa está parado, pero el reloj interno sigue sumando.


De todas formas piensa si en realidad quieres que se active el relé cuando das de alta o de baja un código nuevo, eso trasladado a una alarma quiere decir que cuando doy de alta a alguien se activa la alarma!!!  no parece tener mucho sentido. Personalmente pienso que si quieres Activar / Desactivar algo es una cosa, y si quiero dar de Alta / Baja un código es otra cosa muy distinta.

ah ok gracias mira lo que quiero hacer en realidad con el control de accesos es de la siguiente manera espero que me puedan ayudar ya que no se muy bien como hacerlo.

Es crear un menu en el puerto serie que me muestre los siguientes datos:
Code: [Select]

#include <EEPROM.h>
int i, a, b, tmp;
void setup()
{
  Serial.begin(9600);
  pinMode(11, OUTPUT);
}

void loop()
{
  Serial.println("1 = Registar Tarjeta");
  Serial.println("2 = Borrar Tarjeta");
  Serial.println("3 = Borrar Base de datos de la EEPROM");
  Serial.println("4 = Base de datos EEPROM");
  Serial.println("5 = Modo de Trabajo");
  do
  {
    delay(200);
  } while (Serial.available() <= 0);
  Serial.println();

  switch (Serial.read())
  {
    case '1':
      Registar Tarjeta();
      break;
    case '2':
      Borrar Tarjeta();
      break;
    case '3':
      EEPROM.write(0,0);
      Serial.println("Base de datos Borrada");
      break;
    case '4':
      Base de datos EEPROM();
      break;
    case '5':
      Modo de Trabajo();
      break;
    case '0':
      break;
    default:
      Serial.println("Entrada Desconocida");
  }
  Serial.println();
}


void  Registar Tarjeta()
{
  // Read a card
   Serial.print("Registering Card: ");
  Serial.println(rfid_data);
  // Check if it's in the database
      // REMOVE END
       Serial.println("100 tarjetas dadas de alta, Registro Fallido");
   
      Serial.println("La tarjeta existe en la base de datos");
     
  // Agregar a la base de datos

  Serial.println("Completado");

void Base de datos EEPROM()
{
  a = EEPROM.read(0);
  Serial.print("Tarjetas en Base de Datos: ");
  Serial.println(a);
  if (a == 0)
  {
    Serial.println("Base de Datos Vacia");
    return;
  }
 
  for (i = 0; i < a; i++)
  {
    Serial.print("Card ");
    Serial.print(i);
    Serial.print(": ");
    for (b = 1; b < 11; b++)
    {
      Serial.print(EEPROM.read((i*10)+b));
    }
    Serial.println();
  }
 
  return;
}

void Mode de Trabajo()
{
  //Lee Tarjeta
 
  Serial.println("Leyendo Tarjeta");
 
  Serial.print("Revisando Tarjeta: ");
    // Revisa si esta en la base de datos
  a = EEPROM.read(0);
  if (a == 0)
  {
    Serial.println("Access Denegado!");
   
      Serial.println("Access Satisfactorio!");
     
void Borrar Tarjeta()
{
  // Read a card

  Serial.print("Removing Card: ");
 
  // Check if it's in the database

    Serial.println("Not in Database");
   
        Serial.println("Card Removed Successfully!");
     
      Serial.println("Card Removed Successfully!");
     
  Serial.println("Card Not in Database");



Es lo que pretendo hacer pero no se muy bien como guardar los datos obtenidos del wiegand(Nota la lectoria RFID que tengo nada mas tiene salida a wiegand) y guardarlos en la eeprom del arduino para luego compararlos y en el modo activo si esta la tarjeta en la base de datos se active un rele que este conectado al sensor magnetico para abrir la puerta espero me puedan ayudar

Imagina

Te recomiendo que te dejes el menú casi hasta el final, primero tienes que entender muy bien como funciona el protocolo, despues como leer y guardar en la EEPROM, hazlo todo con ejemplo muy sencillos para comprenderlos línea por línea y una vez los comprendas hacer el menú que quieres será muy sencillo...

Al principio de este hilo tienes un codigo completo que con solo modificarle un valor ya puedes Autorizar o Desautorizar tus 100 tarjetas o llaveros, guardarlos en la EEPROM. Modificandolo un poco más podrías acceder al listado de todos los datos de la EEPROM, un pasito más y puedes borrar toda la EEPROM, a eso tan solo te falta ponerle tu menú y ya lo tendrías...

Pero vuelvo a lo que te he dicho al principio, lo mejor que puedes hacer es entenderlo todo con ejemplos muy sencillos, luego lo complicas hasta donde tu quieras...



P.D. no quiero desanimarte, pretendo todo lo contrario que preguntes mucho porque tengas dudas muy concretas que estoy segurisimo que uno u otro te las responderemos encantados.  ;)

Go Up