Как вывести на экран рисунок с SD с помошью UTFT: "myGLCD.drawBitmap" ???

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Добрый день.

Кто подскажет - как с помощтю команды "myGLCD.drawBitmap" отобразить рисунок? Вернее: как задать имя файла в аргументах этой функции? Пока что удалось только отображать рисунки в виде массива:

extern unsigned short f00[0x21FC];
myGLCD.drawBitmap(0,0,87,64,f00,1);

 

Но я читал что можно так же подгружать рисунки в форате .raw. Но проблема в том, что я не знаю как это сделать.
Кто може дать совет по этому вопросу?

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Может хоть скажете, какая у Вас библиотека?

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

ЕвгенийП пишет:

Может хоть скажете, какая у Вас библиотека?

Я думал что Вы догадаетесь из названия: "myGLCD...". Прошу прощения за то что не уточнил.

Библиотека "UTFT" конечно же. Когда преобразовываешь рисунок в массив формата Си, он включается в тело прошивки так же как и шрифты. А это, немного накладно с точки зрения экономии памяти. А вот если бы рисунки лежали на SD карте и вызывались динамически по мере необходимости - было бы просто замечательно!

"drawBitmap – выводит на дисплей специально подготовленное растровое графическое изображение.
В качестве параметров задаются координаты верхнего левого угла изображения, его размеры и имя массива, в котором хранится закодированное изображение.
"

Однако я так же где-то читал что с помощью этой функции можно выводить также рисунки в формате ".RAW" ! Но я нигде не могу найти это описание еще раз. Вот ищу сижу...

Вот тут есть какое-то подобие решения проблемы, но приведенные топикстартером строчки, никак не стыкуются с мнением компилятора.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Вот, кажется, что-то нашёл: "ссылка"

Да, это то что нужно!

Правда библиотеки немного другие, но всё работает! С SD-карты читает! Ураа!!!

Вот пример скетча, который у меня заработал. Там видно какие библиотеки нужны. Но не все. Много лишнего, но тоже интересно покопаться!

// UTFT_SdRaw_320x240_Demo
// Copyright (C)2015 Graham Lawrence (GHLawrence2000). All Rights reserved.
// web: https://github.com/ghlawrence2000/UTFT_SdRaw
//
// This program is a demo of how to use the functions provided by UTFT_SdRaw.
//
// This program requires the UTFT, UTouch, UTFT_Buttons and SdFat libraries.
//
#include <SPI.h>
// SdFat lib from here :-
// https://github.com/greiman/SdFat/archive/master.zip
#include <SdFat.h>
#include <UTFT.h>
#include <UTouch.h>
#include <UTFT_Buttons.h>
#include <UTFT_SdRaw.h>
extern uint8_t SmallFont[];
extern uint8_t BigFont[];

#define SD_CHIP_SELECT  10  // SD chip select pin
// file system object
SdFat sd;
// print stream
ArduinoOutStream cout(Serial);

int wait = 2, pressed_button;

// Initialize display
// ------------------
// Set the pins to the correct ones for your development board
// -----------------------------------------------------------
// Standard Arduino Uno/2009 Shield            : <display model>,19,18,17,16
// Standard Arduino Mega/Due shield            : <display model>,38,39,40,41
// CTE TFT LCD/SD Shield for Arduino Due       : <display model>,25,26,27,28
// Teensy 3.x TFT Test Board                   : <display model>,23,22, 3, 4
// ElecHouse TFT LCD/SD Shield for Arduino Due : <display model>,22,23,31,33
//
// Remember to change the model parameter to suit your display module!

UTFT myGLCD(ILI9327, 38, 39, 40, 41);

// Initialize touchscreen
// ----------------------
// Set the pins to the correct ones for your development board
// -----------------------------------------------------------
// Standard Arduino Uno/2009 Shield            : 15,10,14, 9, 8
// Standard Arduino Mega/Due shield            :  6, 5, 4, 3, 2
// CTE TFT LCD/SD Shield for Arduino Due       :  6, 5, 4, 3, 2
// CTE TFT LCD/SD Shield for Arduino Due (JP10):  6, 5,32, 3, 2
// Teensy 3.x TFT Test Board                   : 26,31,27,28,29
// ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30
//
UTouch  myTouch( 52, 43, 51, 50, 46);
//UTouch  myTouch( 6, 5, 4, 3, 2);

UTFT_SdRaw myFiles(&myGLCD);
UTFT_Buttons  myButtons(&myGLCD, &myTouch);

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.println(F("Initialising SD card..."));
  bool mysd = 0;
  // see if the card is present and can be initialized:
  while (!mysd)
  {
    if (!sd.begin(SD_CHIP_SELECT, SPI_FULL_SPEED)) {
      Serial.println(F("Card failed, or not present"));
      Serial.println(F("Retrying...."));
    }
    else
    {
      mysd = 1;
      Serial.println(F("Card initialised."));
    }
  }
  Serial.println(F("Initialising LCD."));
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont);
  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);
  myButtons.setTextFont(BigFont);
  int butskip = myButtons.addButton( 85,  219 , 70,  20, "Skip");
  Serial.println(F("LCD initialised."));
  // ////////////////////////////////////////////////////////////////////////////////
  //             Wait for GPS screen  or skip button
  ///////////////////////////////////////////////////////////////////////////////////
  Serial.println(F("Initialising GPS."));
  long mytime = millis();
  myFiles.load(0, 0, 240, 240, "dt01.RAW", 1 , 1);
  long mytime1 = millis() - mytime;
  cout << F("Time to draw 240x240 raw ") << mytime1 << F(" ms") << endl;
  myButtons.drawButton(butskip);
  while (wait == 2) {
    pressed_button = myButtons.checkButtons();
    if (pressed_button == butskip)
    {
      cout << F("Skip button detected (No GPS :( )\n");
      wait = true;
    }
  }
  char fname240[] = "SK45/SK400500.RAW";
  myGLCD.clrScr();
  mytime = millis();
  myFiles.load(0, 0, 240, 240, fname240, 1);
  mytime1 = millis() - mytime;
  cout << F("Time to draw 240x240 raw (no extra buffer) (non inverted colour) ") << mytime1 << F(" ms") << endl;
  delay(5000);
  mytime = millis();
  myFiles.load(0, 0, 240, 240, fname240, 16, 1);
  mytime1 = millis() - mytime;
  cout << F("Time to draw 240x240 raw (16*buffer) (inverted colour) ") << mytime1 << F(" ms") << endl;
  delay(5000);
  mytime = millis();
  myFiles.pan(0, 0, 240, 240, 0, 0, 4040, 4040, "SK45/SK45.RAW");
  mytime1 = millis() - mytime;
  cout << F("Time to draw 240x240 portion from 4040x4040 raw image (non inverted colour) ") << mytime1 << F(" ms") << endl;
  delay(5000);
  mytime = millis();
  myFiles.pan(0, 0, 240, 240, 0, 0, 4040, 4040, "SK45/SK45.RAW", 1);
  mytime1 = millis() - mytime;
  cout << F("Time to draw 240x240 portion from 4040x4040 raw image (inverted colour) ") << mytime1 << F(" ms") << endl;
  delay(5000);
  myGLCD.clrScr();
  int xad, yad;
  int tmpx = 0, tmpy = 0;
  for (int yx = 0; yx < 6; yx++)
  {
    int xd = 0, yd = 0;
    mytime = millis();
    for (int z = 0 + (yx * 35); z < 35 + (yx * 35); z++)
    {
      tmpy = (z / 22);
      tmpx = z - (tmpy * 22);
      yad = (tmpy * 69) + 10;
      xad = (tmpx * 108) + 44;
      myFiles.pan(xd, yd, 42, 42, xad, yad, 2374, 696, "icons.raw");
      xd += 42;
      if (xd > 277)
      {
        xd = 0;
        yd += 42;
      }
    }
    mytime1 = millis();
    cout << F("Time to draw 35 42x42 icons (") << (0 + (yx * 35)) << "-" << (34 + (yx * 35)) << F(") from 2374x696 image ") << (mytime1 - mytime) << F(" ms") << endl;
    delay(5000);
  }
  cout << F("Thanks for watching!") << endl;
  myGLCD.clrScr();
  myGLCD.setFont(BigFont);
  myGLCD.setColor(VGA_GREEN);
  myGLCD.print("Thanks for watching!", CENTER, 111);
}

void loop()
{
}

 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Buzzer2010 пишет:

Я думал что Вы догадаетесь из названия: "myGLCD...". Прошу прощения за то что не уточнил.

С какого перепугу? В библиотеке такого названия нет, а у Вас в скетче ... это Ваша переменная, Вы можете переименовать её в kaka, в mumu, или в pipiska - ничего не изменится и всё будет работать точно также.

Вам же надо отделить мух от котлет.

В библиотеке UTFT нет никаких средств для работы с какими бы то ни было файлами. Вам нужно либо научиться читать эти файлы в память, а потом показывать обычными средствами, либо искать библиотеку, которая уже умеет это делать.

Ссылки для начала поиска (затравки)

https://www.arduino.cc/en/Reference/TFTLoadImage
http://forum.arduino.cc/index.php?topic=269686.0
http://www.instructables.com/id/Arduino-TFT-display-of-bitmap-images-fro...

 

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

ЕвгенийП пишет:

Buzzer2010 пишет:

Я думал что Вы догадаетесь из названия: "myGLCD...". Прошу прощения за то что не уточнил.

С какого перепугу? В библиотеке такого названия нет, а у Вас в скетче ... это Ваша переменная, Вы можете переименовать её в kaka, в mumu, или в pipiska - ничего не изменится и всё будет работать точно также.

Вам же надо отделить мух от котлет.

В библиотеке UTFT нет никаких средств для работы с какими бы то ни было файлами. Вам нужно либо научиться читать эти файлы в память, а потом показывать обычными средствами, либо искать библиотеку, которая уже умеет это делать.

Ссылки для начала поиска (затравки)

https://www.arduino.cc/en/Reference/TFTLoadImage
http://forum.arduino.cc/index.php?topic=269686.0
http://www.instructables.com/id/Arduino-TFT-display-of-bitmap-images-from-an-SD-Ca/?ALLSTEPS#step4

 

Уже давно решено. Вы немного задержались )))))) Но все равно - спасибо за участие!

-------------

myGLCD - это вообще-то зарегестрированный класс библиотеки UTFT. Так что "pipiska" тут не прокатит. К сожалению )))))

Logik
Offline
Зарегистрирован: 05.08.2014

По последней ссылке явно на про UTFT. Там пишут:

 при использовании   ITDB02_Graph16.h и tinyFAT.h всё работало таким образом

1 file.initFAT();
2  myGLCD.loadBitmap(10, 10, 145, 100, "tux.raw");

Ищите. Может найдете, только я не думаю что этот raw и тот о котором вы думаете это одно и тоже. 

Я делал фоторамку себе поигратся, могу поделится впечатлениями.

1. Либу использовал свою, в ней функция потокового вывода на экран, данные перекидываются через небольшой буфер. В функцию потокового вывода передаю калбек на функцию получения данных с файла SD. Функция выглядит дето так

