Paso 5: Boceto Final
Bueno, recuerdo cuando conectamos ID-12 pin 9 para el RX Arduno. Vamos a liberar el pin RX y trasladar esa conexión al pin digital 4. Eso es todo!
Ahora, tome su identificador único, de los dos últimos caracteres de la rebanada para que se queden con 10 caracteres. Por ejemplo, leo 2900940E9526 como mi identificador. Por lo tanto, voy a utilizar 2900940E95. 26 es el ID suma de comprobación. No te preocupes acerca de esto. Introduzca su identificador en el código de abajo donde dice [identificador Inserte aquí]. También puede agregar su nombre en la [agregar su nombre aquí].
--------------------------------------------------------------------------------------------------------------------------------
/**
* RFID Control de acceso
*
* Parte de este código se inspiró en tutorial RFID de Tom Igoe
De la el código de ejemplo de ID-12 en el patio de Arduino
* Y muy basado en el proyecto de Jonathan Oxer en:
* http://www.practicalarduino.com/projects/medium/rfid-access-control
*/
Configurar la conexión serial con el módulo lector RFID. A fin de
mantener los pines de Arduino TX y RX gratis para la comunicación con un host,
el dibujo utiliza la librería SoftwareSerial aplicar serial
comunicaciones en otros pernos.
#include
Pin de TX del módulo RFID debe conectarse a Arduino.
#define rxPin 4
#define txPin 5
Crear un objeto de serie de software para la conexión con el módulo RFID
SoftwareSerial rfid = SoftwareSerial (rxPin, txPin);
Establecer salidas
#define futureOutput 12
#define ledPin 13
Especificar cuánto tiempo se celebraría la salida.
#define unlockSeconds 2
La base de datos de etiquetas consta de dos partes. La primera parte es una matriz de
valores de etiqueta con cada etiqueta tomando 5 bytes. La segunda es una lista de
nombres con un nombre para cada etiqueta (es decir: Grupo de 5 bytes). Usted puede ampliar
o reducir esto como mejor parezca. Etiquetas 2 y 3 existen sólo por ejemplo.
char * allowedTags [] = {}
"[Inserte identificador aquí]", / / 1 de la etiqueta
"2900940E95", / / 2 de la etiqueta
"ABC123DE45", / / 3 de la etiqueta
};
Lista de nombres para asociar la etiqueta que empareja IDs
char * tagName [] = {}
«[Agrega aquí tu nombre]», / / 1 de la etiqueta
"Marca Trussell", / / 2 de la etiqueta
"Nombre 3", / / 3 de la etiqueta
};
Comprobar el número de etiquetas definidas
int numberOfTags = sizeof(allowedTags)/sizeof(allowedTags[0]);
int incomingByte = 0; Para almacenar los datos entrantes en serie
/**
* Configuración
*/
void setup() {}
pinMode (ledPin, salida);
digitalWrite (ledPin, LOW);
pinMode (futureOutput, salida);
digitalWrite (futureOutput, bajo);
Serial.Begin(9600); Puerto serial para la conexión al host
RFID.Begin(9600); Puerto serie para conexión a módulo RFID
Serial.println ("RFID lector inicializada");
}
/**
* Lazo
*/
void loop() {}
byte i = 0;
byte val = 0;
suma de bytes = 0;
bytesRead byte = 0;
byte tempByte = 0;
byte tagBytes [6]; Etiquetas "Únicos" son sólo 5 bytes pero necesitamos un byte adicional para la suma de comprobación
tagValue Char [10];
Leer desde el módulo RFID. Debido a esta conexión utiliza SoftwareSerial
no existe equivalente a la función Serial.available(), que en este
punto de los bloques de programa mientras se espera un valor del módulo de
Si ((val = rfid.read()) == 2) {/ / cheque de cabecera
bytesRead = 0;
mientras (bytesRead < 12) {/ / leer 10 dígitos + suma de 2 dígitos
Val = rfid.read();
Añadir los primeros 10 bytes (de 0 a 9) el valor crudo de etiqueta
Si (bytesRead < 10)
{
tagValue [bytesRead] = val;
}
Compruebe si se trata de un byte de cabecera o parada antes de completar los 10 dígitos de lectura
Si ((val == 0x0D) || (val == 0x0A) || (val == 0 x 03) || (Val == 0x02)) {
rotura; Dejar de leer
}
Conversión de ASCII/Hex:
Si ((val > = '0') & & (val < = '9')) {}
Val = val - '0';
}
else if ((val > = 'A') & & (val < = 'F')) {}
Val = 10 + val - 'A';
}
Cada dos dígitos hex, añadir un byte para el código:
Si (bytesRead & 1 == 1) {}
Hacer espacio para este dígito hexadecimal cambiando el dígito anterior 4 bits a la izquierda
tagBytes [bytesRead >> 1] = (val | (tempByte << 4));
Si (bytesRead >> 1! = 5) {/ / si estamos en el byte de suma de comprobación,
suma de comprobación ^ = tagBytes [bytesRead >> 1]; Calcular la suma de comprobación... (XOR)
};
} else {}
tempByte = val; Guarde primero el primer dígito hexadecimal
};
bytesRead ++; Listo para leer el siguiente dígito
}
Envía el resultado al host conectado vía USB
Si (bytesRead == 12) {/ / 12 dígitos leer completo
tagValue [10] = '\0'; Null-poner fin a la cadena
Serial.Print ("etiqueta que lea:");
para (i = 0; i < 5; i ++) {}
Agregar un 0 inicial a valores por debajo de 16
Si (tagBytes [i] < 16) {}
Serial.Print("0");
}
Serial.Print (tagBytes [i], hexagonal);
}
Serial.println();
Serial.Print ("suma:");
Serial.Print (tagBytes [5], hexagonal);
¿Serial.println (tagBytes [5] == checksum? "--pasado.": "--error.");
Mostrar el valor de etiqueta raw
Serial.Print ("valor:");
Serial.println(tagValue);
La base de datos de etiqueta de esta etiqueta especial de búsqueda
tagId int = findTag (tagValue);
Sólo el fuego la placa de la huelga si esta etiqueta se encuentra en la base de datos
Si (tagId > 0)
{
Serial.Print ("autorizado tag ID");
Serial.Print(tagId);
Serial.Print (": desbloqueo para");
Serial.println (tagName [tagId - 1]); Obtener el nombre de esta etiqueta de la base de datos
Unlock(); Fuego la placa de la huelga para abrir la cerradura
} else {}
Serial.println ("etiqueta no autorizada");
}
Serial.println(); Línea de separación en blanco en la salida
}
bytesRead = 0;
}
}
/**
* El relé para activar la placa de la huelga para la configuración del fuego
* número de segundos.
*/
{} void unlock()
digitalWrite (ledPin, HIGH);
digitalWrite (futureOutput, HIGH);
Delay(unlockSeconds * 1000);
digitalWrite (futureOutput, bajo);
digitalWrite (ledPin, LOW);
}
/**
* Buscar una etiqueta específica en la base de datos
*/
int findTag (char tagValue [10]) {}
para (int thisCard = 0; thisCard < numberOfTags; thisCard ++) {}
Compruebe si el valor de la etiqueta corresponde a esta fila en la base de datos de la etiqueta
Si (strcmp (tagValue, allowedTags[thisCard]) == 0)
{
La fila en la base de datos comienza en 0, así que añadir 1 al resultado así
que el ID de la tarjeta comienza desde 1 en lugar de otro (0 representa "ninguna coincidencia")
volver (thisCard + 1);
}
}
Si no encontramos la etiqueta de devolución un tag ID de 0 para mostrar que no fue rival
Return(0);
}
--------------------------------------------------------------------------------------------------------------------------------