Что за артефакт появляется на экране
- Войдите на сайт для отправки комментариев
Вс, 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, т.е. со временем у Вас на экране образуются несколько кривых.
Спасибо ЕвгенийП, ваш первый совет помог. Проблема изчезла.
Второй, соглашусь.
По четвертому, на фото я просто хотел показать проблему. А так да массив до конца не был заполнен данными.
По пятому, просто хотелось по максимуму урезать скетч, чтобы лишний раз помошники не забивали голову не нужной инфо в скетче.