Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SoftwareSerial.h>
- #include <SPI.h>
- #include <Ethernet.h>
- #include <EthernetUdp.h>
- #include <RDM6300.h>
- //MAC Address da placa, configurável
- //DE-AD-BE-EF-FE-ED
- byte mac[] = {0xAF, 0xBE, 0xCD, 0xDC, 0xEB, 0xFA};
- //Setando IP da shield
- IPAddress ip_placa(192, 168, 0, 185);
- //IP do servidor 1
- IPAddress ip_server1(192, 168, 0 ,10);
- //IP do servidor 2
- IPAddress ip_server2(192, 168, 0, 11);
- //Protocolo UDP para enviar
- EthernetUDP Udp;
- //LEITURA DO RFID
- SoftwareSerial mySerial(68, 69);
- /***********************************/
- uint8_t Payload[6]; //used for read comparisons
- RDM6300 RDM6300(Payload);
- /***********************************/
- #define _p1 22
- #define _p2 23
- #define _solenoide 31
- //controle da solenoide
- unsigned long _ultimaAcionamento_p1 = 0;
- unsigned long _ultimaAcionamento_p2 = 0;
- //ultima leitura do cartao
- unsigned long _ultimaLeitura = 0;
- //quem fez o acionamento da botoeira
- int _portariaQueAcionou = 0;
- void setup()
- {
- Ethernet.begin(mac,ip_placa);
- Udp.begin(7776);
- mySerial.begin(9600);
- mySerial.setTimeout(100);
- //monitor
- Serial.begin(9600);
- //Ativar o pino 4, isso ajuda a gerenciar a fila de pacotes UDP
- pinMode(4,OUTPUT);
- digitalWrite(4,HIGH);
- pinMode(_p1,INPUT);
- pinMode(_p2,INPUT);
- pinMode(_solenoide,OUTPUT);
- }
- void loop()
- {
- /***************************************
- * LIBERA A SOLENOIDE
- */
- if((digitalRead(_p1) == HIGH) && ((millis() - _ultimaAcionamento_p1) > 2000))
- {
- //ACIONA A SOLENOIDE PARA LIBERAR O CARTAO
- Solenoide();
- //CONTROLA O TEMPO EM QUE SERÁ ACIONADA A SOLENOIDE
- _ultimaAcionamento_p1 = millis();
- //GRAVA A ULTIMA VEZ QUE TEVE LEITURA
- _ultimaLeitura = millis();
- //INDICA QUE ACIONOU, PORTARIA 1 OU 2
- _portariaQueAcionou = 1;
- //EXIBE MENSAGEM
- Serial.println("Acionado p1");
- }
- if((digitalRead(_p2) == HIGH) && ((millis() - _ultimaAcionamento_p2) > 3000))
- {
- //ACIONA A SOLENOIDE PARA LIBERAR O CARTAO
- Solenoide();
- //CONTROLA O TEMPO EM QUE SERÁ ACIONADA A SOLENOIDE
- _ultimaAcionamento_p2 = millis();
- //GRAVA A ULTIMA VEZ QUE TEVE LEITURA
- _ultimaLeitura = millis();
- //INDICA QUE ACIONOU, PORTARIA 1 OU 2
- _portariaQueAcionou = 2;
- //EXIBE MSG
- Serial.println("Acionado p2");
- }
- /*****************************************
- * ATÉ AQUI
- */
- /*****************************************
- * FAZ A LEITURA DO CARTÃO DEPOIS DE 600 MS, CONTANTO DEPOIS QUE FOI ACIONADA A BOTOEIRA
- */
- if((_portariaQueAcionou == 1) && ((millis() - _ultimaLeitura) > 600))
- {
- _portariaQueAcionou = 0;
- //LE O CARTAO
- String _cartao = LeCartao();
- if(_cartao == "")
- {
- Serial.println("---------");
- }
- else
- {
- Serial.println(_cartao);
- }
- EnviaCartao(ip_server1,_cartao);
- }
- if((_portariaQueAcionou == 2) && ((millis() - _ultimaLeitura) > 600))
- {
- _portariaQueAcionou = 0;
- String _cartao = LeCartao();
- if(_cartao == "")
- {
- Serial.println("---------");
- }
- else
- {
- Serial.println(_cartao);
- }
- EnviaCartao(ip_server2,_cartao);
- }
- /*****************************************
- * ATÉ AQUI
- */
- }
- void Solenoide()
- {
- digitalWrite(_solenoide,HIGH);
- delay(100);
- digitalWrite(_solenoide,LOW);
- }
- String LeCartao()
- {
- String _cartao;
- String _cartaoChar;
- while (mySerial.available() > 0)
- {
- uint8_t c = mySerial.read();
- if (RDM6300.decode(c))
- {
- for (int i = 0; i < 7; i++)
- {
- _cartao += String(Payload[i], HEX);
- }
- }
- }
- return _cartao;
- }
- void EnviaCartao(IPAddress _ipServidor, String _cartao)
- {
- if(_cartao != "")
- {
- Udp.beginPacket(_ipServidor,12345);
- Udp.print(_cartao);
- Udp.endPacket();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement