Доброго времени суток. Столкнулся с проблеммой: записи и чтения ID RFID метки в память. Считываю ID с метки, записываю в память FM24C02C. Считываю ID из памяти, считываю ID с метки сравниваю и… они не совпадают! Хотя в COM терминале они обсолютно одинаковы. Если ID прописать: String idkey00 = “ID метки”; и сравнить со считываным с метки - они совподают.
/* arduino-1.8.15 плата arduino NANO
*/
#include <avr/wdt.h>
/* Wire */
#include <Wire.h>
//#include "FM24I2C.h"
#define ROM 0x50 // I2C адрес памяти
/* SoftwareSerial */
#include <SoftwareSerial.h>
#define DISABLED -1
SoftwareSerial rfid(03, DISABLED); // RX, TX
char adrT1[8]; // датчик температуры в шкафу
char adrT2[8]; // датчик температуры в подвале
char adrV12[8]; // датчик АКБ 12 вольт
char adrV24[8]; // датчик АКБ 24 вольта
String idkey00 = "30005FCEE4"; // id RFID ключей
String idkey01;
String idkey02;
String idkey03;
String idkey04;
String idkey05;
String idkey06;
String idkey07;
String idkey08;
String idkey09;
bool flagIdkey = 0; // флаг совпадения RFID метки
String str;
String soldData;
String spData; // переменная для считывания UART
uint8_t wireEn = 1;
uint8_t rfwireEn;
bool writeUart = 0; // флаг записи через UART
/***** SETUP ******************************************************************/
void setup()
{ Serial.begin(9600);
Wire.begin();
//readKeyEEPROM("K00");
readKeyEEPROM("K01"); readKeyEEPROM("K02"); readKeyEEPROM("K03"); readKeyEEPROM("K04");
readKeyEEPROM("K05"); readKeyEEPROM("K06"); readKeyEEPROM("K07"); readKeyEEPROM("K08"); readKeyEEPROM("K09");
//idkey00 = "30005FCEE4";
Serial.println("readKeyEnd");
rfid.begin(9600);
}
/***** VOID ******************************************************************/
void loop()
{ readrfid();
serial();
}
/***** RFID ******************************************************************/
inline void readrfid()
{ String strData;
boolean recievedFlag = 0;
while (rfid.available() > 0) // ПОКА есть что то на вход
{ strData += (char)rfid.read(); // забиваем строку принятыми данными
recievedFlag = 1; // поднять флаг что получили данные
delay(5); // ЗАДЕРЖКА. Без неё работает некорректно!
}
if (recievedFlag) // если данные получены
{ strData.remove(10, 3);
if (soldData != strData)
{ soldData = strData;
Serial.print(str + "length() " + soldData.length() + " Считано: -" + soldData + "-");
if (soldData.equals(idkey00)) Serial.print(F("ключ совпал 0"));
if (soldData.equals(idkey01)) Serial.print(F("ключ совпал 1"));
if (soldData.equals(idkey02)) Serial.print(F("ключ совпал 2"));
if (soldData == idkey03) Serial.print(F("ключ совпал 3"));
if (soldData == idkey04) Serial.print(F("ключ совпал 4"));
if (soldData == idkey05) Serial.print(F("ключ совпал 5"));
if (soldData == idkey06) Serial.print(F("ключ совпал 6"));
if (soldData == idkey07) Serial.print(F("ключ совпал 7"));
if (soldData == idkey08) Serial.print(F("ключ совпал 8"));
if (soldData == idkey09) Serial.print(F("ключ совпал 9"));
Serial.println("");
}
}
}
/***** SERIAL ******************************************************************/
inline void serial()
{ boolean rcvdFlag = false;
while (Serial.available() > 0) // ПОКА есть что то на вход
{ spData += (char)Serial.read(); // забиваем строку принятыми данными
rcvdFlag = true; // поднять флаг что получили данные
delay(2); // ЗАДЕРЖКА. Без неё работает некорректно!
}
if (rcvdFlag) // если данные получены
{ String eerom = spData.substring(0, 3);
if (eerom == "AT")
{ writeUart = 1;
Serial.println(F(" Для чтения из памяти ID ключей: вводим команду - key ."));
Serial.println(F(" Для записи ID ключа приложите его к считывателю, после считывания вводим: KХХ ,"));
Serial.println(F(" где ХХ номер ячейки от 00 до 09. '/n' Для выхода ввелите: end ."));
}
if (writeUart == 1)
{ if (eerom.substring(0, 2) == "K0" ) writeKeyEEPROM(eerom);
else if (eerom == "key")
{ readKeyEEPROM("K00"); readKeyEEPROM("K01"); readKeyEEPROM("K02"); readKeyEEPROM("K03"); readKeyEEPROM("K04");
readKeyEEPROM("K05"); readKeyEEPROM("K06"); readKeyEEPROM("K07"); readKeyEEPROM("K08"); readKeyEEPROM("K09");
}
else if (eerom == "end")
{ writeUart = 0;
Serial.println(F(" сеанс завершен"));
wdt_enable(WDTO_2S);
}
spData = ""; // очистить
}
else Serial.println(F("Введите команду 'AT' "));
spData = ""; // очистить
}
}
/*....................................EEROM..............................*/
/***функция записи в EEROM ID ключей*******************************************************/
void writeKeyEEPROM(String EEROM)
{ char addr[10];
char addend[2];
uint8_t adrStart; // адрес начальной ячейки памяти для считывания
uint8_t length = 8; // число байт для передачи.
soldData.toCharArray(addr, 11); // переводим строку в массив
addend[0] = addr[8];
addend[1] = addr[9];
if (EEROM == "K00")
{ adrStart = 48; Serial.print(F("Ключ 0 запись"));
}
if (EEROM == "K01")
{ adrStart = 64; Serial.print(F("Ключ 1 запись"));
}
if (EEROM == "K02")
{ adrStart = 80; Serial.print(F("Ключ 2 запись"));
}
if (EEROM == "K03")
{ adrStart = 96; Serial.print(F("Ключ 3 запись"));
}
if (EEROM == "K04")
{ adrStart = 112; Serial.print(F("Ключ 4 запись"));
}
if (EEROM == "K05")
{ adrStart = 128; Serial.print(F("Ключ 5 запись"));
}
if (EEROM == "K06")
{ adrStart = 144; Serial.print(F("Ключ 6 запись"));
}
if (EEROM == "K07")
{ adrStart = 160; Serial.print(F("Ключ 7 запись"));
}
if (EEROM == "K08")
{ adrStart = 176; Serial.print(F("Ключ 8 запись"));
}
if (EEROM == "K09")
{ adrStart = 192; Serial.print(F("Ключ 9 запись"));
}
Serial.println(str + " ячейка памяти: " + adrStart);
//Serial.println("");
// записываем 8 байт на страничку
Wire.beginTransmission(ROM);
Wire.write(adrStart);
Wire.write(addr, length);
byte a = Wire.endTransmission(); // закрыть передачу
delay(10);
if (a == 0) Serial.print(F("запись 8 bit прошла успешно! "));
else Serial.print(F("Ошибка записи!"));
// добпвляем еще два байта на следующую страничку (спицифика FM24C02C)
Wire.beginTransmission(ROM);
Wire.write(adrStart + 8);
Wire.write(addend, 2);
a = Wire.endTransmission(); // закрыть передачу
delay(10);
if (a == 0) Serial.println(F(" + запись 2 bit прошла успешно!"));
else Serial.println(F("Ошибка записи!"));
if (EEROM == "K00")readKeyEEPROM("K00");
if (EEROM == "K01")readKeyEEPROM("K01");
if (EEROM == "K02")readKeyEEPROM("K02");
if (EEROM == "K03")readKeyEEPROM("K03");
if (EEROM == "K04")readKeyEEPROM("K04");
if (EEROM == "K05")readKeyEEPROM("K05");
if (EEROM == "K06")readKeyEEPROM("K06");
if (EEROM == "K07")readKeyEEPROM("K07");
if (EEROM == "K08")readKeyEEPROM("K08");
if (EEROM == "K09")readKeyEEPROM("K09");
}
/***** чтение KeyEEROM addr[10] ******************************************************************/
// считываем из памяти 10 ключей EEROM = 1-10
void readKeyEEPROM(String EEROM)
{ char addr[10];
uint8_t adrStart; // адрес начальной ячейки памяти для считывания
uint8_t length = 10; // число байт для приема.
if (EEROM == "K00")
{ adrStart = 48; Serial.print(F("K00 ID ключа 00 "));
}
if (EEROM == "K01")
{ adrStart = 64; Serial.print(F("K01 ID ключа 01 "));
}
if (EEROM == "K02")
{ adrStart = 80; Serial.print(F("K02 ID ключа 02 "));
}
if (EEROM == "K03")
{ adrStart = 96; Serial.print(F("K03 ID ключа 03 "));
}
if (EEROM == "K04")
{ adrStart = 112; Serial.print(F("K04 ID ключа 04 "));
}
if (EEROM == "K05")
{ adrStart = 128; Serial.print(F("K05 ID ключа 05 "));
}
if (EEROM == "K06")
{ adrStart = 144; Serial.print(F("K06 ID ключа 06 "));
}
if (EEROM == "K07")
{ adrStart = 160; Serial.print(F("K07 ID ключа 07 "));
}
if (EEROM == "K08")
{ adrStart = 176; Serial.print(F("K08 ID ключа 08 "));
}
if (EEROM == "K09")
{ adrStart = 192; Serial.print(F("K09 ID ключа 09 "));
}
Serial.print(str + " Чтение - adrStart; " + adrStart + " считываем ");
Wire.beginTransmission(ROM);
Wire.write(adrStart);
Wire.endTransmission();
Wire.requestFrom(ROM, length);
delay(5);
if (Wire.available())
{ for (int i = 0; i < length ; i++)
{ addr[i] = Wire.read();
delay(1);
}
}
if (EEROM == "K00")
{ idkey00 = String(addr);
Serial.print(str + " - " + idkey00 + " - ");
}
if (EEROM == "K01")
{ idkey01 = String(addr);
Serial.print(str + " - " + idkey01 + " - ");
}
if (EEROM == "K02")
{ idkey02 = String(addr);
Serial.print(str + " - " + idkey02 + " - ");
}
if (EEROM == "K03")
{ idkey03 = String(addr);
Serial.print(str + " - " + idkey03 + " - ");
}
if (EEROM == "K04")
{ idkey04 = String(addr);
Serial.print(str + " - " + idkey04 + " - ");
}
if (EEROM == "K05")
{ idkey05 = String(addr);
Serial.print(str + " - " + idkey05 + " - ");
}
if (EEROM == "K06")
{ idkey06 = String(addr);
Serial.print(str + " - " + idkey06 + " - ");
}
if (EEROM == "K07")
{ idkey07 = String(addr);
Serial.print(str + " - " + idkey07 + " - ");
}
if (EEROM == "K08")
{ idkey08 = String(addr);
Serial.print(str + " - " + idkey08 + " - ");
}
if (EEROM == "K09")
{ idkey09 = String(addr);
Serial.print(str + " - " + idkey09 + " - ");
}
Serial.println("");
delay (500);
}