Paso 1: Montar RFIDuino
UDPSendReceive.pde:
Este bosquejo recibe cadenas de mensajes UDP, imprime al puerto serie
y envía una cadena de "reconocer" de nuevo al remitente
Un esquema de procesamiento se incluye en el final del archivo que se puede utilizar para enviar
y mensajes recibidos para la prueba con un ordenador.
creado el 21 de agosto de 2010
por Michael Margolis
Este código es de dominio público.
*/
#include < SPI.h > / / necesario para las versiones de Arduino más adelante que 0018
#include < Ethernet.h >
#include < EthernetUdp.h > / / Biblioteca UDP: bjoern 30/12/2008
Introduzca una dirección de MAC y dirección IP para el controlador a continuación.
La dirección IP dependerá de tu red local:
mac de bytes [] = {0xDF, 0xAD, 0xCE, 0xEF, 0xFE, 0xWE};
byte ip [] = {0, 0, 0,};
Server(0,0,0,0) dirección IP;
Char [] serverName = "http://whatever.com";
int keepAlive = 0;
volátil reader1 largo = 0;
volátiles int reader1Count = 0;
unsigned int PuertoLocal = 70056; puerto local a escuchar el
char packetBuffer [UDP_TX_PACKET_MAX_SIZE]; buffer para paquetes entrantes,
Cliente EthernetClient;
EthernetUDP Udp;
void reader1One(void) {}
reader1Count ++;
reader1 = reader1 << 1;
reader1 | = 1;
}
void reader1Zero(void) {}
reader1Count ++;
reader1 = reader1 << 1;
}
void setup() {}
Ethernet.Begin(Mac,IP,DNS); / / iniciar el Ethernet
UDP.Begin(localPort); / / y UDP
Serial.Begin(9600);
pinMode (5, salida);
Acople pin cambio interrumpir rutinas de servicio de los lectores Wiegand RFID
attachInterrupt (0, reader1Zero, RISING); //DATA0 al pin 2
attachInterrupt 1, reader1One, RISING; Data1 a pin 3
Delay(10);
la interrupción de las mises de procesador Atmel hacia fuera la primera negitave de pulso como las entradas ya son altas,
así que esto da un pulso a cada línea de entrada del lector a las interrupciones de funcionamiento.
Luego limpiar las variables del lector.
Los lectores son de colector abierto sentado normalmente en uno así que esto es OK
para (int i = 2; i < 4; i ++) {}
pinMode (i, salida);
digitalWrite (i, alto); permiten tirar interno causando una
digitalWrite (i, LOW); desactivar la interna levantan causando cero y, por tanto, una interrupción
pinMode (, entrada);
digitalWrite (i, alto); permiten interno tire para arriba
}
Delay(10);
reader1 = 0;
reader1Count = 0;
}
void loop() {}
Si (reader1Count > = 26) {//If tarjeta es leída.
Serial.Print(reader1);
Client.Connect (servidor, 80); Conectar al servidor.
Client.Print ("GET rfiddoor/door.php?data="); Enviar datos de tarjeta.
Client.Print(reader1);
Client.println ("& puerta = 12door"); nombre de puerta de //Send.
{if(Client.Connected())}
Serial.Print ("enviando datos de la tarjeta ('');
Serial.Print(reader1); imprimir datos de la tarjeta a la salida serial.
Serial.println(") al servidor...");
} else {}
Serial.println ("no se puede conectar al servidor, reintentando...");
}
Client.STOP();
}
reader1 = 0;
reader1Count = 0;
Delay(100); Dar tiempo de arduino para recibir el paquete UDP.
packetSize int = Udp.parsePacket(); Paquete UDP de proceso.
if(packetSize) {//if UDP paquete es acto recibido, otra cosa mantener tarjeta datos y reenviar (empezar bucle conservando los datos de la tarjeta).
Serial.Print ("contenido del paquete:");
Dirección IP remoto = Udp.remoteIP();
UDP.Read (packetBuffer, UDP_TX_PACKET_MAX_SIZE); //Read paquetes en el buffer.
Serial.Print (packetBuffer) paquete UDP //Print;
Serial.Print ("tarjeta es");
Si (packetBuffer [0] == 'p' & & packetBuffer [1] == 'a' & & packetBuffer [2] == de ' & & packetBuffer [3] == de ' & & packetBuffer [4] == 'w' & & packetBuffer [5] == ' o ' & & packetBuffer [6] == 'r' & & packetBuffer [7] == había ') {//If UDP paquete contiene contraseña abierta, que permanecen cerrados
digitalWrite (5, HIGH); / / ### esto lee el buffer de paquetes. Si contiene el comando de"apertura" mantendrá la huelga ###
Serial.println("Approved"); / / ### abrir durante 5 segundos e imprimir hacia fuera que fue aprobada la tarjeta. Se detendrá el webclient ###
Client.STOP(); / / ### se restablecerá el lector. ###
reader1 = 0; / / ### si se recibe el "comando denegado" permanecerá bloqueado y mostrará que la tarjeta ###
reader1Count = 0; / / ### se negó. El webclient se detendrá y se restablecerá el lector. ###
delay(5000);// ### ###
digitalWrite (5, LOW); / / ### si un paquete no es recibido se mantenga los datos del lector y volverlo a enviar. ###
}else{// ###################################################################################################
Serial.println("denied");
Client.STOP();
reader1 = 0;
reader1Count = 0;
digitalWrite (5, bajo);
}
Serial.println("___");
}
}