// Writes 16-bit data in bulk, using callback to get more
void TFTLCD::bulkWrite(uint16_t *data, uint16_t bufferSize, uint16_t (*getNextValues)(void *), void *userData)
{

#ifdef MyNano
#if defined(__AVR__)

    writeSteamBegin;
    ConfigPIN_WriteDir;
    while( bufferSize )
    {
        for(uint16_t i=0; i < bufferSize; i++)
        {
            writeData_unsafe8n(data[i]);
        }
        bufferSize = getNextValues(userData);
    }
    TransferEnd;

2. Работает не быстро, экран перерисовывается  гдето с пол секунды. И это из файла bmp заранее подогнаного в размер и 16 бит на пиксель.

3. Думал про большее -  bmp любого размера и/или jpg. Почти нереально, будет еще медленней и теряет смысл.

4. Задача явно не для начинающего, выжимает из контроллера все ресурсы, хороше думайте прежде чем братся.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Buzzer2010 пишет:

myGLCD - это вообще-то зарегестрированный класс библиотеки UTFT. Так что "pipiska" тут не прокатит. К сожалению )))))

Да, неужели?

Вас не затруднит показать где он такой зарегистрирован?

А то я вот смотрю в библиотеку (https://github.com/telamon/utft) и чёт не вижу его там.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

ЕвгенийП пишет:

Buzzer2010 пишет:

myGLCD - это вообще-то зарегестрированный класс библиотеки UTFT. Так что "pipiska" тут не прокатит. К сожалению )))))

Да, неужели?

Вас не затруднит показать где он такой зарегистрирован?

А то я вот смотрю в библиотеку (https://github.com/telamon/utft) и чёт не вижу его там.

Я не знаю где он регистрируется, но все функции библиотеки UTFT начинаются с "myGLCD". Я не берусь утверждать что это именно класс - я не специалист по языку Си. Но то что заменить "myGLCD" на "pipiska" не получится - могу сказать совершенно точно )))))

В PDF-е в папке библиотеки "\libraries\UTFT\Documentation\UTFT.pdf"

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Logik пишет:
Я делал фоторамку себе поигратся, могу поделится впечатлениями.

1. Либу использовал свою, в ней функция потокового вывода на экран, данные перекидываются через небольшой буфер. В функцию потокового вывода передаю калбек на функцию получения данных с файла SD. Функция выглядит дето так

// Writes 16-bit data in bulk, using callback to get more
void TFTLCD::bulkWrite(uint16_t *data, uint16_t bufferSize, uint16_t (*getNextValues)(void *), void *userData)
{

#ifdef MyNano
#if defined(__AVR__)

    writeSteamBegin;
    ConfigPIN_WriteDir;
    while( bufferSize )
    {
        for(uint16_t i=0; i < bufferSize; i++)
        {
            writeData_unsafe8n(data[i]);
        }
        bufferSize = getNextValues(userData);
    }
    TransferEnd;

2. Работает не быстро, экран перерисовывается  гдето с пол секунды. И это из файла bmp заранее подогнаного в размер и 16 бит на пиксель.

3. Думал про большее -  bmp любого размера и/или jpg. Почти нереально, будет еще медленней и теряет смысл.

4. Задача явно не для начинающего, выжимает из контроллера все ресурсы, хороше думайте прежде чем братся.

Спасибо, поковыряю на досуге. Но я так понял что эта задача прекрасно и уже давным давно решена с помощью специальных библиотек праней из "Rinky-Dink Electronics":  <SdFat.h> и <UTFT_SdRaw.h>

см. мой третий пост, там есть пример как это всё у них организовано. И как раз - по SPI !!!!

А кстати - у Вас какая ардуина? Я сейчас мучаю DUE....

Ой. У Вас "НАНО".... Надо более серьезно поковыряться тогда. Думаю что дунька справится быстрее.

Если можно - покажите весь скетч с вызовом этой функции. И какой формат файла тут используется - тоже интересно было бы узнать.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Buzzer2010 пишет:

Я не знаю где он регистрируется, но все функции библиотеки UTFT начинаются с "myGLCD". Я не берусь утверждать что это именно класс - я не специалист по языку Си. Но то что заменить "myGLCD" на "pipiska" не получится - могу сказать совершенно точно )))))

В PDF-е в папке библиотеки "\libraries\UTFT\Documentation\UTFT.pdf"

Она используется НЕ в библиотеке, а в примерах. И используется именно как переменная. В самой библиотеке этой перемнной нет. Так что заменяйте на pipiska - всё будет отлично работать. И не говорите "совершенно точно" того, в чём не разбираетесь.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

В общем итог такой: С помощью функции "myGLCD.drawBitmap" можно показывать ТОЛЬКО рисунки закодированные в массивы. Больше ничего. Для вывода изображений в формате "raw" используется другая библиотека и другая функция: библиотека "UTFT_SdRaw.h"

#include <SdFat.h>
#include <UTFT_SdRaw.h>
... ... ...
UTFT_SdRaw myFiles(&myGLCD);
... ... ...
myFiles.load(0, 0, 240, 240, "dt01.RAW", 1 , 1); // загрузка изображения в формате RAW с SD карты на TFT дисплей

 

Logik
Offline
Зарегистрирован: 05.08.2014

Я не знаю че там у какихто Rinky-Dink Electronics , оно мне нафиг не надо. Я год назад сделал посмотрел, думаю еще вернусь к теме, а то осцилограф на STM простаивает, а мог бы и фотки крутить. Там ресурсов больше.

\\И как раз - по SPI !!!!

И в чем причина восторга? SD к крдуине всегда по SPI подключают, это один из 2-х возможных для SD итерфейсов и единственный приемлемый для ардуино.

Использую Нано и МиниПро. Ну и Мапле одно затесалось.

Думаю их формат "raw" - тот же массив, но в файл записаный. Лошары в общем. 

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

ЕвгенийП пишет:

Buzzer2010 пишет:

Я не знаю где он регистрируется, но все функции библиотеки UTFT начинаются с "myGLCD". Я не берусь утверждать что это именно класс - я не специалист по языку Си. Но то что заменить "myGLCD" на "pipiska" не получится - могу сказать совершенно точно )))))

В PDF-е в папке библиотеки "\libraries\UTFT\Documentation\UTFT.pdf"

