Чтение значения из файла внутри SD-карты
Можно ли считать значение из файла внутри SD-карты?
Я пытаюсь начать с примера кода
/*
SD card read/write
This example shows how to read and write data to and from an SD card file
The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
created Nov 2010
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
This example code is in the public domain.
*/
#include <SPI.h>
#include <SD.h>
File myFile;
void setup() {
// Открытие последовательной связи и ожидание открытия порта:
Serial.begin(9600);
while (!Serial) {
; // ждем подключения последовательного порта. Требуется только для родного порта USB
}
Serial.print("Initializing SD card...");
if (!SD.begin(53)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
// открываем файл. обратите внимание, что одновременно может быть открыт только один файл,
// так что вы должны закрыть это, прежде чем открывать другое.
myFile = SD.open("test.txt", FILE_WRITE);
// если файл открылся нормально пишем в него:
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.println("testing1 1, 2, 3.");
myFile.println("testing2 1, 2, 3.");
myFile.println("testing3 1, 2, 3.");
// закрываем файл:
myFile.close();
Serial.println("done.");
} else {
// если файл не открылся, вывести ошибку:
Serial.println("error opening test.txt");
}
// повторно открыть файл для чтения:
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("test.txt:");
// читаем из файла, пока в нем больше ничего нет:
while (myFile.available()) {
Serial.write(myFile.read());
}
// закрываем файл:
myFile.close();
} else {
// если файл не открылся, вывести ошибку:
Serial.println("error opening test.txt");
}
}
void loop() {
// после настройки ничего не происходит
}
но здесь он прочитал все содержимое файла, я хочу прочитать только тестирование 3 части. Спасибо за помощь
@Francesco Valla, 👍0
Обсуждение2 ответа
У вас есть 2 варианта сделать это, в зависимости от того, что именно вы хотите прочитать и как устроен ваш файл.
- Читайте с самого начала, пока не найдете то, что вам нужно. Выбросьте (только не оставляйте) то, что вам не нужно.
- Используйте метод
File::seek(uint32_t)
, чтобы перейти к определенному байту в файле и прочитать оттуда. Полезно, только если вы уже знаете, где в файле находятся ваши данные.
как с ответом номер 1? Спасибо, @Francesco Valla
Точно так же, как и в примере кода. Вам просто нужно, чтобы программа проверила прочитанное и приняла решение, хочет она этого или нет., @Majenko
да, но я немного нуб, как? спасибо еще раз, @Francesco Valla
Вот подсказка: «Файл» — это «Поток». Так же и "Сериал". То, что вы можете сделать с «Serial», вы можете сделать с «File»., @Majenko
пример пожалуйста, @Francesco Valla
В вашем опубликованном вопросе уже есть пример чтения из файла., @Nick Gammon
я нашел это решение с использованием strcmp: когда я читаю файл, я сравниваю результат str, полученный из потока файла
/*
SD-карта чтение/запись
В этом примере показано, как читать и записывать данные в файл SD-карты и из него.
Схема:
* SD-карта подключена к шине SPI следующим образом:
** MOSI - контакт 11
** МИСО - контакт 12
** CLK — контакт 13
** КС - контакт 4
создано в ноябре 2010 г.
Дэвид А. Меллис
изменено 9 апреля 2012 г.
Том Айгоу
Этот пример кода находится в общественном достоянии.
*/
#include <SD.h>
File myFile;
char buf[10];
void setup()
{
// Открытие последовательной связи и ожидание открытия порта:
Serial.begin(9600);
while (!Serial) {
; // ждем подключения последовательного порта. Нужен только для Леонардо
}
Serial.print("Initializing SD card...");
// На плате Ethernet Shield CS — это контакт 4. По умолчанию он установлен как выход.
// Обратите внимание, что даже если он не используется в качестве вывода CS, аппаратный вывод SS
// (10 на большинстве плат Arduino, 53 на Mega) нужно оставить как выход
// или функции библиотеки SD не будут работать.
pinMode(10, OUTPUT);
if (!SD.begin(53)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
// повторно открыть файл для чтения:
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("test.txt:");
// читаем из файла, пока в нем больше ничего нет:
while (myFile.available()) {
myFile.read(buf,2);
if(strncmp(buf, "12", 2) == 0)//для длины я использую 2, потому что я ищу число с 2 цифрами
{
Serial.println("Match!");
}
break;
}
}
// закрываем файл:
myFile.close();
} else {
// если файл не открылся, вывести ошибку:
Serial.println("error opening test.txt");
}
}
void loop()
{
// после настройки ничего не происходит
}
- Как увеличить скорость записи на SD-карту в Ардуино
- SD-карта не инициализируется
- Что означают эти контакты? Куда мне их подключить?
- Режимы открытия файлов на SD-карте Arduino добавление/перезапись
- Какие контакты можно использовать для выбора микросхемы (CS, CC) на Arduino Nano Every?
- Понимание того, почему следует избегать «String» и альтернативных решений
- Сделать CS (chip select) для работаты в SPI (для и SD карты и OLED)
- Можно ли подключить экран SD-карты к плате Digispark ATtiny85?
Да, это возможно. Пожалуйста, будьте более конкретными в том, что ваш фактический вопрос. Как и сейчас, это слишком расплывчато, чтобы на него можно было ответить., @Gerben
У вас есть какая-то часть этой работы? Например, у вас есть устройство со слотом для SD-карты? Он подключен к вашей Arduino? Ты умеешь что-нибудь читать или писать? Пожалуйста, попробуйте начать, а когда вы застрянете, опубликуйте конкретный вопрос с кодом., @Mark Smith
*возможно ли считать значение из файла внутри SD-карты?* - конечно можно. Иначе зачем бы вы подключали один?, @Nick Gammon