Что за артефакт появляется на экране
- Войдите на сайт для отправки комментариев
Вс, 11/09/2016 - 22:12
#include <UTFT.h> UTFT myGLCD(TFT01_22SP, 5, 4, 8, 7, 6); extern uint8_t SmallFont[]; float dhtT; #define INTERVAL 1000 // Интервал через который производится опрос датчиков byte addressVBaze = 0; // начальный порядковый номер столбца в массиве byte dlinaGraphika = 100; // количество показаний в графике int dataTempOut[100]; // количество показаний в массиве byte otstup =45; // отступ от левого края для построения графика byte y; void setup(){ myGLCD.InitLCD(0); delay(1000); myGLCD.fillScr(255,255,255); myGLCD.setBackColor(VGA_WHITE); delay(1000); myGLCD.setColor(VGA_BLACK); } void loop(){ static unsigned long previousMillis = 0; if(millis() - previousMillis > INTERVAL) { previousMillis = millis(); proverka(); // если настоло время производим опрос recordTempData (); // записываем полученную инфо в массив myGLCD.setFont(SmallFont); // выводим на экран шкалу температуры myGLCD.print("30 C", 2, 203); myGLCD.print("15 C", 2, 225); myGLCD.drawLine(45, 253 ,240 ,253); myGLCD.print("0 C", 2, 247); myGLCD.print("-15 C", 2, 269); myGLCD.print("-30 C", 2, 291); grafik(); // рисуем график изменения температуры за промежуток времени } } // функция снятия инфо с датчиков void proverka (){ dhtT = 10; // тестовое значение температуры } // функция записи очередного данного температуры в массив void recordTempData () { dataTempOut[addressVBaze] = dhtT; ++addressVBaze; // устанавливаем следующий адрес if (addressVBaze > dlinaGraphika){ addressVBaze = 0;} } // функция создания графика температуры void grafik() { byte y = addressVBaze; for (byte x=dlinaGraphika; x>0;--x){ myGLCD.setColor(VGA_BLACK); myGLCD.drawPixel(x+otstup, 253-(dataTempOut[y]*1.5)); ++y; if (y>dlinaGraphika) {y=0;} } }
Всем привет!
Я наверное как и все новички в первых своих проектах касался темы метео станции.
И при работе с моим первым проектом метеостанции столкнулся с одной на мой взгляд интересной проблемой. При выводе создании графика температуры, на экране по мере сознания графика температуры, появляется диагональная линия идущая с лево на право (см.фото). Пользуюсь экраном http://amperka.ru/product/tft-color-display-320x240, библиотекой https://github.com/amperka/UTFT.
Помогите убрать эту линию
в строках 50 и 63 замените > на >=, иначе вылезете за границу массива. Думаю, что это и даёт Вам диагональ;
строки 11 и 12 лучше записать так
Тогда не будет возможности поменять 100 в одном месте и забыть в другом.
в строке 48 Вы присваиваете float int'у. Само по себе не страшно, если Вы понимаете, что делаете.
в функции grafik Вы всегда рисуете весь график на всю ширину, не обращая внимания на то, что у Вас, возможно, пока ещё не хватает данных в массиве dataTempOut (а массив Вы, кстати, не инициализировали)
При этом Вы не стираете старые значения по тому же X, т.е. со временем у Вас на экране образуются несколько кривых.
Спасибо ЕвгенийП, ваш первый совет помог. Проблема изчезла.
Второй, соглашусь.
По четвертому, на фото я просто хотел показать проблему. А так да массив до конца не был заполнен данными.
По пятому, просто хотелось по максимуму урезать скетч, чтобы лишний раз помошники не забивали голову не нужной инфо в скетче.