Она используется НЕ в библиотеке, а в примерах. И используется именно как переменная. В самой библиотеке этой перемнной нет. Так что заменяйте на pipiska - всё будет отлично работать. И не говорите "совершенно точно" того, в чём не разбираетесь.

Будте более терпимы к ошибкам тех, кто знает меньше Вас. Это пожелание. И спасибо за замечание. Я не думал  что строка:

UTFT myGLCD(ILI9327, 38, 39, 40, 41);

банальное объявление переменной. Я считал что эту строку лучше не трогать...

Однако если учесть Ваш опыт в программировании на Си и то что переменная "myGLCD" прописана во всех примерах библиотеки "UTFT", непонятно почему это сочетание букв вызвало у Вас такой шквал негатива...

Я надеюсь Вы не будете утверждать что видите библиотеку UTFT первый раз в жизни?

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Logik пишет:

Я не знаю че там у какихто Rinky-Dink Electronics , оно мне нафиг не надо. Я год назад сделал посмотрел, думаю еще вернусь к теме, а то осцилограф на STM простаивает, а мог бы и фотки крутить. Там ресурсов больше.

\\И как раз - по SPI !!!!

И в чем причина восторга? SD к крдуине всегда по SPI подключают, это один из 2-х возможных для SD итерфейсов и единственный приемлемый для ардуино.

Использую Нано и МиниПро. Ну и Мапле одно затесалось.

Думаю их формат "raw" - тот же массив, но в файл записаный. Лошары в общем. 

Лошары или нет, а без их библиотек пришлось бы самим дрова под свои китайские поделки писать.

Logik пишет:
Думаю их формат "raw" - тот же массив, но в файл записаный.

Интересно посмотреть на массив НЕ записанный в файл )))))))

Logik
Offline
Зарегистрирован: 05.08.2014

Buzzer2010 пишет:

Интересно посмотреть на массив НЕ записанный в файл )))))))

Хммм.. какое странное желание.

Смотрите свое стартовое сообщение строка 1. extern unsigned short f00[0x21FC];

 

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Logik пишет:

Buzzer2010 пишет:

Интересно посмотреть на массив НЕ записанный в файл )))))))

Хммм.. какое странное желание.

Смотрите свое стартовое сообщение строка 1. extern unsigned short f00[0x21FC];

"extern unsigned short f00[0x21FC];" = "f00.c" <----- это физический файл вообще-то. )))))

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Довольно быстро читает картинки 160х120:видео

Logik
Offline
Зарегистрирован: 05.08.2014

Buzzer2010 пишет:

Logik пишет:

Buzzer2010 пишет:

Интересно посмотреть на массив НЕ записанный в файл )))))))

Хммм.. какое странное желание.

Смотрите свое стартовое сообщение строка 1. extern unsigned short f00[0x21FC];

"extern unsigned short f00[0x21FC];" = "f00.c" <----- это физический файл вообще-то. )))))

И что это вы безграмотно так дописали?  Учите С/С++, в жизни пригодится.  extern unsigned short f00[0x21FC]; -  это массив, ни в какой файл он и близко не записаный. Вы можете записать  его содержимое в файл, а можете не делать этого, например заполнить его чем либо, просто константой например и вывести на экран вобще без файла карты SD.

Buzzer2010 пишет:

Довольно быстро читает картинки 160х120:видео

Там не зря картинка не на полный экран. 160 на 120 это в 4 раза меньше данных, соотвеиственно вместо 2 кадров в секунду (а пол сек. на картинку это как раз 2 кадра в сек.) получаем 8. Вот и дерганая гифанимация вышла.

 

arduinec
Offline
Зарегистрирован: 01.09.2015

Buzzer2010 пишет:

Лошары или нет, а без их библиотек пришлось бы самим дрова под свои китайские поделки писать.

