Здравствуйте. Помогайте)
Спойлер
#include <SPI.h>
#include <Ethernet.h>
#include <avr/wdt.h>
#include <Wiegand.h>
//Отладка
#define DEBUG
#ifdef DEBUG
#define DEBUG
#define SERIAL_BEGIN Serial.begin(19200)
#define DEBUG_PRINT(x) Serial.print(x)
#define DEBUG_PRINTLN(x) Serial.println(x)
#else
#define DEBUG_PRINT(x)
#define DEBUG_PRINTLN(x)
#define SERIAL_BEGIN
#endif
//Отладка
WIEGAND wg;
uint32_t numcard = 0;
#include "W5500.h"
void setup() {
wdt_disable();
Ethernet.begin(mac, ip, dns, gateway, subnet);
delay(1000);
wg.begin();
SERIAL_BEGIN;
DEBUG_PRINTLN("Start");
wdt_enable(WDTO_8S);
}
void loop() {
wdt_reset();
w5500_read();
if (wg.available()) {
numcard = wg.getCode();
Serial.println(numcard);
if (numcard > 0) http_request_get();
}
}
W5500.h
//#include "W5500.h"
const uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
const uint8_t ip[] = { 192, 168, 0, 105 };
const uint8_t gateway[] = { 192, 168, 0, 1 };
const uint8_t subnet[] = { 255, 255, 255, 0 };
const uint8_t dns[] = { 192, 168, 0, 1 };
const uint8_t server[] = { 192, 168, 0, 25 };
const uint8_t port = 80;
const uint8_t max_buf = 100;
char buffers[max_buf];
uint8_t pos_buf;
EthernetClient client;
void buf_clear() {
memset(buffers, 0, max_buf);
pos_buf = 0;
}
void w5500_read() {
if (client.available()) {
uint8_t temp = client.read();
if (temp) {
buffers[pos_buf] = temp;
pos_buf++;
if (pos_buf >= max_buf) {
buf_clear();
} else {
if (temp == '\n' && pos_buf > 1 && buffers[pos_buf - 2] == '\r') {
if (strstr(buffers, "#") != NULL) {
DEBUG_PRINTLN(buffers);
}
buf_clear();
}
}
}
}
}
void http_request_get() {
client.stop();
delay(10);
if (client.connect(server, port)) {
DEBUG_PRINTLN("СONNECTED");
client.print(F("GET /auto.php?numcard="));
client.print(numcard);
client.print(F(" HTTP/1.1\r\n"));
client.print(F("User-Agent: Arduino\r\n"));
client.print(F("Host: 192.168.0.25\r\n"));
client.print(F("Connection: close\r\n\r\n"));
} else {
DEBUG_PRINTLN("CONNECTION_FAILED");
}
}
auto.php
<?php
$numcard = preg_replace('/[^0-9]/', '', $_GET['numcard']);
$card_hex = dechex($numcard);
$serial_hex = substr($card_hex, 0, 2);
$number_hex = substr($card_hex, 2, 4);
$card_seria = hexdec($serial_hex);
$card_number = hexdec($number_hex);
echo $card_seria . "---" . $card_number . "#";
?>
Прикладываю к считывателю разные карты, а в мониторе порта получаю следующее:
8637075
СONNECTED
131---51859#HTTP/1.1 200 OK
1103923
СONNECTED
131---51859#HTTP/1.1 200 OK
Считыватель выдаёт верные номера карты, разные, а в ответе на запрос я получаю одну и туже информацию, но если приложить пропуск еще раз, все ок.
1103923
СONNECTED
16---55347#HTTP/1.1 200 OK
1103923
СONNECTED
16---55347#HTTP/1.1 200 OK
1103923
СONNECTED
16---55347#HTTP/1.1 200 OK
8637075
СONNECTED
16---55347#HTTP/1.1 200 OK
8637075
СONNECTED
131---51859#HTTP/1.1 200 OK
13-14-15 строки, приложила другую карту, 17-18-19 строки приложила эту же карту еще раз