Не видит CD карту (mega 2560 + TFT LCD 320X480&SDcard)

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

Что имеем mega 2560 с дисплеем 320X480 (вот такой) в нем есть слот карты, но карту не могу инициализировать... карта на 256 мегабайт, пробовал форматировать и в FAT16 и FAT32, может кто сталкивался... буду рад любой помощи.

тестовый код:

/*
  SD card test 
   
 This example shows how use the utility libraries on which the'
 SD library is based in order to get info about your SD card.
 Very useful for testing a card when you're not sure whether its working or not.
   
 The circuit:
  * SD card attached to SPI bus as follows:
 ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
 ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
 ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
 ** CS - depends on your SD card shield or module. 
    Pin 4 used here for consistency with other Arduino examples

 
 created  28 Mar 2011
 by Limor Fried 
 modified 9 Apr 2012
 by Tom Igoe
 */
 // include the SD library:
#include <SPI.h>
#include <SD.h>

// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;

// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 53;  // change this to 53 on a mega  

void setup()
{
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.print("\nInitializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin 
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output 
  // or the SD library functions will not work. 
  pinMode(53, OUTPUT);     // change this to 53 on a mega


  // we'll use the initialization code from the utility libraries
  // since we're just testing if the card is working!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card is inserted?");
    Serial.println("* Is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    return;
  } else {
   Serial.println("Wiring is correct and a card is present."); 
  }

  // print the type of card
  Serial.print("\nCard type: ");
  switch(card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    return;
  }


  // print the type and size of the first FAT-type volume
  uint32_t volumesize;
  Serial.print("\nVolume type is FAT");
  Serial.println(volume.fatType(), DEC);
  Serial.println();
  
  volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
  volumesize *= volume.clusterCount();       // we'll have a lot of clusters
  volumesize *= 512;                            // SD card blocks are always 512 bytes
  Serial.print("Volume size (bytes): ");
  Serial.println(volumesize);
  Serial.print("Volume size (Kbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Mbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);

  
  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);
  
  // list all files in the card with date and size
  root.ls(LS_R | LS_DATE | LS_SIZE);
}


void loop(void) {
  
}

*по теме http://arduino.ua/ru/prog/SDCardNotes

Radjah
Offline
Зарегистрирован: 06.08.2014

У шилда есть колодка ICSP? Если нет, то разводи SPI проводками.

Ну и прозвони до кучи. На меге SPI на других пинах выведена.

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

У меня такая же проблема. Решение ни кто не нашел?

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

Промудохался тогда 2 дня и толку нуль!

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Я мудохаюсь уже почти неделю. ХЗ че делать. Хочу попробовать сам собрать картридер и попробовать. 

vitalikost
Offline
Зарегистрирован: 28.11.2014

Попробуйте эту библиотеку, там есть возможность форматировать карту. Я только этой либой отформатировал, тогда и стандартная почала работать. 

https://github.com/greiman/SdFat

diger67
Offline
Зарегистрирован: 25.07.2015

1. Выводы SD подключены через шинный формирователь, разберитесь все ли верно разведено на плате.

2. Питаете только через USB разъем ваш пирог, попробуте подключить внешнее питание, может не хватает мощьности/

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Спаял внешний картридер по простенькой схемке: 3 резистора 3.3 кОм, и 3 резистора 1.8 кОм (в инете легко найти) и сразу пошло с примером CardInfo, который прислали китайские друзья. А то я думал на SD карту, до этого тоже пробовал библиотеку SdFat, но безрезультатно. Походу картридер на плате не пашет или распиновка не соответствует действительности, одно радует, что экран работает и достаточно качественно. Время будет попробую вызвонить распиновку на плате. Еще надо попробовать подключить TFT совместно с левым картридером, а то может чего-то не хватает.

 

MWazowski
Offline
Зарегистрирован: 31.01.2016

Плата 3,5" ilil9481. Та же проблема. Не видел SD карту ни в каком виде. Подключаю отдельную плату картридера - всё работает. Попробовал добавить внешнего питания и процесс пошёл, но нестабильный. Из пяти включений CardInfo распознаёт карту только в одном случае и то пишет, что не может найти Fat16/32 partition. В чём может быть проблема?

Прозвонил выходы с SD карты на плате. Через резисторную сборку (10 кОм) попадают на пины 50-53 (по-моему так и должно быть)

diger67
Offline
Зарегистрирован: 25.07.2015

Думаю нет согласования уровней SD и контроллера. Можно попробовать поиграть с ограничительными резисторами, например уменьшить их до 5.1 кОм. Посмотрел на свой старый шилд tft 2.8, там microSd подключено к ардуино напрямую и работало.

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Пробовал подключить внешнее питание нашел блок с выходным напряжением при замерах вольтметром 16 В, хотя на нем написанно было 12 В (че было то и воткнул, по документации максимальное предельно 20В). Ардуинка не реагировала ни как, вообще не работала и экран не горел. Нашел зарядник от телефона - 5В, ардуинка заработала, загорелся экран, но встроенный картридер в TFT все равно не фурычил! Кстати в инете встречались схемы с делителем где было 3 резистора 4.7 кОм и 3 резистора 10 кОм спаивались по аналогии с моей схемой, просто номинал другой. Я спаял по первой попавшей.

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

diger67
Offline
Зарегистрирован: 25.07.2015

MrAcsacal пишет:

Пробовал подключить внешнее питание нашел блок с выходным напряжением при замерах вольтметром 16 В, хотя на нем написанно было 12 В (че было то и воткнул, по документации максимальное предельно 20В). Ардуинка не реагировала ни как, вообще не работала и экран не горел.

А вы полярность на разъеме БП проверили? Для справки, на входе arduino по питанию стоит диод, он защищает его от переполюсовки. 

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Да проверял. Почему отдал предпочтение блоку питания 16 В? Ответ простой, на нем был уже готовый разъем. А когда решил поставить 5 В на питание, пришлось отрезать разъем и устанавливать полюсность.

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

По поводу согласования входов-выходов установил, что на плате для согласования используется двунаправленный шинный транслятор HC245(в инете он находится как 74HC245D, думаю аналог). Их там 3 штуки. Они используются для согласования матрицы LCD и слота SD.

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Интересная статья про согласование: http://we.easyelectronics.ru/Shematech/soglasovanie-logicheskih-urovney-5v-i-33v-ustroystv.html

MrAcsacal
Offline
Зарегистрирован: 18.02.2016
MWazowski
Offline
Зарегистрирован: 31.01.2016

Решение нашлось. Припаял перемычки поверх резиторной сборки. Читает карту и по USB и с внешним источником питания. Чётко, ни одного сбоя. Спасибо diger67 за рекомендации в каком направлении двигаться.

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Пришли фотку и как-то разъясни. Всем интересно.

diger67
Offline
Зарегистрирован: 25.07.2015

MrAcsacal пишет:

Пришли фотку и как-то разъясни. Всем интересно.

Зачем фотка. Заменяем сборки относящиеся к SD 4х10 кОм перемычками. Если у вас стоит 74HC245 или ее аналог, то так же обходим перемычками. Во втором случае несколько сложнее. Выоды шин смещены на одну ногу. Проблема заключается в том, что почти все модификации 74HC245 нельзя использовать как преобразователи уровня. Это прямо прописано в даташите на микросхему. Для этих целей делают 20 пинового жука с раздельным питанием шины "А" и шины "В".

MWazowski
Offline
Зарегистрирован: 31.01.2016

MrAcsacal пишет:

Пришли фотку и как-то разъясни. Всем интересно.

Ну вот как-то так:

diger67
Offline
Зарегистрирован: 25.07.2015

Можно купить сборку "ноль перемычка х 4" и заменить, будет истетично и меньше вероятность коротнуть.

MWazowski
Offline
Зарегистрирован: 31.01.2016

diger67 пишет:

Можно купить сборку "ноль перемычка х 4" и заменить, будет истетично и меньше вероятность коротнуть.

Согласен. Это ведь так сделано - для проверки работоспособности.

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

А вот что у меня... ума не приложу как ее запустить

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

У меня как у Sanyaba - 3.2". Выходит надо перемкнуть входы-выходы HC245: SCK (CSK), MOSI (DATA-IN, DI), SS (CS)?

Вот, что я напаял, если кому интересно. Три делителя на выходы SD-карты, которы упомянул ранее.

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

да в том то и дело, что неохота сдувать разъем с платы TFT LCD 320X480, если бы был хоть какой то разъем под карту памяти можно было бы самому распаять за 5 минут, перерыл все мобилы и гамнитофоны, значит пока проект заморозил...

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Sanyaba пишет:

да в том то и дело, что неохота сдувать разъем с платы TFT LCD 320X480, если бы был хоть какой то разъем под карту памяти можно было бы самому распаять за 5 минут, перерыл все мобилы, значит пока проект заморозил...

Понял тебя. Согласен. Посмотрим может, что ребята посоветуют. И я на следующей неделе на работу выйду попробую вызвонить выводы. Будет о чем подумать. Напишу если что-то будет интересное.

diger67
Offline
Зарегистрирован: 25.07.2015

Sanyaba пишет:

да в том то и дело, что неохота сдувать разъем с платы TFT LCD 320X480, если бы был хоть какой то разъем под карту памяти можно было бы самому распаять за 5 минут, перерыл все мобилы и гамнитофоны, значит пока проект заморозил...

Сдуваь разъем, что за блаж. Если 74HC245 отвечает только за SD , смело ее выпаеваем и ставим перемычки по MISO, MOSI, SCL, SS.

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Как видно полностью выпаять не получится. Это видно по разводке платы. Попытаться установить перемычки - работа для муравьев, мелко слишком. И еще они как-то завязанны с флеш-памятью. И вообще с этой флешь какие-то не понятки, информации по объему нет никакой. Вывод INPUT для флеш памяти присутствует. Вероятно это память для нормальной работы LCD...

diger67 получается мы будем передавать 5В на входы SD напрямую без делителя (согласования). Как это отразится на работе SD? не зря же придуман делитель, будь-то на чипе или на резистивной сборке?

diger67
Offline
Зарегистрирован: 25.07.2015

MrAcsacal пишет:

diger67 получается мы будем передавать 5В на входы SD напрямую без делителя (согласования). Как это отразится на работе SD? не зря же придуман делитель, будь-то на чипе или на резистивной сборке?

Я писал выше. У меня на шилде SD подключена напрямую к выводам идущим на arduino. Место на шилде под flash предназначено для установки памят с SPI типа 25w128, вот в этом случае шинный формирователь как раз к стати, эта память работает  на уровнях мах 3.6 вольта. Т.е. или SD в слот, или память на плату. Я гдето внутри подозреваю, что согласующие элементы есть в самой SD, хотя могу ошибаться. У меня же работает и не одна SD не сгорела.

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

А по натуре! Че я парюсь? Я могу перемкнуть делитель сначала на мной спаянном картридере, и узнать как себя поведет SD-карта. И если прокатит. То вызвонить выводы на TFT плате и перемкнуть. 

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Ответ простой!!! Не качественная пайка на разъеме TFT дисплея. Стал вызванивать и обнаружил что не звонится. Прогрел место пайки паяльником и все заработало. Далее краткое пояснение кто с подобным случаем столкнется. И как справка для всех заинтересованых.

На рисунке изображен слот SD карты как стоит на плате, с пронумерованными выводами, наименование выводов SD-карты и номер пина на Mega 2560. Обведенны выводы которые идут через чип HC245, выводы которые я на самодельно картридере подключал через делитель напряжения. Вызвонить напрямую с вывода SD-слота на разъем не получится не пропускает HC245. Поэтому приходится с SD-слота вызвонить до выхода чипа HC245, а потом со смещением на один пин(как на картинке), вызвонить с разъема до входа. На рисуке изображен разъем которой стоит на TFT, и подписанна нумерация выводов как будете видеть их вы. Напряжение питания приходит с вывода разъема - 5В проходит через чип U1 и по ходу преобразуется в 3.3В. MISO идет напрямую и должен вызвониться на разъеме TFT, так же как и GND.

У меня не звонился пин разъема 52 и GND с одной стороны. Пусть отсутствие GND и не вызывает беспокойство, есть другой пин GND, но это обстоятельство и заставило меня задуматься о качестве пайки всех остальных пинов. Удачи всем!!!

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

Спасибо за полезную информацию, если вас не затруднит покажите код которым проверяете работу CD карты на данном шилде, очень буду признателен.

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

А тот что вы в самом начале темы предлагали на рассмотрение. Главное удостовериться что chipSelect 53 пин.

А так китайские друзья прислали мне Datasheet по этому TFT экрану, от туда я и взял CardInfo.

diger67
Offline
Зарегистрирован: 25.07.2015

С качеством сборки это давняя история. Хорошо хоть не накосячили с распиновкой шлейфа самого TFT. такое тоже встречается.

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Sanyaba отпишись, как что-то найдешь. Всем интересно.

satelit
Offline
Зарегистрирован: 12.12.2015

MrAcsacal пишет:

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

447408335@inbox.ru      заранее благодарен

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

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

satelit
Offline
Зарегистрирован: 12.12.2015

Sanyaba пишет:

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

БЫЛ БЫ У МЕНЯ СТОЛ СВОБОДЕН, я бы на листок списал(как всегда с ошибками и матюкал бы тебя за кривую схему( жалко смайликов нет)

satelit
Offline
Зарегистрирован: 12.12.2015

не зря говорят , за двумя зайцам не угонишься( в данный момент я вай фай модуль мучаю)

 

satelit
Offline
Зарегистрирован: 12.12.2015

не зря говорят , за двумя зайцам не угонишься( в данный момент я вай фай модуль мучаю) плюс айфон на запчасти пускаю- дисплей нужен

 

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

скажу без всяких... за зиму сильно очень загадил рабочее место, люблю когда все лежит на своих местах (в коробочках, в коробках...) но когда ченить начинаешь делать то эти все коробочкм и коробки из кладовой выстраиваются на столе нереальными стопками... монитора едвали видать... ... ... было бы время КУЧА, много Б чего перемучал!

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015
В общем отписываюсь, спасибо MrAcsacal за картинку:
сразу прозвонил и проверил пайку под лупой, все сошлось, пайка вроде качественная, было решено пропаять все же самому...
 
слот карты до
 
слот карты после
HC245 до
HC245 после
 
проверяю и получаю:
Initializing SD card...initialization failed. Things to check:
* is a card is inserted?
* Is your wiring correct?
* did you change the chipSelect pin to match your shield or module?

разочарование... взял еще одну карту но уже на 2GB, результат тот же!

и тут в коробочке в флешками мне попалась 4GB Micro SD флешка которуюю подкинул к шилду через адаптер, и о чудо

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

Card type: SDHC

Volume type is FAT32

Volume size (bytes): 4002414592
Volume size (Kbytes): 3908608
Volume size (Mbytes): 3817

Files found on the card (name, date and size in bytes):

в итоге, две старые флехи имели мне мозги!

 
всем успехов ;)
 
 
 
 
Radjah
Offline
Зарегистрирован: 06.08.2014

Тебя не смущает что MMC - это не эквивалент SD?

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

теперь уже смущает ибо невнимательный!

и смущает то что китаёзы не предоставляют инфы по этим шилдам на странице описания товара

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Sanyba испытывал дисплей?

Как работает? Я тут натолкнулся на такую проблему может кто-то даст совет?! Проблема вот в чем!!!

Загружаю простенькую программку. Для иследования работы с цветами дисплея. Получается что дисплей не выдает цвета так как они должны быть. Вплоть до наоборот черный высвечивается на экране как белый, а белый, соответственно, как черный. Подозреваю что проблема в драйвере TFT-дисплея, а как узнать какой нужен драйвер? Китайские друзья прислали мне Datasheet как помойное ведро, всего накидали и драйвера и описание разных TFT дисплеев (Причем на китайском!!!) Че делать? В какую сторону думать?

#include <memorysaver.h>
#include <UTFT.h>

UTFT myDisplay(HX8357B, 38, 39, 40, 41);

extern uint8_t BigFont[];
byte text = 0;
byte back = 0;

void setup() {
  myDisplay.InitLCD();
  myDisplay.clrScr();
  myDisplay.setFont(BigFont);
  myDisplay.fillScr(0, 0, 0);
}

void loop() {
  myDisplay.clrScr(); 
  switch (back){
    case 0:
      myDisplay.fillScr(0, 0, 0);
      myDisplay.setBackColor(0, 0, 0);
      myDisplay.print("BLACK", CENTER, 0);
      break;
    case 1:
      myDisplay.fillScr(255, 0, 0);
      myDisplay.setBackColor(255, 0, 0);
      myDisplay.print("RED", CENTER, 0);
      break;
    case 2:
      myDisplay.fillScr(0, 255, 0);
      myDisplay.setBackColor(0, 255, 0);
      myDisplay.print("GREEN", CENTER, 0);
      break;
    case 3:
      myDisplay.fillScr(0, 0, 255);
      myDisplay.setBackColor(0, 0, 255);
      myDisplay.print("BLUE", CENTER, 0);
      break;
    case 4:
      myDisplay.fillScr(255, 255, 0);
      myDisplay.setBackColor(255, 255, 0);
      myDisplay.print("YELLOW", CENTER, 0);
      break;
    case 5:
      myDisplay.fillScr(0, 255, 255);
      myDisplay.setBackColor(0, 255, 255);
      myDisplay.print("BLUE BLUE", CENTER, 0);
      break;
    case 6:
      myDisplay.fillScr(255, 0, 255);
      myDisplay.setBackColor(255, 0, 255);
      myDisplay.print("PINK", CENTER, 0);
      break;
    case 7:
      myDisplay.fillScr(255, 255, 255);
      myDisplay.setBackColor(255, 255, 255);
      myDisplay.print("WHITE", CENTER, 0);
      break;
  }
  switch (text){
    case 0:
      myDisplay.setColor(0, 0, 0);
      myDisplay.print("BLACK", CENTER, 160);
      break;
    case 1:
      myDisplay.setColor(255, 0, 0);
      myDisplay.print("RED", CENTER, 160);
      break;
    case 2:
      myDisplay.setColor(0, 255, 0);
      myDisplay.print("GREEN", CENTER, 160);
      break;
    case 3:
      myDisplay.setColor(0, 0, 255);
      myDisplay.print("BLUE", CENTER, 160);
      break;
    case 4:
      myDisplay.setColor(255, 255, 0);
      myDisplay.print("YELLOW", CENTER, 160);
      break;
    case 5:
      myDisplay.setColor(0, 255, 255);
      myDisplay.print("BLUE BLUE", CENTER, 160);
      break;
    case 6:
      myDisplay.setColor(255, 0, 255);
      myDisplay.print("PINK", CENTER, 160);
      break;
    case 7:
      myDisplay.setColor(255, 255, 255);
      myDisplay.print("WHITE", CENTER, 160);
      break;
  } 
  text++;
  if (text > 7) {
    text = 0;
    back++;
    if (back > 7) back = 0;
  }
  delay(2000);
}

 

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

Sanyaba пишет:

в итоге, две старые флехи имели мне мозги!

 
всем успехов ;)
 
 
 

