Using the SparkFun_ST25DV64KC_Arduino_Library, I’m having an odd issue getting my sketch to compile. If we look at the following Example 10-NDEF Text (slightly modified in that I’m just writing the Record Text to tag memory):
/*
ST25DV64KC Example
By: Ricardo Ramos and Paul Clark
*/
#include <SparkFun_ST25DV64KC_Arduino_Library.h> // Click here to get the library: http://librarymanager/All#SparkFun_ST25DV64KC
#include "RTClib.h"
#include "Arduino.h"
#include "Audio.h"
#include "SD.h"
#include "FS.h"
#include "esp_sleep.h"
#include <ezButton.h>
Audio audio; // Create Audio object
RTC_DS3231 rtc; // create RTC object
DateTime nowDT;
SFE_ST25DV64KC_NDEF tag; // create RFID object
#define power_pin 15
int day_count = 3;
int alarm_time = 8;
void setup() {
delay(1000);
Serial.begin(115200);
Wire.begin();
pinMode(power_pin, OUTPUT);
digitalWrite(power_pin, HIGH);
Serial.println(F("ST25DV64KC example."));
if (!tag.begin(Wire)) {
Serial.println(F("ST25 not detected. Freezing..."));
while (1) // Do nothing more
;
}
Serial.println(F("ST25 connected."));
// Clear the first 256 bytes of user memory
uint8_t tagMemory[256];
memset(tagMemory, 0, 256);
Serial.println("Writing 0x0 to the first 256 bytes of user memory.");
tag.writeEEPROM(0x0, tagMemory, 256);
// Write the Type 5 CC File - starting at address zero
Serial.println(F("Writing CC_File"));
tag.writeCCFile8Byte();
// Write one NDEF UTF-8 Text record
uint16_t memLoc = tag.getCCFileLen();
Serial.println(F("Writing the first NDEF Text record"));
char buffer[85];
int days = 3;
int alarm1_hr = 8;
int alarm1_min = 30;
sprintf(buffer, "READ USER has taken their medication for %d days. Alarm Time is set for %d:%d ", days, alarm1_hr, alarm1_min);
tag.writeNDEFText(buffer, &memLoc, true, true); // MB=1, ME=1
}
void loop() {
// Nothing to do here
}
This sketch compiles and uploads perfectly.
My problem is that if I use the same Library (SparkFun_ST25DV64KC_Arduino_Library.h ) and the same lines of code (see toward the end of the sketch at the void write_RFID_tag() function) to do the writing of the Record in the broader context of a larger sketch (actually only partial) following, it fails to compile:
#include <SparkFun_ST25DV64KC_Arduino_Library.h> // Click here to get the library: http://librarymanager/All#SparkFun_ST25DV64KC
#include "RTClib.h"
#include "Arduino.h"
#include "Audio.h"
#include "SD.h"
#include "FS.h"
#include "esp_sleep.h"
#include <ezButton.h>
#define SD_CS 5 // D9 of Firebeetle microSD Card Reader connections
#define SPI_MOSI 23 // DI of SD Card
#define SPI_MISO 19 // DO of SD Card
#define SPI_SCK 18
#define I2S_DOUT 25 //(D2) DAC0 I2S output for firebeetle
#define I2S_BCLK 14
#define I2S_LRC 17
Audio audio; // Create Audio object
RTC_DS3231 rtc; // create RTC object
DateTime nowDT;
SFE_ST25DV64KC tag; // create RFID object
RTC_DATA_ATTR int bootCount = 0; // for sleep
const int MAX_ANALOG_VAL = 4095;
const float MAX_BATTERY_VOLTAGE = 4.1; // Max LiPoly voltage of a 3.7 battery is 4.2
const int MIN_BATT_THRESHOLD = 1865;
#define uS_TO_S_FACTOR 1000000 // Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP 20 // Time ESP32 will sleep (in seconds) and then wake up
////////////////////////// PIN ASSIGNMENTS ///////////////////////////////////////////////
#define CLOCK_INTERRUPT_PIN A3 //A3 Physical Pin on Firebeetle The number of the pin for monitor alarm status on SQW DS3231
#define red_LED 0 // GPIO 0
#define green_LED 3
#define blue_LED 2 // this wire jumped - was GPIO 12
#define batt_input A0
#define power_pin 15
#define lid_sw A1 //reed switch all buttons pulled UP via 10K resistor
#define pwr_button A2 // giving up blue led and rewiring to power button
ezButton pwr_but(A2);
ezButton lang_select_but(26);
ezButton pill_confirm_but(4);
ezButton page_back_but(13);
ezButton page_forw_but(27);
ezButton vol_up_but(12); //this wire jumped was GPIO 2
ezButton vol_dn_but(16);
bool lid_sw_val;
bool pwr_state = false;
bool lang_state = false;
bool pill_confirm_toggle = false;
bool goto_close_lid_finish = false;
bool warning_pill_not_taken = false;
bool vol_up_but_state = false;
bool block_pwr_but = false; // to prevent power on while close lid finish()
int pwr_but_state;
const char* audiofilenames[6][24] = { //various audio files on MicroSD card
/* 0 */ { "tick.wav", "turntone.wav", "am.wav", "pm.wav", "silence.wav", "click.wav", "Tomorw1.wav", "Tomorw2.wav", "THIRTY.wav" },
/* 1 */ { "12-AM.wav", "1-AM.wav", "2-AM.wav", "3-AM.wav", "4-AM.wav", "5-AM.wav", "6-AM.wav", "7-AM.wav", "8-AM.wav", "9-AM.wav", "10-AM.wav", "11-AM.wav", "12-PM.wav", "1-PM.wav", "2-PM.wav", "3-PM.wav", "4-PM.wav", "5-PM.wav", "6-PM.wav", "7-PM.wav", "8-PM.wav", "9-PM.wav", "10-PM.wav", "11-PM.wav" },
/* 2 */ { "day14inst.wav", "end_book.wav", "INSTRUCT.wav", "intro_lg.wav", "intro_sht.wav", "med_close.wav", "CLOSELID.wav", "CLSELID2.wav", "WELCOME.wav", "DOORSTP2.wav", "DOORSTOP.wav" },
/* 3 */ { "TAKEMED.wav", "NEXTTAKE.wav", "NOT_MED.wav", "NOT_MED2.wav", "silence.wav", "ENGLISH.wav", "ISIXHOSA.wav", "ISIZULU.wav", "takemed3.wav" },
/* 4 */ { "DAY_1.wav", "DAY_2.wav", "DAY_3.wav", "DAY_4.wav", "DAY_5.wav", "DAY_6.wav", "DAY_7.wav", "DAY_8.wav", "DAY_9.wav", "DAY_10.wav", "DAY_11.wav", "DAY_12.wav", "DAY_13.wav", "DAY14INST.wav" },
/* 5 */ { "page1.wav", "page2.wav", "page3.wav", "page4.wav", "page5.wav", "page6.wav", "page7.wav", "page8.wav", "page9.wav", "page10.wav", "page11.wav", "page12.wav", "page13.wav", "page14.wav", "page15.wav", "page16.wav", "page17.wav", "page18.wav", "END_BOOK.wav" }
};
////////////////////////////// Timing ///////////////////////////////
int long current_Millis;
int long prev_LED_millis = 0;
int long prev_RFID_millis = 0;
int long prev_clock_millis = 0;
int long prev_take_meds_millis = 0;
int long prev_lid_close_finish_millis = 0;
int long prev_not_yet_time_millis = 0;
int long prev_sleep_delay_millis = 0;
int long book_pwr_off_delay_millis = 0;
int long prev_pwr_button_millis = 0;
int long pwr_button_debounce = 500;
int16_t RFID_time = 5000;
int16_t clock_time = 3000;
int16_t LED_pause_time = 100;
int16_t take_med_time; // variable to hold following
int16_t take_med_time_initial = 500; // initially set by alarm and then adjusted in take_med() to be 15 seconds for 10x sleep
int16_t take_med_time_extended = 30000; // once entered loop repeats every 30 seconds
int16_t not_time_yet_time = 5000; // variable to hold following
int16_t pill_conf_loop_time; // variable to hold following
int16_t pill_conf_loop_time_initial = 500; // set initially by take_med() to be 3 second
int16_t pill_conf_loop_time_extended = 8000; // repeat every 8 seconds after first confirming button
int long sleep_delay_time_no_door_open = 1200000; // 1200000 20 minutes norm (60000) 1 minutes debug to sleep if alarm triggered and door not opened
int long sleep_delay_time_door_open_no_confirm = 60000; // go to sleep after 1 minutes (60000) if door open but no confirm button pushed
int long sleep_delay_time_pill_confirm_door_closed = 15000; // go to sleep 15 seconds after confirm pill door closed
int long book_pwr_off_time = 300000; // (300000) 5 minutes
int long power_debounce_time = 250; // time to reenter loop to read power button
int long wake_up_from_sleep_time = 12000;
int long sleep_delay_time = 500; // variable for holding go to sleep delay time
int alarm1_hr; // variable for holding set alarm time hour
int alarm1_min; // variable for holding set alarm time minute
/////////////////////////////// end of timing /////////////////////////////////////////////
int8_t audio_trigger = -1; // this triggers no. of audio prompts for given function - at -1 to keep it false
char audio_array1; // these hold the variables for for the various audio prompts after the main audio prompt in the function
char audio_array2;
char audio_array3;
char audio_array4;
char audio_array5;
char audio_array6;
char audio_array7;
char audio_array8;
int LED_color; // variable for storing LED color;
int Red = 0;
int Green = 1;
int Blue = 2;
int Yellow = 3;
bool LED_status = true; // determines toggle of whether LED is on or off flashing curr_Lang_state
bool LED_trigger = false; // LED switch ON or FF
bool alarm_fired = false;
bool sleep_mode = false;
bool not_yet_time_warning = false; // if door left open toggle
int day_count = 0; // set at zero initially
int page_count = 0; // set to zero initially
int const total_page_count = 19; // total pages plus one for end of page
int audio_repeat_count = 0; // variable to hold audio repeat warning xtimes
int volume_level = 12; // default volume level - 20 max
void setup() {
Wire.begin();
Serial.begin(115200);
pinMode(power_pin, OUTPUT);
pinMode(pwr_button, INPUT);
pinMode(34, INPUT);
pinMode(batt_input, INPUT);
pinMode(red_LED, OUTPUT);
pinMode(green_LED, OUTPUT);
pinMode(blue_LED, OUTPUT);
pinMode(lid_sw, INPUT);
pinMode(CLOCK_INTERRUPT_PIN, INPUT_PULLUP); // Making it so, that the alarm will trigger an interrupt
digitalWrite(power_pin, HIGH);
page_back_but.setDebounceTime(100);
page_forw_but.setDebounceTime(100);
//lang_select_but.setDebounceTime(100);
pwr_but.setDebounceTime(100);
vol_up_but.setDebounceTime(100);
vol_dn_but.setDebounceTime(100);
pill_confirm_but.setDebounceTime(50);
if (!tag.begin(Wire)) { // check if RFID breakout is connected
Serial.println(F("ST25 not detected. Freezing..."));
while (1)
;
} // Do nothing more
Serial.println(F("ST25 connected."));
audio.setVolume(volume_level);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
////////////////////////// RTC TIME FUNCTION SETUP ///////////////////////////////////////////
rtc.disable32K(); //we don't need the 32K Pin, so disable it
if (rtc.lostPower()) {
Serial.println("RTC lost power - need to set using set_time_READ_ds3231 program "); // if power loss following line sets the RTC to the date & time this sketch was compiled
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
attachInterrupt(digitalPinToInterrupt(CLOCK_INTERRUPT_PIN), onAlarm, FALLING);
//esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK, ESP_EXT1_WAKEUP_ALL_LOW); // triggered if go LOW on GPIOs 4, 15 and 36 lid switch, pwr button, RTC SQW TIMER TRIGGER
esp_sleep_enable_ext0_wakeup(GPIO_NUM_35, 0); //1 = High, 0 = Low GPIO 35 A3 of FireBeetle
//esp_sleep_pd_config(ESP_PD_DOMAIN_VDDSDIO, ESP_PD_OPTION_OFF); // power down flash
rtc.clearAlarm(1);
rtc.clearAlarm(2);
rtc.writeSqwPinMode(DS3231_OFF); // stop oscillating signals at SQW Pin otherwise setAlarm1 will fail
rtc.disableAlarm(2); // turn off alarm 2 (in case it isn't off already) again, this isn't done at reboot, so a previously set alarm could easily go overlooked
nowDT = rtc.now(); // on reset set alarm time to time of reset
//rtc.setAlarm1(now + TimeSpan(0, 11, 0, 0), DS3231_A1_Hour); // debugset alarm for every 11 hours at the same time of day
//DateTime = rtc.getAlarm1();
alarm1_hr = nowDT.hour(); // notDT is set in setup() at time of reset
alarm1_min = nowDT.minute(); // notDT is set in setup() at time of reset
Serial.print("Alarm time is set to: "); // display alarm set time
Serial.print(alarm1_hr);
Serial.print(":");
Serial.println(alarm1_min);
///////////////////////////////////// END RTC FUNCTIONS ///////////////////////////////////////////////////////
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
pinMode(SD_CS, OUTPUT); // Set microSD Card CS as OUTPUT and set HIGH
digitalWrite(SD_CS, HIGH);
SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI); // Initialize SPI bus for microSD Card
delay(1000);
if (!SD.begin(SD_CS)) { // Start microSD Card
Serial.println("Error accessing microSD card!");
while (true)
;
}
audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT); // Setup I2S
///////////////////// first time reset sets up to take first day medication
take_med_time = take_med_time_initial; // set up inital timing
pill_conf_loop_time = pill_conf_loop_time_initial;
LED_trigger = true;
pill_confirm_toggle = false;
alarm_fired = true; // on reset trigger alarm to be true
//alarm_fired = false; // for debug of book functions
audio.connecttoFS(SD, "WELCOME.wav");
}
void loop() {
////////////// DEFAULT FUNCTIONS /////////////////////////
current_Millis = millis();
audio.loop(); // with audio.loop() nothing in the loop can be blocking
Flash_LED(); // indication for various functions
read_buttons(); // continually scans switch button states
////////////// BOOK FUNCTIONS ////////////////////////////
power_status(); // monitors power for book function whether on or off
Turn_page(); // turn page forward of backward funtion
Language_select(); // toggles selected language with audio prompt
Volume_control(); // function to adjust volume for audip
}
void audio_eof_mp3(const char* info) { // this function allows for multiple tracks to be played successively using variables "audio trigger xx"
if (audio_trigger > 0) {
if (audio_trigger == 1) {
audio.connecttoFS(SD, audiofilenames[audio_array1][audio_array2]);
audio_trigger--;
}
if (audio_trigger == 2) {
audio.connecttoFS(SD, audiofilenames[audio_array3][audio_array4]);
audio_trigger--;
}
if (audio_trigger == 3) {
audio.connecttoFS(SD, audiofilenames[audio_array5][audio_array6]);
audio_trigger--;
}
if (audio_trigger == 4) {
audio.connecttoFS(SD, audiofilenames[audio_array7][audio_array8]);
audio_trigger--;
}
}
}
void read_buttons() {
lid_sw_val = digitalRead(lid_sw);
page_back_but.loop(); //MUST call the loop() function first
page_forw_but.loop();
lang_select_but.loop();
pwr_but.loop();
vol_up_but.loop();
vol_dn_but.loop();
pill_confirm_but.loop();
}
void Not_yet_time() {
if ((current_Millis - prev_not_yet_time_millis > not_time_yet_time) && (lid_sw_val == 0) && (alarm_fired == false) && (pill_confirm_toggle == false) && not_yet_time_warning == false) { //lid is opened but not yet time to take meds
not_yet_time_warning = true;
digitalWrite(power_pin, HIGH);
SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI); // Initialize SPI bus for microSD Card
digitalWrite(SD_CS, HIGH);
SD.begin();
sleep_mode = true;
sleep_delay_time = 12000; // sleep in 12 seconds
audio_trigger = 1;
audio_array1 = 2;
audio_array2 = 6; // close the lid
audio.connecttoFS(SD, audiofilenames[3][3]);
Serial.println("not yet time - close the lid");
prev_not_yet_time_millis = current_Millis;
prev_sleep_delay_millis = current_Millis;
}
if ((lid_sw_val == 1) && (alarm_fired == false) && (pill_confirm_toggle == false)) {
not_yet_time_warning = false; // reset to false when lid is re-closed
}
}
void Turn_page() {
if ((page_forw_but.isReleased()) && (page_count < total_page_count) && (pwr_state)) { // page forward button is pushed and page count is less than total + power state is true
Serial.println("page forward");
book_pwr_off_delay_millis = current_Millis; // resets book power off delay
audio.connecttoFS(SD, audiofilenames[5][page_count]); // Play page no.
page_count++;
} else if ((page_back_but.isReleased()) && (page_count > 0)) { // page back button is pushed and page count is greater than zero
Serial.println("page back");
book_pwr_off_delay_millis = current_Millis; // resets book power off delay
page_count--;
audio.connecttoFS(SD, audiofilenames[5][page_count]); // Play click
}
}
void Language_select() {
if ((lang_select_but.isReleased()) && (pwr_state)) { // language slect button is pushed and release + power state is true
lang_state = !lang_state; // toggle state whenever entering loop
if (lang_state == true) {
Serial.println("isiZul language selected ");
audio.connecttoFS(SD, audiofilenames[3][7]); // isiZulu
} else {
Serial.println("english language seelected ");
audio.connecttoFS(SD, audiofilenames[3][5]); // english
}
}
}
void power_status() {
if ((pwr_but.isReleased()) && (!alarm_fired) && (!block_pwr_but)) {
digitalWrite(power_pin, HIGH);
pwr_state = !pwr_state; // toggle state whenever entering loop
SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI); // Initialize SPI bus for microSD Card
digitalWrite(SD_CS, HIGH);
SD.begin();
if (pwr_state == true) {
sleep_mode = true;
sleep_delay_time = book_pwr_off_time;
book_pwr_off_delay_millis = current_Millis;
Serial.println("power is ON ");
audio.connecttoFS(SD, audiofilenames[2][2]); // instruction
}
if (pwr_state == false) {
Serial.println("power is OFF ");
LED_trigger = false;
sleep_mode = true;
sleep_delay_time = 3000; // 3 second delay before sleep
audio.connecttoFS(SD, audiofilenames[0][5]); // click
prev_sleep_delay_millis = current_Millis;
}
}
}
void end_of_days() {
LED_trigger = false;
block_pwr_but = true;
pill_confirm_toggle = false;
rtc.clearAlarm(1);
rtc.disableAlarm(1);
alarm_fired = false;
sleep_mode = true;
sleep_delay_time = 15000;
prev_sleep_delay_millis = current_Millis;
audio.connecttoFS(SD, audiofilenames[4][13]); // end of days to take pills
}
void Volume_control() {
if ((vol_up_but.isReleased()) && (volume_level < 22) && (pwr_state)) { // vol up state taken from analogRead
//audio.connecttoFS(SD, audiofilenames[0][0]); // tick
Serial.println("Volume UP");
audio.setVolume(volume_level); // 0...21
digitalWrite(blue_LED, HIGH);
delay(200);
digitalWrite(blue_LED, LOW);
volume_level = volume_level + 4; // set volume level up
}
if ((vol_dn_but.isReleased()) && (volume_level > 0) && (pwr_state)) {
//audio.connecttoFS(SD, audiofilenames[0][0]); // tick
Serial.println("Volume DOWN");
audio.setVolume(volume_level); // 0...21
digitalWrite(blue_LED, HIGH);
delay(200);
digitalWrite(blue_LED, LOW);
volume_level = volume_level - 4; // set volume level down
}
}
void Flash_LED() {
if ((current_Millis - prev_LED_millis > LED_pause_time) && (LED_trigger == true)) {
LED_status = !LED_status; // toggle state
if (LED_status) {
if (LED_color == 3) {
digitalWrite(red_LED, HIGH); // Yellow
analogWrite(green_LED, 120);
digitalWrite(blue_LED, 0);
} else if (LED_color == 0) { //red
digitalWrite(red_LED, HIGH);
digitalWrite(green_LED, 0);
digitalWrite(blue_LED, LOW);
} else if (LED_color == 1) { // green
digitalWrite(red_LED, LOW);
analogWrite(green_LED, 255);
digitalWrite(blue_LED, LOW);
} else if (LED_color == 2) { //blue
digitalWrite(red_LED, LOW);
digitalWrite(green_LED, LOW);
digitalWrite(blue_LED, HIGH);
}
} else if (!LED_status) {
digitalWrite(red_LED, LOW); //all LEDs off
analogWrite(green_LED, 0);
digitalWrite(blue_LED, LOW);
}
prev_LED_millis = current_Millis;
}
}
void onAlarm() {
// Serial.println("Alarm occured!");
}
void print_wakeup_reason() { // for debug
esp_sleep_wakeup_cause_t wakeup_reason;
wakeup_reason = esp_sleep_get_wakeup_cause();
switch (wakeup_reason) {
case ESP_SLEEP_WAKEUP_EXT0: Serial.println("Wakeup caused by external signal using RTC_IO"); break;
case ESP_SLEEP_WAKEUP_EXT1: Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
case ESP_SLEEP_WAKEUP_TIMER: Serial.println("Wakeup caused by timer"); break;
case ESP_SLEEP_WAKEUP_TOUCHPAD: Serial.println("Wakeup caused by touchpad"); break;
case ESP_SLEEP_WAKEUP_ULP: Serial.println("Wakeup caused by ULP program"); break;
default: Serial.printf("Wakeup was not caused by light sleep: %d\n", wakeup_reason); break;
}
}
void print_GPIO_wake_up() { // Method to print the GPIO that triggered the wakeup
uint64_t GPIO_reason = esp_sleep_get_ext1_wakeup_status();
Serial.print("GPIO that triggered the wake up: GPIO ");
Serial.println((log(GPIO_reason)) / log(2), 0);
}
void RFID_info() {
if (current_Millis - prev_RFID_millis > RFID_time) {
uint8_t values[8] = { 0 };
if (tag.getDeviceUID(values)) {
Serial.print(F("RFID UID: "));
for (uint8_t i = 0; i < 8; i++) {
if (values[i] < 0x0a)
Serial.print(F("0"));
Serial.print(values[i], HEX);
Serial.print(F(" "));
}
}
Serial.println(" ");
uint8_t rev;
if (tag.getDeviceRevision(&rev)) // Read the Device Revision
{
Serial.print(F("Revision: "));
Serial.println(rev); // Print it in decimal format
} else
Serial.println(F("Could not read device revision!"));
prev_RFID_millis = current_Millis;
}
}
void write_RFID_tag() {
// Clear the first 256 bytes of user memory
uint8_t tagMemory[256];
memset(tagMemory, 0, 256);
Serial.println("Writing 0x0 to the first 256 bytes of user memory.");
tag.writeEEPROM(0x0, tagMemory, 256);
// -=-=-=-=-=-=-=-=-
// Write the Type 5 CC File - starting at address zero
Serial.println(F("Writing CC_File"));
tagwriteCCFile8Byte();
// -=-=-=-=-=-=-=-=-
// Write one NDEF UTF-8 Text record
uint16_t memLoc = tag.getCCFileLen();
Serial.println(F("Writing the first NDEF Text record"));
char buffer[85];
int days = 3;
int alarm1_hr = 8;
int alarm1_min = 30;
sprintf(buffer, "READ USER has taken their medication for %d days. Alarm Time is set for %d:%d ", days, alarm1_hr, alarm1_min);
tag.writeNDEFText(buffer, &memLoc, true, true); // MB=1, ME=1
}
When I compile I get the following error/s:
C:\Users\mbiasotti\Documents\Arduino\sketchbook\READ\Read_final_Rev5_firebeetle\Read_final_Rev5_firebeetle.ino: In function 'void write_RFID_tag()':
C:\Users\mbiasotti\Documents\Arduino\sketchbook\READ\Read_final_Rev5_firebeetle\Read_final_Rev5_firebeetle.ino:498:3: error: 'tagwriteCCFile8Byte' was not declared in this scope
}
^
C:\Users\mbiasotti\Documents\Arduino\sketchbook\READ\Read_final_Rev5_firebeetle\Read_final_Rev5_firebeetle.ino:503:25: error: 'class SFE_ST25DV64KC' has no member named 'getCCFileLen'
void end_of_days() {
^
C:\Users\mbiasotti\Documents\Arduino\sketchbook\READ\Read_final_Rev5_firebeetle\Read_final_Rev5_firebeetle.ino:511:7: error: 'class SFE_ST25DV64KC' has no member named 'writeNDEFText'
sleep_delay_time = 15000;
^~~~~~~~~~~~~
exit status 1
Compilation error: 'tagwriteCCFile8Byte' was not declared in this scope
I unclear as to why it will not compile when I’m using the same library and same commands in this larger sketch? Could it be other libraries that are interferring with the SFE_ST25DV64KC library?