Прошу помощи с tft дисплеем MCUFRIEND_kbv
- Войдите на сайт для отправки комментариев
Пнд, 15/07/2019 - 02:24
Всем привет, еле еле сделал "алгоритм" построения графика(меняя значение t0-t5 можно изменять сам график), знаю что ужасно, вы могли бы сделать в 5 раз лучше, но дело вдругом, как можно закрасить нижнюю часть графика? Вот скетч, тапками не кидать и не советовать что то поменять, прошу лишь помочь с закраской нижней части графика
#include "Adafruit_GFX.h" #include "MCUFRIEND_kbv.h" MCUFRIEND_kbv tft; #define G 0x4FE0 #define GT 0x44A3 #define B 0x029F int prev = 31; int p0 = 31; int p1 = 106; int p2 = 181; int p3 = 256; int p4 = 331; int p5 = 406; int t0 = 5; int t1 = 8; int t2 = 18; int t3 = 10; int t4 = 15; int t5 = 23; int r1 = 2; int r2 = 5; int y; int x; int h = 10; void setup() { tft.reset(); Serial.begin(9600); uint16_t ID = tft.readID(); tft.begin(ID); tft.setRotation(0); tft.invertDisplay(true); tft.fillScreen(0xCC92); tft.invertDisplay(1); int val0 = map(t0, 0, 30, 31, 315); int val1 = map(t1, 0, 30, 31, 315); int val2 = map(t2, 0, 30, 31, 315); int val3 = map(t3, 0, 30, 31, 315); int val4 = map(t4, 0, 30, 31, 315); int val5 = map(t5, 0, 30, 31, 315); Serial.println(val0); Serial.println(val1); Serial.println(val2); Serial.println(val3); Serial.println(val4); Serial.println(val5); // tft.drawFastVLine(20, 0, 300, YELLOW); // for (uint16_t a = 0; a < 5; a++) { // tft.drawLine(50, 50 + a, 100, 100 + a, b); // } // tft.fillCircle(8, 310, 8, G); // tft.fillCircle(8, 310, 4, GT); /* for (uint16_t a = 0; a < 3; a++) { tft.drawLine(40, 40 + a, 400, 40 + a, B); tft.drawLine(40 + a, 40, 40 + a, 500, B); } tft.fillTriangle(46,460,36,460,41,480,B); tft.fillTriangle(300,46,300,36,320,41,B); tft.setCursor(25,280); tft.setTextColor(B); tft.setTextSize(2); tft.setRotation(1); tft.println("0"); tft.fillCircle(41, 279, 3, B); tft.setCursor(25,218); tft.println("7"); tft.fillCircle(41, 223, 3, B); tft.setCursor(15,161); tft.println("14"); tft.fillCircle(41, 167, 3, B); tft.setCursor(15,103); tft.println("21"); tft.fillCircle(41, 111, 3, B); tft.setCursor(15,47); tft.println("28"); tft.fillCircle(41, 54, 3, B); tft.setCursor(18,9); tft.println("C"); for (uint16_t a = 0; a < 2; a++) { tft.drawCircle(8, 9, 3 - a, B); } */ for (uint16_t a = 0; a < 3; a++) { tft.drawLine(30, 30 + a, 400, 30 + a, B); tft.drawLine(30 + a, 30, 30 + a, 500, B); } tft.fillTriangle(36, 460, 26, 460, 31, 480, B); tft.fillTriangle(300, 36, 300, 26, 320, 31, B); tft.setCursor(13, 9); tft.setTextColor(B); tft.setTextSize(2); tft.setRotation(1); tft.println("C"); for (uint16_t a = 0; a < 2; a++) { tft.drawCircle(8, 9, 3 - a, B); } tft.setRotation(1); tft.fillCircle(p0, 288, 3, B); tft.setCursor(28, 295); tft.println("1"); tft.fillCircle(p1, 288, 3, B); tft.setCursor(101, 295); tft.println("2"); tft.fillCircle(p2, 288, 3, B); tft.setCursor(176, 295); tft.println("3"); tft.fillCircle(p3, 288, 3, B); tft.setCursor(251, 295); tft.println("4"); tft.fillCircle(p4, 288, 3, B); tft.setCursor(325, 295); tft.println("5"); tft.fillCircle(p5, 288, 3, B); tft.setCursor(400, 295); tft.println("6"); tft.setRotation(0); for (uint16_t a = 0; a < 3; a++) { tft.drawLine(val0, p0 + a, val1, p1 + a, B); } for (uint16_t a = 0; a < 3; a++) { tft.drawLine(val1, p1 + a, val2, p2 + a, B); } for (uint16_t a = 0; a < 3; a++) { tft.drawLine(val2, p2 + a, val3, p3 + a, B); } for (uint16_t a = 0; a < 3; a++) { tft.drawLine(val3, p3 + a, val4, p4 + a, B); } for (uint16_t a = 0; a < 3; a++) { tft.drawLine(val4, p4 + a, val5, p5 + a, B); } for (uint16_t a = 0; a < 2; a++) { tft.drawFastVLine(val5 + a, p5, 75, B); } for (int a = 10; a < 29; a++) { tft.drawFastVLine(val5, prev, h, B); prev = prev + h + h; } prev = 31; for (int a = 10; a < 25; a++) { tft.drawFastVLine(val4, prev, h, B); prev = prev + h + h; } prev = 31; for (int a = 10; a < 21; a++) { tft.drawFastVLine(val3, prev, h, B); prev = prev + h + h; } prev = 31; for (int a = 10; a < 18; a++) { tft.drawFastVLine(val2, prev, h, B); prev = prev + h + h; } prev = 31; for (int a = 0; a < 4; a++) { tft.drawFastVLine(val1, prev, h, B); prev = prev + h + h; } prev = 31; for (int a = 0; a < 0; a++) { tft.drawFastVLine(val0, prev, h, B); prev = prev + h + h; } prev = 31; tft.fillCircle(val0, p0, r2, G); tft.fillCircle(val0, p0, r1, GT); tft.fillCircle(val1, p1, r2, G); tft.fillCircle(val1, p1, r1, GT); tft.fillCircle(val2, p2, r2, G); tft.fillCircle(val2, p2, r1, GT); tft.fillCircle(val3, p3, r2, G); tft.fillCircle(val3, p3, r1, GT); tft.fillCircle(val4, p4, r2, G); tft.fillCircle(val4, p4, r1, GT); tft.fillCircle(val5, p5, r2, G); tft.fillCircle(val5, p5, r1, GT); } void loop() { // put your main code here, to run repeatedly: }
А если так: строить график не точками, а вертикальными линиями от оси абсцисс до соответствующего значения?
Если ты хочешь ничего не менять, но чтобы при этом поведение программы поменялось, то ты ошибся форумом. Тебе вот сюда или вот сюда. Там есть соответствующие специалисты.
А если так: строить график не точками, а вертикальными линиями от оси абсцисс до соответствующего значения?
Ну, тебе ж сказали
а ты советуешь изменить построение графика :(
ShadowFlash - я честно говоря, не вполне понял, что надо закрасить., но вообще закрашивание делается рисованием поверх рисунка цветом фона
Например, чтобы закрасить нижние 20 точек экрана - нужно нарисовать в той области закрашенный прямоугольник (не забыв предварительно выбрать для закраски цвет фона):
А как их соединять по горизонтали? Также точками, или есть еще какието команды?
А как их соединять по горизонтали? Также точками, или есть еще какието команды?
кого "их"?
ShadowFlash - я честно говоря, не вполне понял, что надо закрасить., но вообще закрашивание делается рисованием поверх рисунка цветом фона
Например, чтобы закрасить нижние 20 точек экрана - нужно нарисовать в той области закрашенный прямоугольник (не забыв предварительно выбрать для закраски цвет фона):
Вот так должно быть
Сделал тоже через опу как сам график, поэтому все закрашивается очень медленно, рисовалось все линиями. Спасибо за идею с прямоугольником, попробую
А как их соединять по горизонтали? Также точками, или есть еще какието команды?
кого "их"?
вертикальными линиями от оси абсцисс
Если ты хочешь ничего не менять, но чтобы при этом поведение программы поменялось, то ты ошибся форумом. Тебе вот сюда или вот сюда. Там есть соответствующие специалисты.
Вам плятят за то что вы под каждой темой чтото пишете? Не зная ответа на вопрос, лишь бы написать?
Вот так должно быть
о, наконец-то понял
одним прямоугольником не обойдетесь, посмотрите, есть ли в библиотеке метод fillTriangle(). Если да - область под каждой парой точек разбиваете на прямоугольник и треугольник, каждый закрашиваете. Должно работать существенно быстрее линий
Вам плятят за то что вы под каждой темой чтото пишете? Не зная ответа на вопрос, лишь бы написать?
не огрызайтесь, Ворота человек хороший, он просто резковат иногда...
2Ворота - не трогай парня :). он нормальный вопрос задал, просто спервого раза обьяснил кривовато.
о, наконец-то понял
одним прямоугольником не обойдетесь, посмотрите, есть ли в библиотеке метод fillTriangle(). Если да - область под каждой парой точек разбиваете на прямоугольник и треугольник, каждый закрашиваете. Должно работать существенно быстрее линий
Да есть, сегодня займусь, спасибо
Сделал тоже через опу как сам график, поэтому все закрашивается очень медленно, рисовалось все линиями. Спасибо за идею с прямоугольником, попробую
рисовать надо было
Сделал тоже через опу как сам график, поэтому все закрашивается очень медленно, рисовалось все линиями. Спасибо за идею с прямоугольником, попробую
рисовать надо было
Что имеете ввиду, сам график или закрашивание графика?
В любом случае, на сколько мне известно нельзя рисовать операторами drawFastHLine и drawFastVLine по диагонали
Сделал тоже через опу как сам график, поэтому все закрашивается очень медленно, рисовалось все линиями. Спасибо за идею с прямоугольником, попробую
рисовать надо было
Что имеете ввиду, сам график или закрашивание графика?
В любом случае, на сколько мне известно нельзя рисовать операторами drawFastHLine и drawFastVLine по диагонали
ну очивидно же! про закраску.
а илюзий на счет fillrect и filltriangle я бы не строил, дольше вычислять координаты вершин будете, а в итоге они выливаются в drawline и drawpixel.
В любом случае, на сколько мне известно нельзя рисовать операторами drawFastHLine и drawFastVLine по диагонали
еще бы :))))
Ведь это же Fast Vertical Line :)))) И Horizontal
дольше вычислять координаты вершин будете, а в итоге они выливаются в drawline и drawpixel.
координаты там вычислять не нужно вовсе, они все уже при рисовании самого графика вычислены. Другой вопрос, что закраска фигур, скорее всего, и правда реализована через линии... лень смотреть библиотеку :)
дольше вычислять координаты вершин будете, а в итоге они выливаются в drawline и drawpixel.
координаты там вычислять не нужно вовсе, они все уже при рисовании самого графика вычислены. Другой вопрос, что закраска фигур, скорее всего, и правда реализована через линии... лень смотреть библиотеку :)
Я думаю что угодно будет быстрее чем мой способ :D
Я думаю что угодно будет быстрее чем мой способ :D
вы бы не хвастались, а давно переписали бы по-нормальному. И начните с добавления массива для точек графика - а то рисование 6 точек шестью одинаковыми блоками кода просто режет глаз.
Я думаю что угодно будет быстрее чем мой способ :D
вы бы не хвастались, а давно переписали бы по-нормальному. И начните с добавления массива для точек графика - а то рисование 6 точек шестью одинаковыми блоками кода просто режет глаз.
Думаю пока памяти хватает, не критично. А так какие еще есть советы, кроме массивов?
Думаю пока памяти хватает, не критично. А так какие еще есть советы, кроме массивов?
после такого ответа - никакие.
после такого ответа - никакие.
Как все у вас строго :D
Как все у вас строго :D
просто копипаста блоков кода вместо использования циклов - это признак полного неумения программировать. И "улучшать" такой код без перехода на массив - бессмысленно.
Более того, я считю саму просьбу что-то подсказать по такому коду - неуважением к тому. кто будет копаться в этой "помойке"
это признак полного неумения программировать.
Дык так и есть
Дык так и есть
ну тогда начните с изучения циклов. Ваш код в итоге сократится раза в 4 и "улучшать" его станет в 6 раз проще.
Не говоря уж о том, что код построения графика, рассчитанный на жестко заданное число точек, на 6 - и не работающий скажем на 3х точках или 300х -никому не нужная бредятина.
Думаю пока памяти хватает, не критично. А так какие еще есть советы, кроме массивов?
b707, ты по-прежнему считаешь, что
???
Дык так и есть
Тогда слушай, что тебе знающие люди говорят и делай, а не думай, что критично, а что - нет.
Не говоря уж о том, что код построения графика, рассчитанный на жестко заданное число точек, на 6 - и не работающий скажем на 3х точках или 300х -никому не нужная бредятина.
Всмысле никому? а мне?) Будем мониторить погоду за последние 6 дней
О, воротА с ноги ворвались :D
b707, ты по-прежнему считаешь, что он нормальный вопрос задал
ну вопрос то его от этого не изменился :)
Не зная ответа на вопрос, лишь бы написать?
В том-то и дело, что я знаю ответ на вопрос и он таков: без изменений в программе ничего не изменится. Так что просьба из твоего первого поста невыполнима в принципе. А если вместо признания косяка ты начинаешь качать права - никогда не будешь программировать. Перед компьютером качать права бесполезно - он не понимает.
ну вопрос то его от этого не изменился :)
Так вопрос-то был не то, чтобы нормальный. Вопрос был "как сделать, чтобы закрашивалось, но в программе ничего не менять". Ответ динственный - никак :)
Всмысле никому? а мне?) Будем мониторить погоду за последние 6 дней
я так понимаю - пока вы вопрос задавали - тон был вежливым и уважительным. а как ответ получили - можно и не миндальничать?
ну-ну. Не плюй в колодец...
ну вопрос то его от этого не изменился :)
Так вопрос-то был не то, чтобы нормальный. Вопрос был "как сделать, чтобы закрашивалось, но в программе ничего не менять". Ответ динственный - никак :)
Ну все правильно, менять нельзя, но добавлять то можно
Всмысле никому? а мне?) Будем мониторить погоду за последние 6 дней
я так понимаю - пока вы вопрос задавали - тон был вежливым и уважительным. а как ответ получили - можно и не миндальничать?
ну-ну. Не плюй в колодец...
Если Вас как то задел - извините, не хотел.
если вместо признания косяка ты начинаешь качать права - никогда не будешь программировать. Перед компьютером качать права бесполезно - он не понимает.
ну да, ошибся я. Думал нормальный новичок, зочет научится. а оказалась
добавили, рисуется медлено, чего еще хотите ?
Ну все правильно, менять нельзя
"нельзя" или просто лень?
Охх, что мне не нравится в форумах, это то что большинство такие высокомерные, до жути, как будто решают вопросы мировых масштабов.
Ну все правильно, менять нельзя
"нельзя" или просто лень?
Изначальный вопрос гласит нельзя, моя цель на сейчас, что бы все попросту работало, оптимизация это уже следующий шаг. Если конечно памяти хватит)
Ну все правильно, менять нельзя, но добавлять то можно
Ты опять пытаешься выкрутиться, вместо того, чтобы просто признать неверную формулировку вопроса. Если у тебя таков обычный стиль поведения - тебе будет очень трудно програмировать. Ты будешь вечно "не пойми кому" доказывать, что ты-то написал всё правильно, а тупой компилятор ... Привыкай спокойно признавать ошибки и переделывать. Без этого в программировании никак. И нормально воспринимать шутки (типа моего первого поста), тоже привыкай. Не программируют без таких навыков..
Ну все правильно, менять нельзя, но добавлять то можно
Ты опять пытаешься выкрутиться, вместо того, чтобы просто признать неверную формулировку вопроса. Если у тебя таков обычный стиль поведения - тебе будет очень трудно програмировать. Ты будешь вечно "не пойми кому" доказывать, что ты-то написал всё правильно, а тупой компилятор ... Привыкай спокойно признавать ошибки и переделывать. Без этого в программировании никак. И нормально воспринимать шутки (типа моего первого поста), тоже привыкай. Не программируют без таких навыков..
Хмм. Я перечитал вопрос и не понял неверно сформулировал, я написал именно то, что имел ввиду. Ошибки признаю, в которых действитель ошибся, например код - помойка :) На счет шуток уж незнаю, вы второй раз отвечаете на мой вопрос, и второй раз смешно "шутите".
Ворота, да брось ты его. Типичный "мне нужно что бы работало сейчас, а разбираться я буду потом". Напишет еще пару сообщений и уйдет навсегда
Да, b707, после #42 я уже всё понял.
О-о-о, так это ж qwerty13rus! Знал бы - и "не торговался бы". Нехрен ники менять. Не менял бы, я бы и не писал ничего :))))
О-о-о, так это ж qwerty13rus
что, неужели? Да, ну неправда...
Столько времени ардуино занимается - а до сих пор массивы не знает? Неужели такой тупой?
Уже на оскорбления перешли. Об этом я и говорю, такое самомнение как будто вчера спасли призидента. b707 или тебя в детстве обидели, а теперь таким образом хочешь самоутвердиться?
Из за одного тебя привыкать? Много чести. Обойдусь без таких "полезных" советов
Уже на оскорбления перешли. Об этом я и говорю, такое самомнение как будто вчера спасли призидента. b707 или тебя в детстве обидели, а теперь таким образом хочешь самоутвердиться?
По сути возражения есть? Ну что-нибудь типа "нет, я не кверти13, вы перепутали"?
Потому как если угадали правильно - то и пенять нечего. Сколько вы тут и на Амперке тем создали - в основном с элементарными, простейшими вопросами - а все не можете понять, что надо сесть за учебники и пройти хотя бы базовый курс, все тешите себя иллюзиями, что "вот сейчас эту проблему решу - а дальше получится". НЕ ПОЛУЧИТСЯ.
Я в ваши темы на Амперке уже стараюсь не заходить - тупость одна. И тут бы слова не сказал. если б знал, кто пишет.
Уже на оскорбления перешли. Об этом я и говорю, такое самомнение как будто вчера спасли призидента. b707 или тебя в детстве обидели, а теперь таким образом хочешь самоутвердиться?
По сути возражения есть? Ну что-нибудь типа "нет, я не кверти13, вы перепутали"?
Потому как если угадали правильно - то и пенять нечего. Сколько вы тут и на Амперке тем создали - в основном с элементарными, простейшими вопросами - а все не можете понять, что надо сесть за учебники и пройти хотя бы базовый курс, все тешите себя иллюзиями, что "вот сейчас эту проблему решу - а дальше получится". НЕ ПОЛУЧИТСЯ.
Я в ваши темы на Амперке уже стараюсь не заходить - тупость одна. И тут бы слова не сказал. если б знал, кто пишет.
Я уже писал что кверти это я, пароля от него нет. Вот сейчас эту проблему решу, а дальше буду разбираться с остальными? Проблемы надо решать по мере их поступления. Думаю обойдусь без таких через чур умных советчиков