Есть куча библиотек Adafruit (https://github.com/adafruit) под разные TFT-дисплеи, в них реализован вывод картинки с SD-карты из файла в BMP-формате.

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Buzzer2010 пишет:

Будте более терпимы к ошибкам тех, кто знает меньше Вас. Это пожелание. И спасибо за замечание. Я не думал  что строка:

Да, Бог с Вами, я нетерпим не к ошибкам, а к безапеляционности с которой "те, кто знает меньше" начинают меня учить и утверждать что-то "совершенно точно" 

Buzzer2010 пишет:

Однако если учесть Ваш опыт в программировании на Си и то что переменная "myGLCD" прописана во всех примерах библиотеки "UTFT", непонятно почему это сочетание букв вызвало у Вас такой шквал негатива...

Негатив у меня вызвало не сочетание и Ваши попытки учить меня свысока. Подумайте о том, как Вы разговариваете со специалистами, которые решили Вам помочь.

Buzzer2010 пишет:

Я надеюсь Вы не будете утверждать что видите библиотеку UTFT первый раз в жизни?

Вы можете надеяться на всё, что угодно, но примеры к библиотеке я видел практически впервые, когда стал искать эту Вашу переменную. Может быть я их когда-то и смотрел, когда впервые библиотеку закачал, но я этого не помню. Для собственной работы мне всегда хватало текстов библиотеки, примерами я пользуюсь крайне редко.

 

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Logik пишет:
И что это вы безграмотно так дописали?  Учите С/С++, в жизни пригодится.  extern unsigned short f00[0x21FC]; -  это массив, ни в какой файл он и близко не записаный. Вы можете записать  его содержимое в файл, а можете не делать этого, например заполнить его чем либо, просто константой например и вывести на экран вобще без файла карты SD.
Так потому что я и есть безграмотный. А я этого и не скрываю. Я и нахожусь тут с целью чему-нибудь научиться. Ну в принципе, да. Этот массив можно было и не пихать в отдельный файл и не подключать по "extern". Соласен - профтыкал.

 

Logik пишет:
Там не зря картинка не на полный экран. 160 на 120 это в 4 раза меньше данных, соотвеиственно вместо 2 кадров в секунду (а пол сек. на картинку это как раз 2 кадра в сек.) получаем 8. Вот и дерганая гифанимация вышла.

Где это: "там"? Это я видео снимал вообще-то. И я не понял почему это 160х120 это в 4 раза меньше? У меня дисплей 320х240. С таким разрешением "гифка" получилась совсем неживая почти. А уменьшил размеры "кадров" в два раза, ну и вот что получилось...

// Это та часть скетча, где выводятся на экран эти кадры. 
// Я вот всё думаю: можно ли в имени названия файла
// как-то переменную вплести? Ну что бы цикл организовать
// из одной сторки, а не заниматься вот таким онанизмом?
// Считаю что проблема не в невозможности такое сделать,
// а в нехватке знаний программирования на "Си"...


void loop()
{
  myFiles.load(80, 50, 159, 120, "SQ/SQ01.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ02.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ03.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ04.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ05.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ06.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ07.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ08.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ09.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ10.RAW");

}

Это всё не важно в общем-то. Важно совершенно другое: проблема-то решена: теперь понятно как с SD карты читать изображения. Это и всё чему я хотел научиться.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

ЕвгенийП пишет:

Buzzer2010 пишет:

Будте более терпимы к ошибкам тех, кто знает меньше Вас. Это пожелание. И спасибо за замечание. Я не думал  что строка:

Да, Бог с Вами, я нетерпим не к ошибкам, а к безапеляционности с которой "те, кто знает меньше" начинают меня учить и утверждать что-то "совершенно точно" 

Buzzer2010 пишет:

Однако если учесть Ваш опыт в программировании на Си и то что переменная "myGLCD" прописана во всех примерах библиотеки "UTFT", непонятно почему это сочетание букв вызвало у Вас такой шквал негатива...

Негатив у меня вызвало не сочетание и Ваши попытки учить меня свысока. Подумайте о том, как Вы разговариваете со специалистами, которые решили Вам помочь.

Buzzer2010 пишет:

Я надеюсь Вы не будете утверждать что видите библиотеку UTFT первый раз в жизни?

Вы можете надеяться на всё, что угодно, но примеры к библиотеке я видел практически впервые, когда стал искать эту Вашу переменную. Может быть я их когда-то и смотрел, когда впервые библиотеку закачал, но я этого не помню. Для собственной работы мне всегда хватало текстов библиотеки, примерами я пользуюсь крайне редко.

"Каждый человек в чем-то меня превосходит, и здесь - я готов у него учиться" (Дейл Карнеги)

Специалисты, которые ставят себя выше только потому, что знают больше и при этом еще в глаза не видя предмет обсуждения - вызывают у меня сожаление. Потому что я бы в таком случае - просто указал на невнимательность оппонента и объяснил что "myGLCD", это обычная переменная и что она не является чем-то незыблемым и обязательным. Вы же больше меня знаете, сто процентов - старше, а зацикливаетесь на моём невежестве, как буд-то это я виноват во всех Ваших житейских проблемах.

Я с таким настроением на форум не показываюсь.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Buzzer2010 пишет:

И я не понял почему это 160х120 это в 4 раза меньше? У меня дисплей 320х240. 

Ну ёпт. Потрудитесь уже перемножить 160х120, затем перемножить 320х240 и посмотреть, во сколько раз первое меньше второго. То, что линейные размеры меньше в два раза - не значит, что матрица будет меньше в два раза, там квадратичная зависимость. Итог - в 4 раза меньше объём данных при уменьшении размера кадра всего в два раза. А если линейные размеры кадра уменьшить в 4 раза, то, о чудо! - массив данных будет занимать в 16 раз меньше места! Вот это да, чудо, да и только!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

есть такой код

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <UTFTGLUE.h>              // class methods are in here
#include <SD.h>

#define SD_CS 10
File bmpFile;
// information we extract about the bitmap file
int bmpWidth, bmpHeight;
uint8_t bmpDepth, bmpImageoffset;

UTFTGLUE myGLCD(0x9341, A2, A1, A3, A4, A0);


// Declare which fonts we will be using
extern uint8_t SmallFont[];

void setup() {
  Serial.begin(9600);
  randomSeed(analogRead(0));
  pinMode(A0, OUTPUT);
  digitalWrite(A0, HIGH);

  // Setup the LCD
  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);
  pinMode(SD_CS, OUTPUT);
  
  
  if (!SD.begin(SD_CS)) {
    Serial.println("failed!");
    return;
  }
  Serial.println("SD OK!");

  bmpDraw("woof.bmp", 0, 0);
}

void loop() {


}

#define BUFFPIXEL 20

