Прочитать только одну строку на 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() {
       // ничего не происходит после настройки
     }

, 👍2

Обсуждение

Вы будете рады узнать, что [языка Arduino не существует](https://hackaday.com/2015/07/28/embed-with-elliot-there-is-no-arduino-language/). Файлы .ino Arduino написаны на C++! Единственное отличие в том, что Arduino IDE автоматически генерирует прототипы функций, если вы не предоставите их сами, но это не делает его другим языком., @per1234


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


-1

Если я правильно вас понял, это зависит от того, что вы хотите сделать с этим кодом. Вы хотите выполнить строки кода C++ на SD-карте или просто пытаетесь преобразовать то, что у вас есть на C++, в "Arduinoese?"

Если вам нужно, вы можете выполнить код C/C++ на основе микроконтроллера на вашем Arduino, если в нем есть AVR, и у вас есть соответствующий набор инструментов AVR.

Книга Эллиота Уильямса «Make: AVR Programming» — отличное место, чтобы узнать об этом.

,

Вы можете запустить C/C++ на **любой** плате Arduino, не только на AVR, и если вы можете использовать плату с Arduino IDE, то у вас уже есть набор инструментов. Это точно, потому что эскизы Arduino — это C++., @per1234