В настоящее время я пишу библиотеку для Arduino, используя C ++, чтобы взять шестнадцатеричную строку RFID из 8 символов из считывателя и преобразовать эту строку в байты, обрабатывая каждые два символа как часть одного байта, так что «1234ABCD» становится 0X12, 0X34, 0XAB, 0XCD.Эти байты затем преобразуются в целочисленные значения, которые их представляют, так что предыдущими значениями становятся 18, 52, 171 и 205 соответственно.Эти целые числа затем будут помещены в массив и возвращены вызывающей стороне.Поскольку строка RFID является шестнадцатеричной, я умножаю целочисленное значение первого символа в каждой паре на 16.
Библиотека C ++:
int AccessPortal::hexToInt(char character) {
if(int(character) - '0' < 10) {
return int(character) - '0';
}
else {
if(isupper(character)) {
return int(character) - '7';
}
else {
return int(character) - 'W';
}
}
}
int* AccessPortal::getByteArray(std::string uid) {
int byteArray[4];
int intArray[8];
int counter = 0;
for(int i = 0; i < 8; i++) {
if(i % 2 == 0) {
intArray[i] = hexToInt(uid[i]) * 16;
}
else {
intArray[i] = hexToInt(uid[i]);
}
}
for(int i = 1; i < 8; i = i + 2) {
byteArray[counter] = intArray[i - 1] + intArray[i];
counter ++;
}
return byteArray;
}
Код Arduino:
void setup() {
// put your setup code here, to run once:
AccessPortal access(); //constructor
int *h;
h = access.getByteArray("1234ABCD");
for(int i = 0; i < 4; i++) {
Serial.println(h[i]);
}
}
void loop() {
// put your main code here, to run repeatedly:
}
Однако, когда я запускаю программу, в последовательный порт выводится следующее:
1073741740
1073741680
1073670364
1075849820
Это странно, потому что, когда я запускаю функции из библиотеки C ++ отдельно и печатаю результаты в терминал, значенияверны.Я предполагаю, что это означает, что ошибка происходит в способе возврата массива и / или доступа к нему в коде Arduino, однако я не уверен.