а 10 рублей работают? я то дома лежит несколько штук, может сервер сделать

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

MrAcsacal, дисплей вроде как работает, особо ничего серьезного на него не выводил, максимум что выводил - миниатюры картинок все цвета совпадают, брал инфу по выводу на дисплей тут http://wiki.amperka.ru/продукты:tft-lcd-480x320 а саму библиотеку тут https://github.com/amperka/UTFT

 

 

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Да дело в драйвере TFT. В строчке кода, где есть ссылка на драйвер HX8357B, ради интереса заменил букву на HX8357C. Цвета стали передаваться как и того и требуется, но походу настройки чуть другие и получается, что не весь экран перекрашивается. В параллельной теме нашел предложение скачать библиотеку UTFT, скачал. У меня заработала функция lcdOff() и lcdOn(), а смоей библиотекой не работала. Вот тема: http://arduino.ru/forum/programmirovanie/trend-na-arduino-mega-2560-tft-lcd-320kh480-hx8357b?page=1. По идее демострационный вариант должен выглядеть так:

А у меня с точностью до наоборот, черный-белый, белый-черный, а другие цвета совсем не понятно как. Можете попробовать код загрузить код демо-варианата? Посмотреть, как он будет выглядеть у Вас?



// UTFT_Demo_480x320 (C)2014 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// This program is a demo of how to use most of the functions
// of the library with a supported display modules.
//
// This demo was made for modules with a screen resolution 
// of 480x320 pixels.
//
// This program requires the UTFT library.
//

