Чтение данных из sd карты arduino

Тема в разделе "Arduino & Shields", создана пользователем AlisherRobotRex, 17 янв 2018.

  1. У меня есть текстовой файл на sd карте. Он состоит из единичек и нулей. Он нужен, чтобы выводить рисунок на черно-белый дисплей. Эти 1 или 0 задают цвет пикселя дисплея. Так как у меня мало динамической памяти, мне нужно прочитать файл, не записывая его в массив(т.е. без сохранения в массивы), и сразу выводить черный или белый цвет пикселя на дисплей. Как это сделать? Пытаюсь писать, после того, как считываю одну букву(т.е. цифру), чтобы дисплей красил пиксель, но не получается.
    Код (C++):
    void drawFigure(byte y, byte x, bool colorFigure){
      bool colorMassive = false;
       if (!SD.begin(10)) {
         Serial.println("initialization failed!");
         return;
       }
       myFile = SD.open("/Image/thingsImage.txt");
       if (myFile) {
         while (myFile.available()) {
         char color = myFile.read();
         display.drawPixel(4, 4, (byte)color); //это не весь рисунок получается рисует, а только одну точку, не важно, //выдаёт ошибку
       }
       myFile.close();
       } else {
         Serial.println("error opening");
       }
     
    Последнее редактирование модератором: 18 янв 2018
  2. DIYMan

    DIYMan Гуру

    1. Кодировать один пиксель одним байтом - это, батенька, перебор эдак раз в 8.
    2. Какую именно ошибку выдаёт?
     
    БАРМАТОГРАФ нравится это.
  3. Ошибка заключается в том, что программа пишет принтленом "error opening"
     
  4. DIYMan

    DIYMan Гуру

    Ясно. Смотрите: библиотека SD, что в поставке - поддерживает только имена файлов формата 8.3, т.е. имя файла - не длиннее 8 символов, расширение - не длиннее 3. Вопрос к вам: подходит ли к этому определению имя вашего файла "thingsImage.txt" ?
     
    arkadyf и БАРМАТОГРАФ нравится это.
  5. На дисплее эту точку не рисует
     
  6. Я специально написал ThingsImage, на самом деле у меня файл на sd карте называется CupImage.txt. Не думал, что это важно. CupImage.txt - подходит.
     
  7. Мне кажется, что когда идёт процесс чтения файла, то нельзя сторонние функции запускать(у меня там функция, красящая пиксель)
     
  8. DIYMan

    DIYMan Гуру

    Как связана функция, красящая пиксель, и тот факт, что у вас файл не открывается? И не запутывайте, плз - как вы в скетче пишете, так и выкладывайте код, без "я специально". Поэтому давайте начнём ещё раз, с чистого листа: скопируйте код вашего скетча - и сюда.
     
    sdfg нравится это.
  9. Я не работал с дисплеями и в Вашем коде не помогу. Но в один элемент массива(байт) можно легко засунуть три пикселя. Например: 000, 001, 101, 100, 111
     
  10. DetSimen

    DetSimen Спамовредитель Модератор

    я тебе больше скажу, если дисплей OLED SSD1306, там в 1 байт аш 8 пикселов пхаеца.
     
  11. Это ж как же так? :)
     
  12. DetSimen

    DetSimen Спамовредитель Модератор

    олед дисплей монохромный, то есть пиксел может быть или включен или нет, значит 1 бита - достаточно для манипулирования пикселем. поэтому в 8 битах (1 байте) можно хранить состояние 8 пикселей.
     
  13. Я про другое. Я не пойму как запихнуть 8 битов в байт. В двоичном виде? Так вроде не очень удобно
     
  14. DetSimen

    DetSimen Спамовредитель Модератор

    дак прям и читать память OLED, она уже организована байтами.
     
  15. Ну ТС мне кажется нужно все таки попробовать 3 пикселя в один байт. Количество используемой памяти уменьшается аж в 3 раза :)
    Не факт что у ТС oled про который Вы говорите
    Хорошо если бы он написал какая ардуино и какой размер картинки в пикселях
     
    Последнее редактирование: 18 янв 2018
  16. DetSimen

    DetSimen Спамовредитель Модератор

    тоись, вот это:
    У меня есть текстовой файл на sd карте. Он состоит из единичек и нулей. Он нужен, чтобы выводить рисунок на черно-белый дисплей.
    И это:
    #include <Adafruit_SSD1306.h>

    ниначо не наводят?

    вот эти единички и нули надо паковать в байт и выводить его в память дисплея. Только надо помнить, что у 1306 1 байт задает 8 ВЕРТИКАЛЬНЫХ пикселей.
     
    sdfg нравится это.
  17. Да... хорошо я затупил :(
     
  18. sdfg

    sdfg Гик

    Токо теперь придется объяснять как из картинки состоящий из горизонтальных байтов (да ещё и в один байт записан только один бит инфы) в вертикальные да ещё и в одном байте 8 бит
     
  19. DetSimen

    DetSimen Спамовредитель Модератор

    это за деньги, или бесплатно в гуголе. у мня стока времени нет.
     
    БАРМАТОГРАФ нравится это.
  20. sdfg

    sdfg Гик

    Ну гугол он на то и гугол что бесплатный
     
    БАРМАТОГРАФ нравится это.