Uno + TFT LCD 2.4" + DS18b20
- Войдите на сайт для отправки комментариев
Вс, 01/03/2015 - 17:17
Всем доброго времени суток
в программировании не силен - но упорно изучаю
добился работы пары датчиков и прочего с LCD1602 теперь воюю с TFT LCD 2.4"
http://roboparts.ru/products/10225191
подключение простое - реализовано, на уровне железа проблем нет
тест TFT LCD проходит с библиотекой SWTFT
тест датчика DS18b20 проходит через монитор
пытался выводить данные через tft.println(); - не выводит
пытался через tft.print(); - не показывает ничего
// Code provided by Smoke And Wires // http://www.smokeandwires.co.nz // This code has been taken from the Adafruit TFT Library and modified // by us for use with our TFT Shields / Modules // For original code / licensing please refer to // https://github.com/adafruit/TFTLCD-Library #include <Adafruit_GFX.h> // Core graphics library #include "SWTFT.h" // Hardware-specific library #include <DallasTemperature.h> //библиотека для DS18B20 #include <OneWire.h> #define ONE_WIRE_BUS 10 // кузываю пин для DS18B20 = 10пин // Штифты управления для дисплея может быть назначен любой цифровой или // аналоговые выводы ... но мы будем использовать аналоговые выводы, как это позволяет нам // Удвоить контакты с сенсорным экраном (см TFT пример краски). // #define LCD_CS A3 // Chip Select идет к аналоговым 3 // #define LCD_CD A2 // Команда / Данные идет к аналоговым 2 // #define LCD_WR A1 // LCD Написать идет к аналоговым 1 // #define LCD_RD A0 // LCD Почитать идет на аналоговый 0 // #define LCD_RESET A4 // Может попеременно просто подключиться к контакт сброса Arduino в // При использовании только Прорывом совет, использовать эти 8 линий данных к LCD: // Для Arduino Uno, Duemilanove, Diecimila и т.д .: // D0 подключается к цифровому выводу 8 (обратите внимание это // D1 подключается к цифровому выводу 9 не в порядке!) // D2 подключается к цифровому выводу 2 // D3 подключается к цифровому выводу 3 // D4 подключается к цифровому выводу 4 // D5 подключается к цифровому выводу 5 // D6 подключается к цифровому выводу 6 // D7 подключается к цифровому выводу 7 // Связать человек читаемые имена некоторых распространенных 16-битных значений цвета: #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF SWTFT tft; // If using the shield, all control and data lines are fixed, and // a simpler declaration can optionally be used: // SWTFT tft; // Настройка-Wire экземпляр общаться с любым Wire для приборов // (Не только Максим / Даллас температуры ИС) OneWire oneWire(ONE_WIRE_BUS); // указание датчика . DallasTemperature sensors(&oneWire); void setup(void) { //Serial.begin(9600); //Serial.println(F("TFT LCD test")); sensors.begin(); tft.reset(); } void loop(void) { for(uint8_t rotation=1; rotation<4; /*rotation++*/) { tft.setRotation(rotation); testText(); delay(2000); } } unsigned long testText() { int temp = sensors.getTempCByIndex(0); tft.fillScreen(BLACK); unsigned long start = micros(); tft.setCursor(50, 0); tft.setTextColor(WHITE); tft.setTextSize(3); tft.println("Honda XR650R!"); tft.setTextColor(YELLOW); tft.setTextSize(2); tft.println("Temperature"); tft.setTextColor(RED); tft.setTextSize(3); tft.println(0xDEADBEEF, HEX); tft.print(temp); return micros() - start; }
куда копать?
залил скетч по новой - горит просто белый экран
правил вот этот скетч изначально
1. сворачивай код при вставке, смотреть простыни никто не будет
2. библиотека для DS18b20 вероятно и морочит тебе мозг.на форуме эти вопросы обсуждались и народ работае без этой библы только с OneWire.h
полазь по форуму через поиск - найдёшь
понял, буду искать тогда, спасибо
кстати как ее свернуть - кнопки спойлера в сообщении не нашел
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
спасибо
да ничего не тяжёлый, нормальный
согласитесь, листать 100 - 200 строк кода никому не нужно.
а некоторые и вообще нечитаемые коды выкладывают
тяжелый в том что не типичный
по авто/мото все форумы на которых искал инфу или сам чего выкладывал сделаны на более простых для обычных обывателей движках
тоже форматирование мессаг проще
по поводу кода согласен - но я привык что есть код спойлера - нажал - вписал и все
а тут надо настраивать еше ;)
исправил что смог
переписал скетч на основе библиотеки DALLAS. не понял как работать на библиотеке OneWire - так как везде пишут по разному
в итоге порезал скетч
проблема образовалась дальше - идет обнавление всего экрана в заданный промежуток, если убрать обновление то идет почти сразу как отрисуется - эффект моргания (замедленной отрисовки - не очень нравится
ссылка на видео
http://youtu.be/GPWoakFMY0Q
Можете двумя путями пойти, обновлять только в случае изменения температуры или через временной промежуток 2-3минуты. Чаще мерять в обычных условиях смысла нет. Еще я думаю у дисплея есть возможность обновлять только требуемую область.
Как это решить?
Примерно так. У меня такого дисплея не было, строки 53-54 наверно надо тоже под if перенести. А возможно, строки 53,54 и с 64 по 69 в Setup после 48. Тогда по идее текст менятся не будет, будет только значение температуры переписывать - пробуйте.
Спасибо, попробую
Можно еще так
заменить на
bwm - вот что по вашему коду получается
http://youtu.be/T7FdDbhrmWI
а вот со строкой от vitalikost стало лучше, но появилась проблема с затиранием прежнего значения
Перед setup() добавить:
float last_t;
что означает строка номер 7?
Если значения t изменнилось на +0,25 или -0,25
ясно, а точно надо выводить перед setup? или все же поместить в setup?
Перед setup только float last_t;
А остальное можно и внизу кода; а можно и в свой добавить. и в цикле вызивать только Dallasinfo()
Вся суть в этой строке "
if
( abs(last_t-t)>=0.25 )
" если данные отличаються, стерли, и заново записали, если нет, то ничего не делаем.спасибо
щас скетч ругается на void dallasinfo() - буду изучать дальше
Это моя функция, ее использовать не обезательно.
как можно прописать очистку экрана в заданной области?
Вот очистка:высота 25 пикселей длинна 144. (0,150) - координаты х,у.
отлично
а что делать с таким? (на красную полосу не обращать)
присутствие мусора получается
Было чтото подобное, я добавил в setup();
огромное спасибо
теперь появилось еще больше желание дальше изучать ;)
побольше бы таких людей на форуме
bwm - вот что по вашему коду получается
http://youtu.be/T7FdDbhrmWI
а вот со строкой от vitalikost стало лучше, но появилась проблема с затиранием прежнего значения
Сразу написал, что это домыслы и проверить не на чем. Вроде и так разобрались.
да, спасибо
добрый день.
Пытаюсь подружить UNO и этот дисплей.
Перекачал кучу библиотек, но при загрузке всегда белый экран.
Куда копать?
Нужно две библиотеки:
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/Smoke-And-Wires/TFT-Shield-Example-Code/tree/master/SWTFT-Shield
В фалле SWTFT.cpp
15,16 строки, одну из них нужно закомментировать зависимости от модели(Uno,Mega)
Нужно две библиотеки:
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/Smoke-And-Wires/TFT-Shield-Example-Code/tree/master/SWTFT-Shield
В фалле SWTFT.cpp
15,16 строки, одну из них нужно закомментировать зависимости от модели(Uno,Mega)
Спасибо.
но до того как увидел этот пост качнул с этого сайта http://misc.ws и заработало, но слова выводит в зеркальном отображении.
Не могу решить
1. Зеркальное отображение букв
2. Экран постоянно мерцает.
Не могу решить
1. Зеркальное отображение букв
2. Экран постоянно мерцает.
Ничего не понял.
На winxp sp3 эти проблемы есть
На win7 64b все заработало как положено.
Библиотеки одни и те же.
Вопрос: почему не рисует синий квадрат на экране? Но если закомментировать lecturaPanel(), то рисует.
Вопрос выше решил.
Появился другой: как управлять подсветкой экрана?