#include <UTFT.h>

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

// Set the pins to the correct ones for your development shield
// ------------------------------------------------------------
// Arduino Uno / 2009:
// -------------------
// Standard Arduino Uno/2009 shield            : <display model>,A5,A4,A3,A2
// DisplayModule Arduino Uno TFT shield        : <display model>,A5,A4,A3,A2
//
// Arduino Mega:
// -------------------
// Standard Arduino Mega/Due shield            : <display model>,38,39,40,41
// CTE TFT LCD/SD Shield for Arduino Mega      : <display model>,38,39,40,41
//
// Remember to change the model parameter to suit your display module!
UTFT myGLCD(HX8357B,38,39,40,41);

void setup()
{
  randomSeed(analogRead(0));
  
// Setup the LCD
  myGLCD.InitLCD();
  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);
}

void loop()
{
  int buf[478];
  int x, x2;
  int y, y2;
  int r;

// Clear the screen and draw the frame
  myGLCD.clrScr();

  myGLCD.setColor(255, 0, 0);
  myGLCD.fillRect(0, 0, 479, 13);
  myGLCD.setColor(64, 64, 64);
  myGLCD.fillRect(0, 306, 479, 319);
  myGLCD.setColor(255, 255, 255);
  myGLCD.setBackColor(255, 0, 0);
  myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1);
  myGLCD.setBackColor(64, 64, 64);
  myGLCD.setColor(255,255,0);
  myGLCD.print("<http://electronics.henningkarlsen.com>", CENTER, 307);

  myGLCD.setColor(0, 0, 255);
  myGLCD.drawRect(0, 14, 479, 305);

