File.read() всегда возвращает значение -1
Я пытаюсь распечатать текстовый файл с SD-карты на SSD1306, используя библиотеку u8x8. Вот текущий код:
#include <SD.h>
#include <Arduino.h>
#include <U8x8lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
/*
Этот пример, вероятно, не будет работать с SSD1606 из
-за замены внутреннего буфера
*/
#define maxChar 128
#define rows 8
#define cols 16
File myFile;
int x = 0;
int y = 0;
char c;
void setup()
{
/*Serial.begin(9600);
Serial.print("Initializing SD... ");
if (!SD.begin(10)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");*/
u8x8.begin();
delay(500);
u8x8.setFont(u8x8_font_amstrad_cpc_extended_f);
myFile = SD.open("target.txt", FILE_READ);
u8x8.clear();
u8x8.print("ciao");
u8x8.print(myFile.read());
delay(2000);
printNewSet();
}
void loop()
{
}
void printNewSet()
{
u8x8.clear();
x = 0;
y = 0;
while (myFile.available() && y<rows)
{
c = (char) myFile.read();
if (c == '\n') c = 'a';
u8x8.print(c);
stepCoords();
}
}
void stepCoords()
{
x++;
if (x >= cols) newLine();
}
void newLine()
{
u8x8.print('\n');
x = 0;
y++;
}
Предполагается, что функция printNewSet()
печатает пакет символов до тех пор, пока файл не закончится или не будет достигнут предел отображения.
Файл отображался правильно, пока я не переключился с while(myFile.available()) u8x8.print( (char) myFile.read());
на printNewSet()
, после чего myFile.read()
возвращает только -1, а myFile.available()
всегда false .
Что происходит не так?
РЕДАКТИРОВАТЬ: Во время отладки я обнаружил, что myFile не удается инициализировать. Неужели у меня заканчивается память?
@Marco Giacomin, 👍0
Обсуждение1 ответ
Лучший ответ:
Я случайно закомментировал инициализацию SD вместе с последовательной инициализацией. После раскомментирования он работает правильно
- Сообщение об ошибке при попытке настроить библиотеку U8g2
- Поиск адреса OLED с использованием связи I2C и Arduino
- Как ssd1306 справляется с разными размерами экрана?
- SSD1306 показывает статику, когда я пытаюсь отобразить изображение XBM
- Ошибка компиляции для платы Arduino Nano при использовании Adafruit GFX
- Как увеличить скорость записи на SD-карту в Ардуино
- SD-карта не инициализируется
- Что означают эти контакты? Куда мне их подключить?
что такое Arduino и каковы сообщаемые значения использования памяти?, @Juraj
Я использую Uno с использованием 54% rom и 62% ram, @Marco Giacomin