UNO + w5100 (клиент и сервер) + rc522 = зависание шилда?
- Войдите на сайт для отправки комментариев
Здравствуте! Имею - Arduino UNO R3 (питание 12в 1А) + w5100 (SD не установлена) (одновременно клиент и сервер) + rc522,1 RGB диод и 1 обычный.
Задача банальна - СКУД.
Как реализовывал? Есть локальный сервер (php, mysql). Приложил карту - ушел GET запрос на сервер. На сервере ищем по карте...... бла бла бла... выдаем 1(успех) или 0(ошибка). Ардуино обрабатывает ответ ну и мигает красным или зеленым светодиодом.
Сервер на ардуинке нужен для удаленного управления дверьми с основного сервера и проверки доступности контроллеров (UNO R3).
Проблема начинается внезапно, ардуинка чтоли в ребут уходит после того, как прикладываю карту и уходит запрос на сервер, ликн на шилде притухает, после ребута 50 на 50 - инициализируется программа или нет, может зависнуть напрочь.
Вопрос: это глюки железа? Шилда? ПО?
Ну, между прочим, зафанател от Ардуино я, классная вещь!=))
Скетч:
#include <SPI.h>
#include <Ethernet.h>
#include <MFRC522.h>
#define RST_PIN 9 // Configurable, see typical pin layout above
#define SS_PIN 8 // Configurable, see typical pin layout above
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
IPAddress ip(192, 168, 1, 100);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetServer eth_server(80);
char server[] = "test.mosgortur.ru";
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522
mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details
Serial.println("Подождите 2 секунды...");
delay(2000);
Serial.println("Scan PICC to see UID, SAK, type, and data blocks...");
Ethernet.begin(mac, ip);
eth_server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
//pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(5, HIGH);
pinMode(7, OUTPUT);
digitalWrite(7, LOW);
pinMode(6, OUTPUT);
digitalWrite(6, LOW);
//digitalWrite(4, HIGH);
}
void loop() {
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
// Look for new cards
//EthernetClient server_client = eth_server.available();
EthernetClient client = eth_server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
client.println("Test");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
Serial.println("client disconnected");
}
if (mfrc522.PICC_IsNewCardPresent()) {
unsigned long uid = getID();
if ( ! mfrc522.PICC_ReadCardSerial() != -1) {
Serial.println(Ethernet.localIP());
Serial.println(uid);
if (client.connect(server, 80))
{
Serial.println("connected");
client.print( "GET /test.php?card_id=");
client.print(uid);
client.print("&rfid=");
client.print(Ethernet.localIP());
client.print(" ");
client.println( "HTTP/1.1 ");
client.print( "Host: " );
client.println(server);
client.println( "Connection: close" );
client.println();
client.println();
delay(1000);
while (client.available())
{
char c = client.read();
if (c == '%') {
char p = client.peek();
Serial.print(p);
if (p == '1') {
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
delay(1000);
}
if (p == '0') {
digitalWrite(7, HIGH);
digitalWrite(5, LOW);
delay(1000);
}
}
}
//client.stop();
//Serial.println("stop 1");
client.stop();
//client.flush();
}
else
{
client.stop();
Serial.println("stop 2");
delay(1000);
client.connect(server, 80);
}
}
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
}
unsigned long getID() {
if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
return -1;
}
unsigned long hex_num;
hex_num = mfrc522.uid.uidByte[0] << 24;
hex_num += mfrc522.uid.uidByte[1] << 16;
hex_num += mfrc522.uid.uidByte[2] << 8;
hex_num += mfrc522.uid.uidByte[3];
mfrc522.PICC_HaltA(); // Stop reading
return hex_num;
}
UP
Непонятно объяснил? Есть идеи у кого? Пока питание подал 5в в юсб порт - вроде б норм пока
Всем спасибо за помощь! Питание 5в - полет нормальный.