void bmpDraw(char *filename, uint8_t x, uint8_t y) {

  File     bmpFile;
  int      bmpWidth, bmpHeight;   // W+H in pixels
  uint8_t  bmpDepth;              // Bit depth (currently must be 24)
  uint32_t bmpImageoffset;        // Start of image data in file
  uint32_t rowSize;               // Not always = bmpWidth; may have padding
  uint8_t  sdbuffer[3*BUFFPIXEL]; // pixel buffer (R+G+B per pixel)
  uint8_t  buffidx = sizeof(sdbuffer); // Current position in sdbuffer
  boolean  goodBmp = false;       // Set to true on valid header parse
  boolean  flip    = true;        // BMP is stored bottom-to-top
  int      w, h, row, col;
  uint8_t  r, g, b;
  uint32_t pos = 0, startTime = millis();

  if((x >= myGLCD.width()) || (y >= myGLCD.height())) return;

  Serial.println();
  Serial.print("Loading image '");
  Serial.print(filename);
  Serial.println('\'');

  // Open requested file on SD card
  if ((bmpFile = SD.open(filename)) == NULL) {
    Serial.print("File not found");
    return;
  }

  // Parse BMP header
  if(read16(bmpFile) == 0x4D42) { // BMP signature
    Serial.print("File size: "); Serial.println(read32(bmpFile));
    (void)read32(bmpFile); // Read & ignore creator bytes
    bmpImageoffset = read32(bmpFile); // Start of image data
    Serial.print("Image Offset: "); Serial.println(bmpImageoffset, DEC);
    // Read DIB header
    Serial.print("Header size: "); Serial.println(read32(bmpFile));
    bmpWidth  = read32(bmpFile);
    bmpHeight = read32(bmpFile);
    if(read16(bmpFile) == 1) { // # planes -- must be '1'
      bmpDepth = read16(bmpFile); // bits per pixel
      Serial.print("Bit Depth: "); Serial.println(bmpDepth);
      if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed

        goodBmp = true; // Supported BMP format -- proceed!
        Serial.print("Image size: ");
        Serial.print(bmpWidth);
        Serial.print('x');
        Serial.println(bmpHeight);

        // BMP rows are padded (if needed) to 4-byte boundary
        rowSize = (bmpWidth * 3 + 3) & ~3;

        // If bmpHeight is negative, image is in top-down order.
        // This is not canon but has been observed in the wild.
        if(bmpHeight < 0) {
          bmpHeight = -bmpHeight;
          flip      = false;
        }

        // Crop area to be loaded
        w = bmpWidth;
        h = bmpHeight;
        if((x+w-1) >= myGLCD.width())  w = myGLCD.width()  - x;
        if((y+h-1) >= myGLCD.height()) h = myGLCD.height() - y;

        for (row=0; row<h; row++) { // For each scanline...
          myGLCD.setCursor(x, y+row);

          // Seek to start of scan line.  It might seem labor-
          // intensive to be doing this on every line, but this
          // method covers a lot of gritty details like cropping
          // and scanline padding.  Also, the seek only takes
          // place if the file position actually needs to change
          // (avoids a lot of cluster math in SD library).
          if(flip) // Bitmap is stored bottom-to-top order (normal BMP)
            pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
          else     // Bitmap is stored top-to-bottom
            pos = bmpImageoffset + row * rowSize;
          if(bmpFile.position() != pos) { // Need seek?
            bmpFile.seek(pos);
            buffidx = sizeof(sdbuffer); // Force buffer reload
          }

          // optimize by setting pins now
          for (col=0; col<w; col++) { // For each pixel...
            // Time to read more pixel data?
            if (buffidx >= sizeof(sdbuffer)) { // Indeed
              bmpFile.read(sdbuffer, sizeof(sdbuffer));
              buffidx = 0; // Set index to beginning
            }

            // Convert pixel from BMP to TFT format, push to display
            b = sdbuffer[buffidx++];
            g = sdbuffer[buffidx++];
            r = sdbuffer[buffidx++];

            myGLCD.setColor(r,g,b);
            myGLCD.drawPixel(x+col, y+row);
            // optimized!
            //tft.pushColor(tft.Color565(r,g,b));
          } // end pixel
        } // end scanline
        Serial.print("Loaded in ");
        Serial.print(millis() - startTime);
        Serial.println(" ms");
      } // end goodBmp
    }
  }

  bmpFile.close();
  if(!goodBmp) Serial.println("BMP format not recognized.");
}

// These read 16- and 32-bit types from the SD card file.
// BMP data is stored little-endian, Arduino is little-endian too.
// May need to reverse subscript order if porting elsewhere.

uint16_t read16(File f) {
  uint16_t result;
  ((uint8_t *)&result)[0] = f.read(); // LSB
  ((uint8_t *)&result)[1] = f.read(); // MSB
  return result;
}

uint32_t read32(File f) {
  uint32_t result;
  ((uint8_t *)&result)[0] = f.read(); // LSB
  ((uint8_t *)&result)[1] = f.read();
  ((uint8_t *)&result)[2] = f.read();
  ((uint8_t *)&result)[3] = f.read(); // MSB
  return result;
}

он не мой, я его просто адаптировал под либу Mcufriend_kbv. картинки из либы Mcufriend_kbv. к сожалению проверить не могу, так как две мои микро сд карты ардуина ни в какую не видит. может у кого есть рабочая и желание проверить....

Logik
Offline
Зарегистрирован: 05.08.2014

Buzzer2010 пишет:

Где это: "там"? Это я видео снимал вообще-то

Там в видео у Вас.

Buzzer2010 пишет:

У меня дисплей 320х240. С таким разрешением "гифка" получилась совсем неживая почти. 

Так я ж и писал что тормозня, и чего спорить если сами такое видите..

Buzzer2010 пишет:

И я не понял почему это 160х120 это в 4 

Ну добрый человек DIYMan уже вам обяснил. Я тока +1.

Logik
Offline
Зарегистрирован: 05.08.2014

  

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

DIYMan пишет:

Buzzer2010 пишет:

И я не понял почему это 160х120 это в 4 раза меньше? У меня дисплей 320х240. 

Ну ёпт. Потрудитесь уже перемножить 160х120, затем перемножить 320х240 и посмотреть, во сколько раз первое меньше второго. То, что линейные размеры меньше в два раза - не значит, что матрица будет меньше в два раза, там квадратичная зависимость. Итог - в 4 раза меньше объём данных при уменьшении размера кадра всего в два раза. А если линейные размеры кадра уменьшить в 4 раза, то, о чудо! - массив данных будет занимать в 16 раз меньше места! Вот это да, чудо, да и только!

Точно что чудо... Век живи, век учись, а делить так и не научишься... Пасиб за науку.

jeka_tm пишет:
есть такой код...к сожалению проверить не могу, так как две мои микро сд карты ардуина ни в какую не видит. может у кого есть рабочая и желание проверить....

Твои не видит, а чьи видит? Вообще видит что-нибудь?

