Передача последовательного дампа в файл SD-карты
Я использую модуль RFID для чтения чипов NFC mifare, а в библиотеке есть только методы для отправки данных на последовательный монитор. Мне нужно, чтобы они были сохранены в файле SD-карты. Я добавлял в файлы библиотеки собственные методы для возврата строк, которые затем записывал на SD-карту, но это проблема; Должен быть более быстрый способ просто автоматически передать все данные, но я не знаю, как это сделать в cpp.
Вот пример функции для дампа в последовательный порт, который необходимо передать в файл на SD- карте.
void MFRC522::PICC_DumpDetailsToSerial(Uid *uid) {
Serial.print(F("Card UID:"));
for (byte i = 0; i < uid->size; i++) {
if(uid->uidByte[i] < 0x10)
Serial.print(F(" 0"));
else
Serial.print(F(" "));
Serial.print(uid->uidByte[i], HEX);
}
Serial.println();
// САК
Serial.print(F("Card SAK: "));
if(uid->sak < 0x10)
Serial.print(F("0"));
Serial.println(uid->sak, HEX);
// (рекомендуемый) тип PICC
PICC_Type piccType = PICC_GetType(uid->sak);
Serial.print(F("PICC type: "));
Serial.println(PICC_GetTypeName(piccType));
}
Спасибо!
@cds333, 👍0
Обсуждение1 ответ
Пусть объекты MFRC522 запомнят, куда вы хотите, чтобы они отправляли выходные данные. добавив член данных в класс следующим образом:
private:
Print &output;
Это ссылка на объект Печать
, т. е. любой объект, где вы можете
print()
или println()
. Эта ссылка должна быть инициализирована в
конструктор, вот такой
MFRC522:MFRC522(...other arguments..., Print &my_output = Serial)
: ...other initializations..., output(my_output)
{
...constructor body...
}
Обратите внимание, что по умолчанию вывод
инициализируется как ссылка на
Серийный
. Таким образом, если вы явно не попросите, чтобы вывод был выполнен
в другом месте класс будет вести себя так же, как и раньше.
Последний шаг — изменить в реализации класса каждый
ссылка на Serial
по output
. Это просто глобальная находка и
заменить.
На этом этапе класс MFRC522
можно использовать точно так же, как и раньше, и он
будет вести себя одинаково. Это означает, что каждый пользователь библиотеки
ваша модифицированная версия должна быть в состоянии использовать без проблем. я таким образом
рекомендуем вам отправить изменения первоначальному автору, чтобы они
есть шанс быть включенным в каноническую версию
библиотека.
Теперь, если вы хотите, чтобы эти выходные данные отладки были отправлены в другое место, просто укажите пункт назначения в качестве последнего аргумента конструктора:
MFRC522 my_RFID_module(...other arguments..., my_SD_card_file);
Пока пункт назначения является экземпляром виртуального класса Print
(в принципе, все, что вы можете print()
, должно быть в порядке), это должно работать
как и ожидалось.
- Использование экрана SD-карты на Arduino Due
- Как импортировать данные с SD-карты на Arduino на компьютер, используя последовательный/COM-порт Arduino?
- Serial.print печатает, а lcd.print - нет.
- Неожиданный символ добавляется в буферный массив char в serial monitor только при инициализации SD-карты
- Arduino не записывает полное предложение NMEA в файл SD-карты
- Считывание последовательной строки анализируется и записывается на SD-карту
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
у arduino нет операционной системы, поэтому нет «конвейера», как в linux....... возможно, есть способ переопределить объект Serial, @jsotola