Доброго времени суток! Пытаюсь завести вместе ethernet enc28j60 и adafruit pn532. NFC секция работает нормально, ID карточек читается, а вот сеть становится доступна только, когда карточку прикладываю. Код (C++): #include <EtherCard.h> #include <Wire.h> #include <SPI.h> #include <Adafruit_PN532.h> #define PN532_IRQ (2) #define PN532_RESET (3) Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET); static byte myip[] = { 192, 168, 2, 15 }; static byte gwip[] = { 192, 168, 2, 1 }; static byte mymac[] = { 0x74, 0x69, 0x69, 0x2D, 0x30, 0x31 }; int ledPin = 6; byte Ethernet::buffer[300]; BufferFiller bfill; const char page[] PROGMEM = "\r\n" "Main page" ; const char cmd_on[] PROGMEM = "\r\n" "Received ON command" ; const char cmd_off[] PROGMEM = "\r\n" "Received OFF command" ; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(115200); Serial.println("Hola caracola!"); if (!ether.begin(sizeof Ethernet::buffer, mymac, 10)) { Serial.println( "Failed to access Ethernet controller"); while(1); } else Serial.println("Ethernet controller initialized"); ether.staticSetup(myip, gwip); ether.printIp("IP: ", ether.myip); ether.printIp("GW: ", ether.gwip); nfc.begin(); uint32_t versiondata = nfc.getFirmwareVersion(); if (! versiondata) { Serial.print("Didn't find PN53x board"); while (1); } Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); nfc.SAMConfig(); Serial.println("Waiting for an ISO14443A Card ..."); } void loop() { uint8_t success; uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; uint8_t uidLength; word pos = ether.packetLoop(ether.packetReceive()); if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength)) { Serial.print(" UID Value: "); nfc.PrintHex(uid, uidLength); } if (pos) { bfill = ether.tcpOffset(); char* data = (char *) Ethernet::buffer + pos; Serial.println(data); if (strstr((char *)Ethernet::buffer + pos, "GET /?on") != 0) { Serial.println("Received ON command"); digitalWrite(ledPin, HIGH); bfill.emit_p(cmd_on); } else if (strstr((char *)Ethernet::buffer + pos, "GET /?off") != 0) { Serial.println("Received OFF command"); digitalWrite(ledPin, LOW); bfill.emit_p(cmd_off); } else bfill.emit_p(page); ether.httpServerReply(bfill.position()); } } как выяснилось ранее Код (C++): nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength) эта часть полностью захватывает все дальнейшие процедуры и выполняется только она одна обрубая другие, но если приложить карточку все остальное будет работать только на момент пока она приложена. Встает вопрос какие есть альтернативы?
Код (C++): class Adafruit_PN532{ ... // ISO14443A functions bool readPassiveTargetID(uint8_t cardbaudrate, uint8_t * uid, uint8_t * uidLength, uint16_t timeout = 0); //timeout 0 means no timeout - will block forever. По таймауту функция завершается.