Я давеча тоже маялся с чтением SD, так спасибо - добрые люди подсказали:

  Serial.println("Initializing SD card...");

  Serial.print("SS: ");Serial.println(SS);
  Serial.print("MOSI: ");Serial.println(MOSI);
  Serial.print("MISO: ");Serial.println(MISO);
  Serial.print("SCK: ");Serial.println(SCK);

  // make sure that the default chip select pin is set to
  // output, even if you don't use it:
  pinMode(SS, OUTPUT);

Смысл такой: независимо от того куда ты назначил моси-мисо и остальные... надо посмотреть там ли они реально висят. Вернее: посмотреть на каких пинах они вообще находятся. Вот. Мне - помогло. Результат выполнения видимый в мониторе порта:

	Initializing SD card...
	SS: 10
	MOSI: 75
	MISO: 74
	SCK: 76
	Card failed, or not present

Что до скетча: у меня UTFT и я уже нашёл решение. Адафрутовскую утилиту "bmpDraw()" пыталася приторочить к своим нуждам, но там есть пару операторов, которые наглухо заточены чисто под адафрут ((((( Так что тут - не выручу. А вот SD-шку растолкать - можем пообщаться )

Кстати об адафрутах: я эту утилиту спокойно юзал на УНО. Пашет нормально. Так что осталось расчехлить что там SD-шка хочет и у тебя тоже будет пахать.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да видит он sd2 карту, а форматирование fat нет. spi я знаю где

попробовал с другим шилдом. вообще не видит. читал не все карты spi поддерживают, возможно мой случай

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

jeka_tm пишет:

да видит он sd2 карту, а форматирование fat нет. spi я знаю где

попробовал с другим шилдом. вообще не видит. читал не все карты spi поддерживают, возможно мой случай

А FAT32 ?  Мой шилд видел оба... Кстати! Я тут попутно еще пытаюсь уложить Raspberry PI, так там, при записи образа линукса на флешку, даются две хитрые утилиты. Потому что после первой записи образа, на флехе образуются невидимые для винды разделы. Так вот одна из этих утилит - убивает MBR и пишет новый. Я так все SD-шки себе повосстанавливал. Могу скинуть  если интересно: Утилитка

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

у меня на дисплее разъем для микросд карты, это вообще

а пример sd Cardinfo выдает с добавлением распиновки: 

Initializing SD card...
SS: 10
MOSI: 11
MISO: 12
SCK: 13

Initializing SD card...Wiring is correct and a card is present.

Card type: SD2
Could not find FAT16/FAT32 partition.
Make sure you've formatted the card

давай. sd formatter все равно не помогает

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Та вот же: Утилитка

Там надо все галки поснимать, а наверху - оставить как есть, кажись... Счя я посмотрю точно...

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

уже форматируется на fat. попробую потом на fat32

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

jeka_tm пишет:

уже форматируется на fat. попробую потом на fat32

Та ну если fat прокатит - нафиг тот fat32 нужен.... Отпишись - помогло или нет.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

fat не прокатило. форматирую на fat32

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

jeka_tm пишет:

fat не прокатило. форматирую на fat32

Мля, да что ж такое-то.... А ты делаешь вот это: "pinMode(SS, OUTPUT);" ??

А, ты делаешь вот что: "pinMode(SD_CS, OUTPUT);" наверно это один фиг... Сечас с посмотрю как я это делал. У меня тоже есть шилд с microSD слотом...

Ну вот так я делал и пахало:

void setup()
{
  // Serial.begin(9600);

  tft.reset();

  tft.begin(0x9341);
  tft.fillScreen(BLACK);

  //  Serial.print(F("Initializing SD card..."));
  if (!SD.begin(10)) {
    //   Serial.println(F("failed!"));
    return;
  }
  //  Serial.println(F("OK!"));

  tft.setRotation(tft.getRotation() - 1);
  tft.fillScreen(0);

  bmpDraw("logo/vw2.bmp", 135, 96);

Ха! У меня такой же "мукуфренд" как и у тебя: " 0x9341 " 2.4 TFT, да? Ох и попил он крови у меня....

Logik
Offline
Зарегистрирован: 05.08.2014

jeka_tm пишет:

да видит он sd2 карту, а форматирование fat нет. spi я знаю где

попробовал с другим шилдом. вообще не видит. читал не все карты spi поддерживают, возможно мой случай

Я тоже такие разговоры слышал, но думаю что все поддерживают. Просто у некоторых сильный "акцент". Требуют паузы между командами, одним эти паузы нужны, другим не очень, потому и выходит что реально одни работают, другие нет. Отсюда и разговоры о неподдержке spi, ИМХО. 

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Logik пишет:

jeka_tm пишет:

да видит он sd2 карту, а форматирование fat нет. spi я знаю где

попробовал с другим шилдом. вообще не видит. читал не все карты spi поддерживают, возможно мой случай

Я тоже такие разговоры слышал, но думаю что все поддерживают. Просто у некоторых сильный "акцент". Требуют паузы между командами, одним эти паузы нужны, другим не очень, потому и выходит что реально одни работают, другие нет. Отсюда и разговоры о неподдержке spi, ИМХО.

Да всё может быть...

Подскажи еще, плиз, как в цикле крутануть вот ту каманду что я выше постил? Счя копирну сюда:

// Это та часть скетча, где выводятся на экран эти кадры. 
// Я вот всё думаю: можно ли в имени названия файла
// как-то переменную вплести? Ну что бы цикл организовать
// из одной сторки, а не заниматься вот таким онанизмом?
// Считаю что проблема не в невозможности такое сделать,
// а в нехватке знаний программирования на "Си"...


void loop()
{
  myFiles.load(80, 50, 159, 120, "SQ/SQ01.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ02.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ03.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ04.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ05.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ06.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ07.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ08.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ09.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ10.RAW");

}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

функцию объяви просто и все. исользуй где нужно


void function()
{
  myFiles.load(80, 50, 159, 120, "SQ/SQ01.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ02.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ03.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ04.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ05.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ06.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ07.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ08.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ09.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ10.RAW");

}

 

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

jeka_tm пишет:

функцию объяви просто и все. исользуй где нужно


void function()
{
  myFiles.load(80, 50, 159, 120, "SQ/SQ01.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ02.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ03.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ04.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ05.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ06.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ07.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ08.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ09.RAW");
  myFiles.load(80, 50, 159, 120, "SQ/SQ10.RAW");

}

Думаешь что "myFiles.load" схавает функцию вместо имени файла в кавычках? Чот я так не думаю... Если б было всё так просто я бы банально как-то запихнул переменную в имя файла. Только синтаксиса не знаю.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

я наверно тебя не так понял

наверно надо string собрать в цикле, а потом его и запрашивать

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

jeka_tm пишет:

я наверно тебя не так понял

наверно надо string собрать в цикле, а потом его и запрашивать

Мне надо сделать что-то типа:

for (int i=1; i>=10; i++) 
     {
      myFiles.load(80, 50, 159, 120, "SQ/SQ" + i + ".RAW")
      }

Понятно что это бред, но смысл примерно такой. В сях такое вообще возможно?

Что там с SD-шкой?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

вот попробуй. больше 9 думаю сам догадаешь как сделать

char file_name[25];

void setup() {
  Serial.begin(9600);
  for (byte i = 1; i < 10; i++) {
    sprintf(file_name, "SQ/SQ%02d.RAW", i);
    Serial.println(file_name);
  }
}

void loop() {

}

с картой глухо также

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

jeka_tm пишет:

вот попробуй. больше 9 думаю сам догадаешь как сделать

char file_name[25];

void setup() {
  Serial.begin(9600);
  for (byte i = 1; i < 10; i++) {
    sprintf(file_name, "SQ/SQ%02d.RAW", i);
    Serial.println(file_name);
  }
}

void loop() {

}

с картой глухо также

счя попробую эти проценты... Я уже такое видел где-то... Спасибо..

А что ж с картой-то такое? Может реально вместо "pinMode(SD_CS, OUTPUT);" напиши: "pinMode(SS, OUTPUT);" ??? Фиг его знает в чём там дело... а может не контачит там что-нить? Ну и следуя советам "Logik" может реально там делеев понапихать между проверками карты?

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Не прокатило такое.  В сериал пишет вот что: "SQ/SQ%02d.RAW"

А нет... прошу прощения. прокатил вот такой вариант:

char file_name[25];
  for (byte i = 1; i <= 10; i++)
    {
      sprintf(file_name, "SQ/SQ%02d.RAW", i);
      Serial.println(file_name);
      myFiles.load(80, 50, 159, 120, file_name);
    }

А что это за функция такая классная: "sprintf(file_name, "SQ/SQ%02d.RAW", i);"

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хз. у меня работает

SQ/SQ01.RAW
SQ/SQ02.RAW
SQ/SQ03.RAW
SQ/SQ04.RAW
SQ/SQ05.RAW
SQ/SQ06.RAW
SQ/SQ07.RAW
SQ/SQ08.RAW
SQ/SQ09.RAW

отдельно проверял только мой код?

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

jeka_tm пишет:

хз. у меня работает

SQ/SQ01.RAW
SQ/SQ02.RAW
SQ/SQ03.RAW
SQ/SQ04.RAW
SQ/SQ05.RAW
SQ/SQ06.RAW
SQ/SQ07.RAW
SQ/SQ08.RAW
SQ/SQ09.RAW

отдельно проверял только мой код?

Да всё работает твой код! Спасибо, чел! Ты просто гений ! Теперь осталось как-то научиться видосы разбирать на .raw-файлы сразу и можно кино крутить  )))))