// Draw crosshairs
  myGLCD.setColor(0, 0, 255);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.drawLine(239, 15, 239, 304);
  myGLCD.drawLine(1, 159, 478, 159);
  for (int i=9; i<470; i+=10)
    myGLCD.drawLine(i, 157, i, 161);
  for (int i=19; i<220; i+=10)
    myGLCD.drawLine(237, i, 241, i);

// Draw sin-, cos- and tan-lines  
  myGLCD.setColor(0,255,255);
  myGLCD.print("Sin", 5, 15);
  for (int i=1; i<478; i++)
  {
    myGLCD.drawPixel(i,159+(sin(((i*1.13)*3.14)/180)*95));
  }
  
  myGLCD.setColor(255,0,0);
  myGLCD.print("Cos", 5, 27);
  for (int i=1; i<478; i++)
  {
    myGLCD.drawPixel(i,159+(cos(((i*1.13)*3.14)/180)*95));
  }

  myGLCD.setColor(255,255,0);
  myGLCD.print("Tan", 5, 39);
  for (int i=1; i<478; i++)
  {
    myGLCD.drawPixel(i,159+(tan(((i*1.13)*3.14)/180)));
  }

  delay(2000);

  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);
  myGLCD.setColor(0, 0, 255);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.drawLine(239, 15, 239, 304);
  myGLCD.drawLine(1, 159, 478, 159);

