Dzień Dobry,
Pracuję na arduino UNO z modułem NFC PN532 od iteadstudio.com.
Biblioteki z których korzystam to:
https://github.com/don/NDEF
https://github.com/elechouse/PN532
Chciałbym by program robił "A" cały czas w pętli a w momencie gdy przyłożę telefon z aplikacją NFC to ma zrobić "B" i wrócić do robienia "A" w pętli. Mój problem polega na tym, że w miejscu gdzie jest linijka odpowiadająca za odczyt z NFC program zatrzymuje się i czeka w nieskończoność na zbliżenie urządzenia z NFC (np telefonu) i nie przechodzi do realizowania dalszej części programu w pętli w przypadku gdy nie ma komunikacji NFC.
Kod do testowania komunikacji wygląda następująco (zaznaczono która funkcja zatrzymuje program):
W porcie szeregowym widnieje tylko jeden wiersz "Przed odczytem" co potwierdza, że program nie przechodzi dalej do "Po odczycie" gdy nic przyłożę, żadnego NFC.
Nie mam pojęcia jak to rozwiązać. W bibliotekach z których korzystam nie udało mi się odnaleźć funkcji odpowiedzialnej za testowanie komunikacji NFC. Bardzo proszę o pomoc, możliwe, że rozwiązanie jest bardzo proste, ale po prostu mi umknęło. Z góry dziękuję.
Pracuję na arduino UNO z modułem NFC PN532 od iteadstudio.com.
Biblioteki z których korzystam to:
https://github.com/don/NDEF
https://github.com/elechouse/PN532
Chciałbym by program robił "A" cały czas w pętli a w momencie gdy przyłożę telefon z aplikacją NFC to ma zrobić "B" i wrócić do robienia "A" w pętli. Mój problem polega na tym, że w miejscu gdzie jest linijka odpowiadająca za odczyt z NFC program zatrzymuje się i czeka w nieskończoność na zbliżenie urządzenia z NFC (np telefonu) i nie przechodzi do realizowania dalszej części programu w pętli w przypadku gdy nie ma komunikacji NFC.
Kod do testowania komunikacji wygląda następująco (zaznaczono która funkcja zatrzymuje program):
Kod:
#include "SPI.h"
#include "PN532_SPI.h"
#include "snep.h"
#include "NdefMessage.h"
#include "Wire.h"
#include "LiquidCrystal.h"
PN532_SPI pn532spi(SPI, 10);
SNEP nfc(pn532spi);
uint8_t ndefBuf[128];
// Connect via i2c, default address #0 (A0-A2 not jumpered)
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Define LCD with selected pins
void setup() {
Serial.begin(9600);
// set up the LCD's number of rows and columns:
lcd.begin(16, 2);
}
void loop() {
Serial.println("Przed odczytem");
//w tym miejscu program sie zatrzymuje i czeka az przyloze jakis NFC
int msgSize = nfc.read(ndefBuf, sizeof(ndefBuf));
Serial.println("Po odczycie");
if (msgSize > 0) {
NdefMessage msg = NdefMessage(ndefBuf, msgSize);
// msg.print();
NdefRecord record = msg.getRecord(0);
int payloadLength = record.getPayloadLength();
byte payload[payloadLength];
record.getPayload(payload);
// The TNF and Type are used to determine how your application processes the payload
// There's no generic processing for the payload, it's returned as a byte[]
int startChar = 0;
if (record.getTnf() == TNF_WELL_KNOWN && record.getType() == "T") { // text message
// skip the language code
startChar = payload[0] + 1;
} else if (record.getTnf() == TNF_WELL_KNOWN && record.getType() == "U") { // URI
// skip the url prefix (future versions should decode)
startChar = 1;
}
// Force the data into a String
String payloadAsString = "";
for (int c = startChar; c < payloadLength; c++) {
payloadAsString += (char)payload[c];
}
int payloadAsInt = payloadAsString.toInt();
double payloadAsDouble = (double)payloadAsInt;
// print on the LCD display
lcd.setCursor(0, 0);
lcd.print(payloadAsString);
Serial.print("WIADOMOSC: ");
Serial.println(payloadAsString);
Serial.print("LICZBA: ");
Serial.println(payloadAsInt);
Serial.println("\n");
} else {
Serial.println("Failed");
// delay(3000);
}
}
W porcie szeregowym widnieje tylko jeden wiersz "Przed odczytem" co potwierdza, że program nie przechodzi dalej do "Po odczycie" gdy nic przyłożę, żadnego NFC.
Nie mam pojęcia jak to rozwiązać. W bibliotekach z których korzystam nie udało mi się odnaleźć funkcji odpowiedzialnej za testowanie komunikacji NFC. Bardzo proszę o pomoc, możliwe, że rozwiązanie jest bardzo proste, ale po prostu mi umknęło. Z góry dziękuję.