----------------------------------

Всё это фигня. Мне не даёт покоя твоя SD-шка, или вернее - какие-то бока не то с софтом не то с железом...

Попробуй делей поставить до проверки fat-a....

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Так, а чото я не понял! Ты же тоже дисплей запускаешь, вроде, библиотекой UTFT !!! Или я ничего не понимаю?...

UTFTGLUE myGLCD(0x9341, A2, A1, A3, A4, A0);

Это что за библиотека такая???? Я тоже такую хочу! У меня есть же такой мукуфренд 2.4 TFT, только я его адафрутом запускаю! Ану еслия пробану сейчас свою УНО таким образом, интересно - засветится или нет ?

Не засвечивается что-то !!!!! UTFTGLUE я не нашёл. Не поделишься?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

либа Mcufriend_kbv. дисплей хорошо работает. карту победить не могу)) все таки мне кажется дело в карте

в каком месте делеи. скинь правленный код. или в самой либе чтоли добавлять делеи

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

мой дисплей с этой библиотекой не работает (((( Я нашёл ее, скачал, установил - пофиг. Белый экран... "Mcufriend_kbv" в смысле.

У меня дисплей не такой сто пудов. Там написано что библиотека будет работать только с 28-ми пиновыми шилдами. А у меня там явно не 28. И еще и УНО. Там шилд не такой вообще: пины по бокам. А библиотека, вроде как, под МЕГУ заточена... Так что - фанарь мне )))))

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

jeka_tm пишет:

либа Mcufriend_kbv. дисплей хорошо работает. карту победить не могу)) все таки мне кажется дело в карте

в каком месте делеи. скинь правленный код. или в самой либе чтоли добавлять делеи

В примере "CardInfo" вот перед этими строчками:

if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    return;
  }

наверху прицепи "Delay(1000);"

Что бы не казалось что дело в карте, возми еще кучу других карт. А пока тебе сравнить не с чем - как ты можешь утверждать что дело именно в карте? Если одна пашет, а другая нет - тогда понятно. А когда есть всего пару неработающих в шилде карт - это маловато. Вот когда штук 5 не запашут, тогда дело в шилде или софте. А когда 3 запашут, а 2 твои - нет, то - в картах...