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в - полет нормальный.