Jump to content

Recommended Posts

Geschrieben

Hallo Tinkerforger,

 

ich versuche das NFC Bricklet im Readermodus als Tag-Scanner zu verwenden.  Leider gelingt mir das Anhand des Beispielcodes aus der Doku nicht. Es kommt einfach kein Leseloop in Gang.

Ausserdem fehlt bei der readerStateChanged Methode die Doku für den "idle" Wert: readerStateChanged(int state, boolean idle)

 

Für das NFC/RFID Bricklet habe ich das Ganze analog zu eurem Beispiel hinbekommen. Dort wird der "idle" Wert verwendet um den Loop am Laufen zu halten.

 

Könnt ihr mir ein bisschen auf die Sprünge helfen.

 

Gruß,

Theo

 

  • 1 month later...
Geschrieben

Sorry für die späte Antwort, ich hatte den Post irgendwie übersehen.

 

Das abgeänderte Beispiel könnte so aussehen:

 

import com.tinkerforge.IPConnection;
import com.tinkerforge.BrickletNFC;

public class ExampleScanForTags {
private static final String HOST = "localhost";
private static final int PORT = 4223;

// Change XYZ to the UID of your NFC Bricklet
private static final String UID = "nfc2";

// Note: To make the example code cleaner we do not handle exceptions. Exceptions
//       you might normally want to catch are described in the documentation
public static void main(String args[]) throws Exception {
	IPConnection ipcon = new IPConnection(); // Create IP connection
	BrickletNFC nfc = new BrickletNFC(UID, ipcon); // Create device object

	ipcon.connect(HOST, PORT); // Connect to brickd
	// Don't use device before ipcon is connected

	// Add reader state changed listener
	nfc.addReaderStateChangedListener(new BrickletNFC.ReaderStateChangedListener() {
		public void readerStateChanged(int state, boolean idle) {
			if (state == BrickletNFC.READER_STATE_IDLE) {
				try {
					nfc.readerRequestTagID();
				}
				catch (Exception e) {
					return;
				}
			}
			else if(state == BrickletNFC.READER_STATE_REQUEST_TAG_ID_READY) {
				try{
					int i = 0;
					StringBuilder tag = new StringBuilder();
					BrickletNFC.ReaderGetTagID ret = nfc.readerGetTagID();

					for (int v : ret.tagID) {
						if (i < ret.tagID.length - 1) {
							tag.append(String.format("0x%X ", v));
						}
						else {
							tag.append(String.format("0x%X", v));
						}

						i++;
					}

					System.out.format("Found tag of type %d with ID [%s]\n", ret.tagType, tag);
					nfc.readerRequestTagID();
				}
				catch (Exception e) {
					return;
				}
			}
			else if (state == BrickletNFC.READER_STATE_REQUEST_TAG_ID_ERROR) {
				try {
					nfc.readerRequestTagID();
				}
				catch (Exception e) {
					return;
				}
			}
		}
	});

	// Enable reader mode
	nfc.setMode(BrickletNFC.MODE_READER);

	System.out.println("Press key to exit"); System.in.read();
	ipcon.disconnect();
}
}

 

Im Grunde musst du nur zusehen das in jedem State in dem du landen kannst in dem das NFC Bricklet nicht irgendetwas durchführt oder auf irgendetwas wartet "nfc.readerRequestTagID()" nochmal aufgerufen wird, damit das Bricklet auch durchgängig nach Tags sucht.

Geschrieben

Falls es dir etwas nützt, kannst du auch schauen, wie ich das im OH1 Binding gelöst habe, oder übernimmst es in das OH2 Binding.

 

Das funktioniert bisher ganz gut.

 

Der Idle Zustand müsste der erste Zustand sein, den man erreicht nachdem folgende Methode aufgerufen wurde:

tinkerforgeDevice.setMode(BrickletNFC.MODE_READER);

 

Den boolean Parameter "idle" habe ich gar nicht weiter benötigt. Den Loop kannst du über den jeweiligen State am Laufen halten.

 

Was ich leider nicht gefunden habe, war eine "einfache" Library, welche die Daten vom Tag lesen kann. Alles was ich irgendwo gefunden habe, hatte Dependencies zu irgendwelchen Android Libraries.

Darum habe ich das auslesen/dekodieren der Daten selber gemacht.

 

Hast du da evtl. etwas gefunden, was das Auslesen/Dekodieren der Daten übernimmt?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...