// Draw a moving sinewave
  x=1;
  for (int i=1; i<(478*15); i++) 
  {
    x++;
    if (x==479)
      x=1;
    if (i>479)
    {
      if ((x==239)||(buf[x-1]==159))
        myGLCD.setColor(0,0,255);
      else
        myGLCD.setColor(0,0,0);
      myGLCD.drawPixel(x,buf[x-1]);
    }
    myGLCD.setColor(0,255,255);
    y=159+(sin(((i*0.7)*3.14)/180)*(90-(i / 100)));
    myGLCD.drawPixel(x,y);
    buf[x-1]=y;
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some filled rectangles
  for (int i=1; i<6; i++)
  {
    switch (i)
    {
      case 1:
        myGLCD.setColor(255,0,255);
        break;
      case 2:
        myGLCD.setColor(255,0,0);
        break;
      case 3:
        myGLCD.setColor(0,255,0);
        break;
      case 4:
        myGLCD.setColor(0,0,255);
        break;
      case 5:
        myGLCD.setColor(255,255,0);
        break;
    }
    myGLCD.fillRect(150+(i*20), 70+(i*20), 210+(i*20), 130+(i*20));
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some filled, rounded rectangles
  for (int i=1; i<6; i++)
  {
    switch (i)
    {
      case 1:
        myGLCD.setColor(255,0,255);
        break;
      case 2:
        myGLCD.setColor(255,0,0);
        break;
      case 3:
        myGLCD.setColor(0,255,0);
        break;
      case 4:
        myGLCD.setColor(0,0,255);
        break;
      case 5:
        myGLCD.setColor(255,255,0);
        break;
    }
    myGLCD.fillRoundRect(270-(i*20), 70+(i*20), 330-(i*20), 130+(i*20));
  }
  
  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some filled circles
  for (int i=1; i<6; i++)
  {
    switch (i)
    {
      case 1:
        myGLCD.setColor(255,0,255);
        break;
      case 2:
        myGLCD.setColor(255,0,0);
        break;
      case 3:
        myGLCD.setColor(0,255,0);
        break;
      case 4:
        myGLCD.setColor(0,0,255);
        break;
      case 5:
        myGLCD.setColor(255,255,0);
        break;
    }
    myGLCD.fillCircle(180+(i*20),100+(i*20), 30);
  }
  
  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some lines in a pattern
  myGLCD.setColor (255,0,0);
  for (int i=15; i<304; i+=5)
  {
    myGLCD.drawLine(1, i, (i*1.6)-10, 304);
  }
  myGLCD.setColor (255,0,0);
  for (int i=304; i>15; i-=5)
  {
    myGLCD.drawLine(478, i, (i*1.6)-11, 15);
  }
  myGLCD.setColor (0,255,255);
  for (int i=304; i>15; i-=5)
  {
    myGLCD.drawLine(1, i, 491-(i*1.6), 15);
  }
  myGLCD.setColor (0,255,255);
  for (int i=15; i<304; i+=5)
  {
    myGLCD.drawLine(478, i, 490-(i*1.6), 304);
  }
  
  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some random circles
  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=32+random(416);
    y=45+random(226);
    r=random(30);
    myGLCD.drawCircle(x, y, r);
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some random rectangles
  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=2+random(476);
    y=16+random(289);
    x2=2+random(476);
    y2=16+random(289);
    myGLCD.drawRect(x, y, x2, y2);
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

// Draw some random rounded rectangles
  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=2+random(476);
    y=16+random(289);
    x2=2+random(476);
    y2=16+random(289);
    myGLCD.drawRoundRect(x, y, x2, y2);
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

  for (int i=0; i<100; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    x=2+random(476);
    y=16+random(289);
    x2=2+random(476);
    y2=16+random(289);
    myGLCD.drawLine(x, y, x2, y2);
  }

  delay(2000);
  
  myGLCD.setColor(0,0,0);
  myGLCD.fillRect(1,15,478,304);

  for (int i=0; i<10000; i++)
  {
    myGLCD.setColor(random(255), random(255), random(255));
    myGLCD.drawPixel(2+random(476), 16+random(289));
  }

  delay(2000);

  myGLCD.fillScr(0, 0, 255);
  myGLCD.setColor(255, 0, 0);
  myGLCD.fillRoundRect(160, 70, 319, 169);
  
  myGLCD.setColor(255, 255, 255);
  myGLCD.setBackColor(255, 0, 0);
  myGLCD.print("That's it!", CENTER, 93);
  myGLCD.print("Restarting in a", CENTER, 119);
  myGLCD.print("few seconds...", CENTER, 132);
  
  myGLCD.setColor(0, 255, 0);
  myGLCD.setBackColor(0, 0, 255);
  myGLCD.print("Runtime: (msecs)", CENTER, 290);
  myGLCD.printNumI(millis(), CENTER, 305);
  
  delay (10000);
}

Если все будет как на картинке, то попрошу Вас прислать мне для эксперимента Вашу библиотеку UTFT.

MrAcsacal
Offline
Зарегистрирован: 18.02.2016

Да кстати, с библиотекой UTFT, которую скачал по ссылке, которую показал ранее. Изменение буквы ни как не влияет на работу. Но работают функции lcdOff() и lcdOn().