作者sinzen (冒险传人)
看板ASM
标题[问题] Arduino uno 配合 PN532 无法辨识
时间Tue Aug 1 14:01:50 2017
板上高手们好!
我购买的是 莆洋国际 的新版PN532 NFC RFID V3 模组。
应该是,它的包装上是说可以去这个网站 (
http://www.pu-yang.com.tw/ ) 上下载说明书。
但是,这个说明完全没有讲到如何接线,也没有程式码,只能自己在网路上搜寻。
我有在
http://forum.arduino.cc/index.php?topic=264797.0 这个论坛上找到
跟这这个产品一样的图片与程式码。并在
https://github.com/elechouse/PN532 上,
找到相关的函式库。
但在编译的过程中,会出现这个错误讯息:
call of overloaded 'print(uint8_t [7], int)' is ambiguous
因为是输出讯息,所以先将它注解起来,果然可以顺利编译上传。
最後执行结果传回
Hello!
Didn't find PN53x board
接线脚位如下:
SCK → 13
MSO → 12
MOSI → 11
SS → 10
VCC → 5V
GND → GND
想请教板上高手们,我该如何来解决这个问题?
麻烦您了,谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.125.235.67
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/ASM/M.1501567315.A.988.html
1F:→ god145145: 指拨开关 08/01 23:21
谢谢您的回覆。
指拨开关一开始是 ●○
●○
板子上的说明是:HSU 0 0
I2C 1 0
SPI 0 1
因为我不是电子本科系的,不太明了上面的意思,
所以,我刚刚四种情形全试了一遍,程式还是回应:
Hello!
Didn't find PN53x board
我在想,是否因为目前网路上找到的程式,大多是二、三年前的,
而这块板子是比较新的,所以比较匹配不起来?
如果您有任何的想法,请您不吝拨冗回覆,谢谢!
※ 编辑: sinzen (59.125.235.67), 08/02/2017 08:30:09
※ 编辑: sinzen (59.125.235.67), 08/02/2017 08:44:31
※ 编辑: sinzen (59.125.235.67), 08/02/2017 08:44:55
2F:→ god145145: 你的接法1拨左,2右。然後范例最前面有个 "if 0"改成"i 08/02 21:58
3F:→ god145145: f 1" 08/02 21:58
4F:→ god145145: 如果还是不行,po一下程式码跟接线图 08/02 21:59
谢谢 god145145 大大您的回覆!
程式码:
/**************************************************************************/
/*!
This example will attempt to connect to an ISO14443A
card or tag and retrieve some basic information about it
that can be used to determine what type of card it is.
Note that you need the baud rate to be 115200 because we need to print
out the data and read from the card at the same time!
*/
/**************************************************************************/
// choose to SPI or I2C or HSU
//#if 0 ←注解掉并改成下一行
#if 1
#include <SPI.h>
#include <PN532_SPI.h>
#include "PN532.h"
PN532_SPI pn532spi(SPI, 10);
PN532 nfc(pn532spi); ← no matching function for call to 'PN532::PN532(PN532_SPI&)'
#elif 0
#include <PN532_HSU.h>
#include <PN532.h>
PN532_HSU pn532hsu(Serial1);
PN532 nfc(pn532hsu);
#else
#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>
PN532_I2C pn532i2c(Wire);
PN532 nfc(pn532i2c);
#endif
void setup(void) {
Serial.begin(115200);
Serial.println("Hello!");
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("Didn't find PN53x board");
while (1); // halt
}
// Got ok data, print it out!
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);
// Set the max number of retry attempts to read from a card
// This prevents us from waiting forever for a card, which is
// the default behaviour of the PN532.
nfc.setPassiveActivationRetries(0xFF);
// configure board to read RFID tags
nfc.SAMConfig();
Serial.println("Waiting for an ISO14443A card");
}
void loop(void) {
boolean success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
// Wait for an ISO14443A type cards (Mifare, etc.). When one is found
// 'uid' will be populated with the UID, and uidLength will indicate
// if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);
if (success) {
Serial.println("Found a card!");
Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
Serial.print("UID Value: ");
for (uint8_t i=0; i < uidLength; i++)
{
Serial.print(" 0x");
//Serial.print(uid, HEX);
//Serial.print(uid);
}
Serial.println("");
// Wait 1 second before continuing
delay(1000);
}
else
{
// PN532 probably timed out waiting for a card
Serial.println("Timed out waiting for a card");
}
}
还满喜欢自己动手做些东西,尤其是有成果出来的时候,
即使过程中有些不顺利,但在除错完成的过程也有满满的成就感;
只是在超出自己的能力时,还不知所措时,挫折感也满大的。
感谢 god145145 大大的帮忙,希望您有空能帮我看看,谢谢!
※ 编辑: sinzen (59.125.235.67), 08/03/2017 11:52:49
5F:→ god145145: 手边UNO坏了,用MKR1000试,范例程式是可以动的 08/06 18:56
6F:→ god145145: 你先确认library里要用NDEF-master这个 GitHub上的NDEF 08/06 18:58
7F:→ god145145: 用起来有问题会卡死 08/06 18:59
8F:→ god145145: 还是不行的话先改用I2C试,可以动再回来找SPI的问题 08/06 19:01
感谢 god145145 大大的帮忙,我会再试试。
※ 编辑: sinzen (59.125.235.67), 08/06/2017 21:09:44