Прочитать только одну строку на SD-карте
У меня есть код на C++, но я не могу преобразовать его в язык Arduino.
Я просто хочу спросить, что такое функция getline()
(код C++) в Arduino?
Я просто хотел записать первую строку на свою SD-карту... Я могу отображать только весь текст, находящийся на моей SD-карте...
Пример:
line1 <- only this line should display(and this line will delete in text
file... but that is another issue... i will just focus to get the
line1 and get the value)
line2
line3
line4
line5
Этот код отображает все строки
#include <SPI.h>
#include <SD.h>
File myFile;
void setup() {
// Открываем последовательную связь и ждем открытия порта:
Serial.begin(9600);
while (!Serial) {
; // ждем подключения последовательного порта. Требуется только для собственного порта USB
}
Serial.print("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
// открыть файл. Обратите внимание, что одновременно может быть открыт только один файл,
// поэтому вам придется закрыть это, прежде чем открывать другое.
myFile = SD.open("test.txt", FILE_WRITE);
// повторно открыть файл для чтения:
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() {
// ничего не происходит после настройки
}
@awesome23, 👍2
Обсуждение2 ответа
Встроенного способа сделать это нет, но у вас под рукой есть все необходимые инструменты.
Конец строки должен обозначаться десятичным числом 10, также известным как символ LF (перевод строки). Итак, вы продолжаете читать, пока не встретите LF или конец файла, который и есть вся строка, которую вы хотите прочитать.
while (file.available() && file.peek() != 10) // peek возвращает следующий символ без увеличения индекса чтения
file.read();
Этот код делает именно это. Теперь вы можете либо сразу сохранить прочитанные байты в буфере (достаточно большом!), либо узнать количество байтов заранее, чтобы впоследствии создать буфер точного размера и использовать перегрузку read(buffer, length) для чтения всех байтов одновременно.
Пожалуйста, помните, что символ LF должен быть там, чтобы его можно было прочитать. Так что если вы создаете файлы, обязательно разместите его. (большинство текстовых редакторов для настольных компьютеров делают это за вас)
Пример:
char buffer[20];
uint8_t i = 0;
while (file.available() && file.peek() != '\n' && i < 19) // обратите внимание, как это также предотвращает переполнение буфера (максимум 18, чтобы оставить место для '\0'!)
{
buffer[i] = file.read();
i++;
}
buffer[i + 1] = '\0'; // хорошей практикой является завершение строк завершающим символом NULL
Я понимаю, что ты говоришь, но извини @mystery, я даже не знаю, какую функцию мне использовать :( Я просто новичок в Arduino..., @awesome23
Если я правильно вас понял, это зависит от того, что вы хотите сделать с этим кодом. Вы хотите выполнить строки кода C++ на SD-карте или просто пытаетесь преобразовать то, что у вас есть на C++, в "Arduinoese?"
Если вам нужно, вы можете выполнить код C/C++ на основе микроконтроллера на вашем Arduino, если в нем есть AVR, и у вас есть соответствующий набор инструментов AVR.
Книга Эллиота Уильямса «Make: AVR Programming» — отличное место, чтобы узнать об этом.
Вы можете запустить C/C++ на **любой** плате Arduino, не только на AVR, и если вы можете использовать плату с Arduino IDE, то у вас уже есть набор инструментов. Это точно, потому что эскизы Arduino — это C++., @per1234
- Печать string and integer LCD
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Отправьте несколько значений int из Python в Arduino, используя pySerial
- Глобальные переменные занимают много места в динамической памяти.
- (Код ультразвукового датчика: такого файла или каталога нет)
- rfid_default_keys проверить с помощью RC522
- Команда strtok() с Serial связью
Вы будете рады узнать, что [языка Arduino не существует](https://hackaday.com/2015/07/28/embed-with-elliot-there-is-no-arduino-language/). Файлы .ino Arduino написаны на C++! Единственное отличие в том, что Arduino IDE автоматически генерирует прототипы функций, если вы не предоставите их сами, но это не делает его другим языком., @per1234