Add files via upload
parent
e44129c2ca
commit
26dfbf2bbe
@ -0,0 +1,234 @@
|
||||
#include "ST25DVSensor.h"
|
||||
#include <SPI.h>
|
||||
#include <SD.h>
|
||||
|
||||
#if defined(ARDUINO_B_L4S5I_IOT01A)
|
||||
#define GPO_PIN PE4
|
||||
#define LPD_PIN PE2
|
||||
#define SDA_PIN PB11
|
||||
#define SCL_PIN PB10
|
||||
#define WireNFC MyWire
|
||||
TwoWire MyWire(SDA_PIN, SCL_PIN);
|
||||
ST25DV st25dv(12, -1, &MyWire);
|
||||
#else
|
||||
#define DEV_I2C Wire
|
||||
ST25DV st25dv(12, -1, &DEV_I2C);
|
||||
#endif
|
||||
String last_read;
|
||||
bool cleared = false;
|
||||
const int chipSelect = 7;
|
||||
|
||||
void beep(int pitch, int duration, int loudness){
|
||||
tone(24, pitch, loudness);
|
||||
delay(duration);
|
||||
noTone(24);
|
||||
delay(10);
|
||||
}
|
||||
|
||||
void clearFile(const char* filename) {
|
||||
if (SD.begin(chipSelect)) {
|
||||
// Open the file in write mode without appending
|
||||
File myFile = SD.open(filename, FILE_WRITE | O_TRUNC);
|
||||
|
||||
if (myFile) {
|
||||
myFile.close();
|
||||
Serial.println("File cleared!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void printLine(){
|
||||
for(int i = 0; i < 50; i++){
|
||||
Serial.print('-');
|
||||
}
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
void printStart(){
|
||||
Serial.println(F(" ╔═══╦═══╦══╦═══╗"));
|
||||
Serial.println(F(" ║╔═╗║╔══╩╣╠╩╗╔╗║"));
|
||||
Serial.println(F(" ║╚═╝║╚══╗║║─║║║║"));
|
||||
Serial.println(F(" ║╔╗╔╣╔══╝║║─║║║║"));
|
||||
Serial.println(F(" ║║║╚╣║──╔╣╠╦╝╚╝║"));
|
||||
Serial.println(F(" ╚╝╚═╩╝──╚══╩═══╝"));
|
||||
printLine();
|
||||
Serial.println(F("By Ruben Schoonbaert"));
|
||||
Serial.println(F("Written 29/12/2023"));
|
||||
printLine();
|
||||
delay(1000);
|
||||
Serial.println(F("COMMANDS:"));
|
||||
Serial.println(F("$printFile -> prints all records on the SD card"));
|
||||
Serial.println(F("$clearFile -> clears all records on the SD card"));
|
||||
Serial.println(F("$clearRFID -> removes last entry from RFID tag"));
|
||||
Serial.println(F("$addRecord <record> -> Adds new record to SD & RFID Tag"));
|
||||
Serial.println(F("$testBuzzer -> Tests integrated piezo buzzer"));
|
||||
Serial.println(F("$testLED -> Tests integrated LED"));
|
||||
printLine();
|
||||
}
|
||||
|
||||
void printFile(const char* filename) {
|
||||
if (SD.begin(chipSelect)) {
|
||||
// Open the file in read mode
|
||||
File myFile = SD.open(filename, FILE_READ);
|
||||
printLine();
|
||||
Serial.println(F(" Printing SD-Card content "));
|
||||
printLine();
|
||||
if (myFile) {
|
||||
while (myFile.available()) {
|
||||
Serial.write(myFile.read());
|
||||
}
|
||||
|
||||
myFile.close();
|
||||
printLine();
|
||||
} else {
|
||||
Serial.println(F("Error opening file for reading."));
|
||||
digitalWrite(25, HIGH);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool isDuplicate(const char* filename, const String& newString) {
|
||||
File file = SD.open(filename);
|
||||
if (file) {
|
||||
while (file.available()) {
|
||||
String line = file.readStringUntil('\n');
|
||||
line.trim();
|
||||
if (line.equals(newString)) {
|
||||
file.close();
|
||||
return true; // Duplicate found
|
||||
}
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
return false; // No duplicate found
|
||||
}
|
||||
|
||||
void addRecord(String record){
|
||||
const char uri_write_protocol[] = URI_ID_0x01_STRING;
|
||||
if(st25dv.writeURI(uri_write_protocol, record, "")) {
|
||||
Serial.println(F("Write to RFID Tag failed!"));
|
||||
digitalWrite(25, HIGH);
|
||||
while(1);
|
||||
} else {
|
||||
if(record != "!ignore"){
|
||||
Serial.print(F("Written : \""));
|
||||
Serial.print(record);
|
||||
Serial.print(F("\" to RFID tag succesfully"));
|
||||
Serial.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
pinMode(24, OUTPUT);
|
||||
pinMode(25, OUTPUT);
|
||||
digitalWrite(25, HIGH);
|
||||
printStart();
|
||||
// The wire instance used can be omitted in case you use default Wire instance
|
||||
if(st25dv.begin() == 0) {
|
||||
Serial.println(F("System Init done!"));
|
||||
beep(2000, 100, 50);
|
||||
} else {
|
||||
Serial.println("System Init failed!");
|
||||
digitalWrite(25, HIGH);
|
||||
while(1);
|
||||
}
|
||||
delay(500);
|
||||
digitalWrite(25, LOW);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
String uri_read;
|
||||
if (Serial.available() > 0) {
|
||||
String command = Serial.readStringUntil('\n');
|
||||
command.trim();
|
||||
|
||||
if (command.equals("$clearFile")) {
|
||||
clearFile("records.txt");
|
||||
cleared = true;
|
||||
beep(2000, 100, 50);
|
||||
return;
|
||||
} else if (command.equals("$printFile")){
|
||||
beep(2000, 100, 50);
|
||||
printFile("records.txt");
|
||||
} else if (command.startsWith("$addRecord ")) {
|
||||
// Extract the record from the command
|
||||
String recordToAdd = command.substring(11);
|
||||
// Add the record to the file
|
||||
addRecord(recordToAdd);
|
||||
} else if (command.equals("$clearRFID")){
|
||||
addRecord("!ignore");
|
||||
Serial.println(F("Cleared RFID"));
|
||||
beep(2000, 100, 50);
|
||||
} else if (command.equals("$testLED")){
|
||||
bool state = false;
|
||||
for(int i = 0; i<10; i++){
|
||||
digitalWrite(25, state);
|
||||
state = !state;
|
||||
delay(100);
|
||||
}
|
||||
}
|
||||
else if (command.equals("$testBuzzer")){
|
||||
int melody[] = {262, 330, 392, 523, 392, 330, 262, 196, 262};
|
||||
for (int i = 0; i < sizeof(melody) / sizeof(melody[0]); i++) {
|
||||
delay(10);
|
||||
beep(melody[i], 200, 100);
|
||||
}
|
||||
|
||||
} else {
|
||||
Serial.println("unrecognised command!");
|
||||
beep(500, 500, 500);
|
||||
}
|
||||
}
|
||||
|
||||
if(st25dv.readURI(&uri_read)) {
|
||||
Serial.println("Read failed!");
|
||||
digitalWrite(25, HIGH);
|
||||
while(1);
|
||||
}
|
||||
if(uri_read != last_read){
|
||||
if (SD.begin(chipSelect)) {
|
||||
if(uri_read.startsWith("www.")){
|
||||
uri_read = uri_read.substring(4);
|
||||
}
|
||||
else if(uri_read.startsWith("http://www.")){
|
||||
uri_read = uri_read.substring(11);
|
||||
}
|
||||
else if(uri_read.startsWith("http://")){
|
||||
uri_read = uri_read.substring(7);
|
||||
}
|
||||
else if(uri_read.startsWith("https://")){
|
||||
uri_read = uri_read.substring(8);
|
||||
}
|
||||
if(uri_read != "!ignore"){
|
||||
// Check if the last line of the file is the same as the string
|
||||
if (!isDuplicate("records.txt", uri_read)) {
|
||||
if(!cleared){
|
||||
Serial.print(F("New record detected = "));
|
||||
} else {
|
||||
Serial.print(F("current RFID record = "));
|
||||
}
|
||||
cleared = false;
|
||||
Serial.print(uri_read);
|
||||
Serial.println();
|
||||
|
||||
File myFile = SD.open("records.txt", FILE_WRITE);
|
||||
if (myFile) {
|
||||
// Write to the file
|
||||
myFile.println(uri_read);
|
||||
// Close the file
|
||||
myFile.close();
|
||||
delay(100);
|
||||
beep(800, 100, 50);
|
||||
delay(10);
|
||||
beep(1000, 100, 50);
|
||||
}
|
||||
}
|
||||
}
|
||||
last_read = uri_read;
|
||||
}
|
||||
}
|
||||
delay(500);
|
||||
digitalWrite(25, LOW);
|
||||
}
|
Loading…
Reference in New Issue