Hallo Leute, für ein Hochschulprojekt versuche ich momentan mittels eines Arduino Wifi REV2 eine NFC Karte zu lesen, leider schaffe ich es nicht das Programm ohne Fehlermeldung auf den Arduino zu laden.
Das ist das NFC Lesegerät welches ich verwende:
klick
(Auf dem Bild ist allerdings die Version 1.0 abgebildet ich habe die überarbeitete Version 1.1)
Das hier ist die Anleitung nach der ich mich richte:
Anleitung
Zunächst einmal was sind die Unterschiedlichen Kommunikationsarten UART und I2C welche benötige ich?
Des weiteren soll laut Bild in der Anleitung ja Standardmässig UART aktiviert sein ich kann allerdings nicht erkennen dass diese auf meinem Board zusammen gelötet sind.
Ich habe dann die Schritte wie in der Anleitung ausgeführt erhalte aber leider die folgende Fehlermeldung:
Arduino: 1.8.13 (Windows 10), Board: "Arduino Uno WiFi Rev2, ATMEGA328"
C:\Users\alexa\Documents\Arduino\libraries\NDEF\src\PN532\PN532_I2C\PN532_I2C.cpp: In member function 'int8_t PN532_I2C::readAckFrame()':
C:\Users\alexa\Documents\Arduino\libraries\NDEF\src\PN532\PN532_I2C\PN532_I2C.cpp:192:72: error: call of overloaded 'requestFrom(int, unsigned int)' is ambiguous
if (_wire->requestFrom(PN532_I2C_ADDRESS, sizeof(PN532_ACK) + 1)) {
^
In file included from C:\Users\alexa\Documents\Arduino\libraries\NDEF\src/PN532/PN532_I2C/PN532_I2C.h:8:0,
from C:\Users\alexa\Documents\Arduino\libraries\NDEF\src\PN532\PN532_I2C\PN532_I2C.cpp:5:
C:\Users\alexa\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.6\libraries\Wire\src/Wire.h:60:13: note: candidate: virtual uint8_t TwoWire::requestFrom(uint8_t, size_t)
uint8_t requestFrom(uint8_t, size_t);
^~~~~~~~~~~
C:\Users\alexa\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.6\libraries\Wire\src/Wire.h:62:13: note: candidate: uint8_t TwoWire::requestFrom(int, int)
uint8_t requestFrom(int, int);
^~~~~~~~~~~
exit status 1
Fehler beim Kompilieren für das Board Arduino Uno WiFi Rev2.
Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.
Hat jemand von euch ne Idee?
Viele Grüße
Alexander
Des weiteren soll laut Bild in der Anleitung ja Standardmässig UART aktiviert sein ich kann allerdings nicht erkennen dass diese auf meinem Board zusammen gelötet sind.
da wir eine Leiterbahn sein. Wirst nur mit der Lupe sehen.
Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.
mach das.
PS.: die Fehlermeldung deuted auf I2C. Scheint mir eigenartig wenn du ein Serial Beispiel abarbeiten willst.
prüfe das noch mal und dann poste deinen ganzen Code und die relevanten/roten Fehlermeldungen
Das hier ist der ganze Code.
#include <NfcAdapter.h>
#include <PN532/PN532/PN532.h>
#if 0 // use SPI
#include <SPI.h>
#include <PN532/PN532_SPI/PN532_SPI.h>
PN532_SPI pn532spi(SPI, 9);
NfcAdapter nfc = NfcAdapter(pn532spi);
#elif 1 // use hardware serial
#include <PN532/PN532_HSU/PN532_HSU.h>
PN532_HSU pn532hsu(Serial1);
NfcAdapter nfc(pn532hsu);
#elif 0 // use software serial
#include <PN532/PN532_SWHSU/PN532_SWHSU.h>
#include "SoftwareSerial.h"
SoftwareSerial SWSerial(2, 3);
PN532_SWHSU pn532swhsu(SWSerial);
NfcAdapter nfc(pn532swhsu);
#else //use I2C
#include <Wire.h>
#include <PN532/PN532_I2C/PN532_I2C.h>
PN532_I2C pn532_i2c(Wire);
NfcAdapter nfc = NfcAdapter(pn532_i2c);
#endif
void setup(void) {
SERIAL.begin(9600);
SERIAL.println("NDEF Reader");
nfc.begin();
}
void loop(void) {
SERIAL.println("\nScan a NFC tag\n");
if (nfc.tagPresent()) {
NfcTag tag = nfc.read();
tag.print();
}
delay(5000);
}
Die Ausführliche Ausgabe kann ich hier nicht posten da dadurch 9000 Zeichen überschritten werden würden
Das hier ist der größte Teil der Fehlermeldung bzw. der Ausgabe beim Kompilieren:
Compiling library "NDEF"
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\NfcTag.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\NdefMessage.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\MifareClassic.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\Ndef.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\NfcAdapter.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\NdefRecord.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\MifareUltralight.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\PN532\PN532\PN532.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\PN532\PN532\emulatetag.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\PN532\PN532\snep.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\PN532\PN532\mac_link.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\PN532\PN532\llcp.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\alexa\AppData\Local\Temp\arduino_build_163115\libraries\NDEF\PN532\PN532_HSU\PN532_HSU.cpp.o
"C:\\Users\\alexa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino5/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega4809 -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_UNO_WIFI_REV2 -DARDUINO_ARCH_MEGAAVR -DUNO_WIFI_REV2_328MODE -DMILLIS_USE_TIMERB3 "-IC:\\Users\\alexa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\megaavr\\1.8.6\\cores\\arduino/api/deprecated" "-IC:\\Users\\alexa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\megaavr\\1.8.6\\cores\\arduino" "-IC:\\Users\\alexa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\megaavr\\1.8.6\\variants\\uno2018" "-IC:\\Users\\alexa\\Documents\\Arduino\\libraries\\NDEF\\src" "-IC:\\Users\\alexa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\megaavr\\1.8.6\\libraries\\Wire\\src" "-IC:\\Users\\alexa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\megaavr\\1.8.6\\libraries\\SPI\\src" "-IC:\\Users\\alexa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\megaavr\\1.8.6\\libraries\\SoftwareSerial\\src" "C:\\Users\\alexa\\Documents\\Arduino\\libraries\\NDEF\\src\\PN532\\PN532_I2C\\PN532_I2C.cpp" -o "C:\\Users\\alexa\\AppData\\Local\\Temp\\arduino_build_163115\\libraries\\NDEF\\PN532\\PN532_I2C\\PN532_I2C.cpp.o"
C:\Users\alexa\Documents\Arduino\libraries\NDEF\src\PN532\PN532_I2C\PN532_I2C.cpp: In member function 'int8_t PN532_I2C::readAckFrame()':
C:\Users\alexa\Documents\Arduino\libraries\NDEF\src\PN532\PN532_I2C\PN532_I2C.cpp:192:72: error: call of overloaded 'requestFrom(int, unsigned int)' is ambiguous
if (_wire->requestFrom(PN532_I2C_ADDRESS, sizeof(PN532_ACK) + 1)) {
^
In file included from C:\Users\alexa\Documents\Arduino\libraries\NDEF\src/PN532/PN532_I2C/PN532_I2C.h:8:0,
from C:\Users\alexa\Documents\Arduino\libraries\NDEF\src\PN532\PN532_I2C\PN532_I2C.cpp:5:
C:\Users\alexa\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.6\libraries\Wire\src/Wire.h:60:13: note: candidate: virtual uint8_t TwoWire::requestFrom(uint8_t, size_t)
uint8_t requestFrom(uint8_t, size_t);
^~~~~~~~~~~
C:\Users\alexa\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.6\libraries\Wire\src/Wire.h:62:13: note: candidate: uint8_t TwoWire::requestFrom(int, int)
uint8_t requestFrom(int, int);
^~~~~~~~~~~
Bibliothek NDEF in Version 1.1.0 im Ordner: C:\Users\alexa\Documents\Arduino\libraries\NDEF wird verwendet
Bibliothek Wire in Version 1.0 im Ordner: C:\Users\alexa\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.6\libraries\Wire wird verwendet
Bibliothek SPI in Version 1.0 im Ordner: C:\Users\alexa\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.6\libraries\SPI wird verwendet
Bibliothek SoftwareSerial in Version 1.0 im Ordner: C:\Users\alexa\AppData\Local\Arduino15\packages\arduino\hardware\megaavr\1.8.6\libraries\SoftwareSerial wird verwendet
exit status 1
Fehler beim Kompilieren für das Board Arduino Uno WiFi Rev2.
Da du im Sketch keine Auswahl getroffen hast, ich sehe jedenfalls keine, wird I2C verwendet.
Poste doch mal einen Hyperlink deiner verwendeten Libraries.
Sorry, ich meinte die Auswahl auf der Platine.
Ist doch alles beschrieben, z.B.
Sorry jetzt versteh ich gar nichts mehr?
Laut dem Foto wird doch standardmäßig UART verwendet und nicht I2C?
Davon abgesehen hat das ja nichts mit meinem Problem zu tun da ich ja den Code nicht einmal kompilieren kann wenn der Arduino gar nicht am PC angeschlossen ist.
Hast du denn mal das gemacht, was noiasca dir geschrieben hat ?
Er hat doch nichts geschrieben, außer dass ich nochmal die ausführliche Fehlermeldung posten soll, was ich ja bereits probiert habe :?
Die Fehlermeldungen deuten auf ein I2C Problem hin, aber mir scheint Hardware-Serial ist richtig ausgewählt, und dann soll wohl kein I2C angesprochen werden.
Stell mal testweise das Board um auf einen normalen UNO und prüfe ob der Sketch kompiliert.
Wenn's auch für den Uno nicht klappt, reklamiere beim Hersteller.
Wenn du dich nicht traust, schmeiss mal die ganze precompiler defines raus und lass nur das über
#include <PN532/PN532_HSU/PN532_HSU.h>
PN532_HSU pn532hsu(Serial1);
NfcAdapter nfc(pn532hsu);
wenn dein Microcontroller kein Serial1 hat, dann nimm die Zeilen von SoftwareSerial.
Hi ihr müsst eure Antworten leider etwas verständlicher formulieren da ich euch sonst nicht folgen kann.
Ich hab noch nie irgendwas in Arduino programmiert und wirklich keine Ahnung.
Wenn ich den normalen Arduino Uno auswähle erhalte ich diese Fehlermeldung:
ReadTag:12:20: error: 'Serial1' was not declared in this scope
PN532_HSU pn532hsu(Serial1);
^~~~~~~
C:\Users\alexa\Documents\Arduino\ReadTag\ReadTag.ino:12:20: note: suggested alternative: 'Serial'
PN532_HSU pn532hsu(Serial1);
^~~~~~~
Serial
exit status 1
'Serial1' was not declared in this scope
Hat noch jemand eine Idee bzw. kann die vorherigen Antworten etwas für mich aufschlüsseln damit ich weiß was ich tun soll?
Der "normale Uno hat kein Serial1. Ansonsten solltest Du mal einige Grundlagen lernen.
Gruß Tommy
alex3480:
Hat noch jemand eine Idee bzw. kann die vorherigen Antworten etwas für mich aufschlüsseln damit ich weiß was ich tun soll?
Ja, z.B. die Grundlagen des Arduino lernen.
Dazu gehört auch das Datenblatt des Uno lesen.
Da siehst du dann, dass der kein serial1 hat. Da hatte dir noiasca auch schon geschrieben, du sollst deinen Sketch auf SoftwareSerial umstellen. Dadurch nutzt der Sketch die Software-Schnittstelle und nicht eine nicht vorhandene Hardware Schnittstelle.
Ich hab leider keine Zeit (und keine Lust um ehrlich zu sein) mich im Rahmen des Projekts in die kompletten Grundlagen der Arduino Prgrammierung einzuarbeiten und mich mit den verschiedenen Eigenschaften der verschiedenen Boards zu beschäftigen. Dafür habe ich noch zu viele andere Themen in welche ich mich komplett einarbeiten muss.
Ich will eigentlich nur eine NFC Karte auslesen und die Daten über Wifi an nen Server weiterleiten, es war nicht geplant, dass das so eine "herkules" Aufgabe wird.
Ich hab immer noch keine Ahnung ob ich jetzt I2C oder UART oder was auch immer es noch gibt benutzen soll geschweige denn was genau die Unterschiede sind ich muss nur wissen welche Variante mich wie zum Ziel bringt.
Ich hab auch keine Lust jetzt alles für nen normalen Arduino Uno durchzuprobieren (den ich ja gar nicht habe) der wiederum andere Fehlermeldungen liefert die ich genau so wenig einordnen kann wenn ich einen Arduino Uno Wifi rev2 hier liegen habe.
Zweitens verstehe ich trotz Google Suche nicht wie die If Else Bedingungen funktionieren sollen so etwas habe ich in dem mir bekannten Programmiersprachen bisher noch nicht gesehen (was soll bitte If 0 else if 1 etc. bedeuten? Wann wird jetzt welcher Case ausgeführt?)
Wenn ich es jetzt richtig verstanden habe ist mein Ursprungsproblem, dass irgendetwas mit I2C nicht funktioniert? Kann ich den ganzen Kram dann nicht einfach rausschmeißen und es mit UART oder so versuchen?
Und das zweite Problem dass der Arduino Uno Wifi rev2 im gegensatz zu den meisten Standard Boards kein Serial1 sondern ledeglich ein SoftwareSerial besitzt und deshalb etwas am Code angepasst werden muss.
Da mir im Herstellerforum bisher noch niemand geantwortet kann und ich mir ziemlich sicher bin es alleine im zeitlichen Rahmen des Projekts nicht zu schaffen die Materie so tief zu durchdringen um das Ding selber ans laufen zu kriegen wäre ich wirklich sehr Dankbar wenn ihr mir einfach kurz den Code so anpasst dass ich es mal damit probieren kann.
Viele Grüße
alex3480:
Ich hab leider keine Zeit (und keine Lust um ehrlich zu sein) mich im Rahmen des Projekts in die kompletten Grundlagen der Arduino Prgrammierung einzuarbeiten
Und Du meinst, deswegen sollen wir für Dich die Arbeit machen?
Wie überall im Leben gibt es 4 Varianten, wenn man etwas will und es nicht kann:
- Du lernst es.
- Du bezahlst einen Dienstleister, der das für Dich tut
- Du findest jemanden, der es für Dich für lau macht
- Du verzichtest.
Du suchst nach 3. und da glaube ich nicht, dass Du da erfolgreich sein wirst. Wir helfen gern, aber Faulheit/Desinteresse/nur haben wollen unterstützen wir ungern.
Gruß Tommy
alex3480:
Ich hab leider keine Zeit (und keine Lust um ehrlich zu sein) mich im Rahmen des Projekts in die kompletten Grundlagen der Arduino Prgrammierung einzuarbeiten und mich mit den verschiedenen Eigenschaften der verschiedenen Boards zu beschäftigen. Dafür habe ich noch zu viele andere Themen in welche ich mich komplett einarbeiten muss.
......
Du bist ja echt witzig.....also wir sollen deine Arbeit machen, nur weil du keine Lust hast.
Na dann....
Ok.....einen Tipp möchte ich dir noch geben.
Baue deinen Sketch entsprechend der Beispiele aus den Libraries auf.
Damit sollte es funktionieren.
Aber nochmals, den Sketch musst du selbst schreiben, wir haben deine Hardware nicht.
Das ist in Ordnung ich zwinge ja niemanden.
Vielleicht gibt es ja noch jemand anderen der sich erbahmt und der 20 Zeilen Code annimmt oder zumindest die Werkzeuge liefert mit denen ICH bei meinem Kenntnisstand auch was anfangen kann.
Sehr gerne arbeite ich mit euch alles Schritt für Schritt ab, wenn ihr mir dann aber z.B sagt der Arduino hat kein Serial1 (was ich bereits im ersten Post verstanden habe) und deshalb die Software Serial benötige, Ich allerdings trotz google suche keine Ahnung habe wie ich diese implementiere dann bringt mich das auch nicht weiter..
Soll ich dann nen neuen Post machen und fragen wie ich Software Serial statt Serial1 implementiere?
Ich erachte das für niemanden als Zielführend. (Sollte jetzt nur mal ein Beispiel sein, ich hab ja eben noch ein paar Beispiele genannt wo es genau am Verständnis hakt)
Auch das mit SoftwareSerial steht in der jeweiligen Library in den Beispielen.