UNO + w5100 (клиент и сервер) + rc522 = зависание шилда?

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

Здравствуте! Имею - 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;
}

 

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

UP

 Непонятно объяснил? Есть идеи у кого? Пока питание подал 5в в юсб порт  - вроде б норм пока

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

Всем спасибо за помощь! Питание 5в - полет нормальный.