pn532 i2c ошибка компиляции скетча

SadiQ228
Offline
Зарегистрирован: 10.04.2017

#if 0
  #include <SPI.h>
  #include <PN532_SPI.h>
  #include "PN532.h"

  PN532_SPI pn532spi(SPI, 10);
  PN532 nfc(pn532spi);
#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>
#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);
  
  // configure board to read RFID tags
  nfc.SAMConfig();
  
  Serial.println("Waiting for an ISO14443A Card ...");
}


void loop(void) {
  uint8_t 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, &uidLength);
  
  if (success) {
    // Display some basic information about the card
    Serial.println("Found an ISO14443A card");
    Serial.print("  UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
    Serial.print("  UID Value: ");
    nfc.PrintHex(uid, uidLength);
    Serial.println("");
    
    if (uidLength == 4)
    {
      // We probably have a Mifare Classic card ... 
      Serial.println("Seems to be a Mifare Classic card (4 byte UID)");
	  
      // Now we need to try to authenticate it for read/write access
      // Try with the factory default KeyA: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
      Serial.println("Trying to authenticate block 4 with default KEYA value");
      uint8_t keya[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
	  
	  // Start with block 4 (the first block of sector 1) since sector 0
	  // contains the manufacturer data and it's probably better just
	  // to leave it alone unless you know what you're doing
      success = nfc.mifareclassic_AuthenticateBlock(uid, uidLength, 4, 0, keya);
	  
      if (success)
      {
        Serial.println("Sector 1 (Blocks 4..7) has been authenticated");
        uint8_t data[16];
		
        // If you want to write something to block 4 to test with, uncomment
		// the following line and this text should be read back in a minute
        // data = { 'a', 'd', 'a', 'f', 'r', 'u', 'i', 't', '.', 'c', 'o', 'm', 0, 0, 0, 0};
        // success = nfc.mifareclassic_WriteDataBlock (4, data);

        // Try to read the contents of block 4
        success = nfc.mifareclassic_ReadDataBlock(4, data);
		
        if (success)
        {
          // Data seems to have been read ... spit it out
          Serial.println("Reading Block 4:");
          nfc.PrintHexChar(data, 16);
          Serial.println("");
		  
          // Wait a bit before reading the card again
          delay(1000);
        }
        else
        {
          Serial.println("Ooops ... unable to read the requested block.  Try another key?");
        }
      }
      else
      {
        Serial.println("Ooops ... authentication failed: Try another key?");
      }
    }
    
    if (uidLength == 7)
    {
      // We probably have a Mifare Ultralight card ...
      Serial.println("Seems to be a Mifare Ultralight tag (7 byte UID)");
	  
      // Try to read the first general-purpose user page (#4)
      Serial.println("Reading page 4");
      uint8_t data[32];
      success = nfc.mifareultralight_ReadPage (4, data);
      if (success)
      {
        // Data seems to have been read ... spit it out
        nfc.PrintHexChar(data, 4);
        Serial.println("");
		
        // Wait a bit before reading the card again
        delay(1000);
      }
      else
      {
        Serial.println("Ooops ... unable to read the requested page!?");
      }
    }
  }
}

 

ОШИБКА: Arduino: 1.8.4 (Linux), Плата:"Arduino Nano, ATmega328P"

 
Несколько библиотек найдено для "Wire.h"
 Используется: /home/alexdelux/arduino-1.8.4/hardware/arduino/avr/libraries/Wire
Не используется: /home/alexdelux/arduino-1.8.4/libraries/nfcpn532
/tmp/arduino_modified_sketch_120435/readMifare.pde: In function 'void setup()':
readMifare:24: error: 'nfc' was not declared in this scope
   nfc.begin();
   ^
/tmp/arduino_modified_sketch_120435/readMifare.pde: In function 'void loop()':
readMifare:51: error: 'nfc' was not declared in this scope
   success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
             ^
exit status 1
'nfc' was not declared in this scope
 
как решить проблему? должно работать вроде бы без колдовства
 

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

разберись вот с этим

#if 0
002   #include <SPI.h>
003   #include <PN532_SPI.h>
004   #include "PN532.h"
005  
006   PN532_SPI pn532spi(SPI, 10);
007   PN532 nfc(pn532spi);
008 #elif 0
009   #include <PN532_HSU.h>
010   #include <PN532.h>
011       
012   PN532_HSU pn532hsu(Serial1);
013   PN532 nfc(pn532hsu);
014 #else
015   #include <Wire.h>
016   #include <PN532_I2C.h>
017   #include <PN532.h>
018 #endif

до объявления nfc дело не доходит

SadiQ228
Offline
Зарегистрирован: 10.04.2017

не понял юмора, просто дописать PN532 nfc(pn532i2c) чтоли?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SadiQ228 пишет:

не понял юмора,

Понятно :(

Строки 6 и 7 перенесите вниз, после 18-ой

SadiQ228
Offline
Зарегистрирован: 10.04.2017

не пашет, вы могли бы в двух словах прокоментировать такое решение?

я в курсе что такое область видимости но не могу понять почему не пашет, вроде бы все описано 

SadiQ228
Offline
Зарегистрирован: 10.04.2017

причем строки 6-7 есть мне надо по i2c работало шоб?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SadiQ228 пишет:

не пашет, вы могли бы в двух словах прокоментировать такое решение?

Что значит "не пашет"? Не компилируется или не работает? Если не компилируется, то скорее всего по другой причине. Когда говорите такие слова, публикуйте текущий скетч и сообщения об ошибках. 

SadiQ228 пишет:

я в курсе что такое область видимости но не могу понять почему не пашет, вроде бы все описано 

Что описано? Вам DetSimen, вроде же всё объяснил.

В строке 1 у Вас написано:
ЕСЛИ 0 равно 1, то компилировать строки 2-7 (а нет, так забить на них)
 
В строке 8 написано:
ИНАЧЕ ЕСЛИ 0 равно 1, то компилировать строки 9-13 (а нет, так забить на них)
 
В строке 14 написано:
ИНАЧЕ компилироваь строки 15-17
 
Ноль равен единице по Вашему?
 
А теперь проведите пальцем по всем условиям и скажите, описаны переменные pn532spi и nfc или нет.
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

а в строках 15-17 нету обьявления nfc, хоть ты лопни. 

Vova Bessonov
Offline
Зарегистрирован: 09.08.2018
#if 0
  #include <SPI.h>
  #include <PN532_SPI.h>
  #include "PN532.h"

  PN532_SPI pn532spi(SPI, 10);
  PN532 nfc(pn532spi);
#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

Рабочий вариант

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

тогда, если строки с 1 по 14 выкинуть, и 20-ю заодно,  то тоже будет рабочий вариант