вывод температуры на ILI9341
- Войдите на сайт для отправки комментариев
Втр, 11/12/2018 - 16:24
Добрый день всем!
При выводе следующего значения тмпературы оно как бы накладывается на предыдущее
// Видеообзоры и уроки работы с ARDUINO на YouTube-канале IOMOIO: https://www.youtube.com/channel/UCmNXABaTjX_iKH28TTJpiqA #include "Adafruit_GFX.h" // Библиотека обработчика графики #include "Adafruit_ILI9341.h" // Программные драйвера для дисплеев ILI9341 #include "URTouch.h" // Библиотека для работы с сенсорным экраном #include <OneWire.h> // Подключаем библиотеку Wire //#include <LiquidCrystal_I2C.h> // Подключаем библиотеку LiquidCrystal_I2C #include <DallasTemperature.h> // Подключаем библиотеку DallasTempature #define DS18B20 2 // Указываем, к какому выводу подключена DQ //byte simvol[8] = {B11100,B10100,B11100,B00000,B00000,B00000,B00000,B00000,}; // Символ градуса //LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размер дисплея OneWire oneWire(DS18B20); DallasTemperature sensors(&oneWire); // Создаем объект DallasTemperature для работы с сенсорами, передавая ему ссылку на объект для работы с 1-Wire. DallasTemperature dallasSensors(&oneWire); // Специальный объект для хранения адреса устройства DeviceAddress sensorAddress; #define TFT_DC 9 // Пин подключения вывода D/C дисплея #define TFT_CS 10 // Пин подключения вывода CS дисплея // Для управления очисткой экрана с помощью кнопки RESET на Arduino подключить вывод дисплея RESET через резистор к пину RESET на плате Arduino // Для Mega 2560 вывод дисплея RESET, если не подключен в пин RESET на Arduino, подключить в 3.3V (без резистора), либо в 5V (с резистором) #define TFT_RST 8 // Пин подключения вывода RESET (Если подключен к питанию или кнопке, то эту строку закомментировать, а следующую раскомментировать) // #define TFT_RST -1 // Если вывод дисплея RESET подключен к питанию или через кнопку RESET на Arduino // Uno Hardware SPI #define TFT_MISO 12 // Пин подключения вывода дисплея SDO(MISO) #define TFT_MOSI 11 // Пин подключения вывода дисплея SDI(MOSI) #define TFT_CLK 13 // Пин подключения вывода дисплея SCK /* // Mega 2560 Hardware SPI #define TFT_MOSI 51 // Пин подключения вывода дисплея SDI(MOSI) #define TFT_CLK 52 // Пин подключения вывода дисплея SCK #define TFT_MISO 50 // Пин подключения вывода дисплея SDO(MISO) */ Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); // Создаем объект дисплея и сообщаем библиотеке распиновку для работы с графикой #define t_SCK 3 // Пин подключения вывода дисплея T_CLK #define t_CS 4 // Пин подключения вывода дисплея T_CS #define t_MOSI 5 // Пин подключения вывода дисплея T_DIN #define t_MISO 6 // Пин подключения вывода дисплея T_DOUT #define t_IRQ 7 // Пин подключения вывода дисплея T_IRQ URTouch ts(t_SCK, t_CS, t_MOSI, t_MISO, t_IRQ); // Создаем объект сенсорного модуля и сообщаем библиотеке распиновку для работы с ним void setup(){ tft.begin(); // Инициализируем начало работы с графическим дисплеем tft.setRotation(1); // Переводим дисплей в альбомную ориентацию ts.InitTouch(); // Инициализируем сенсорный модуль дисплея ts.setPrecision(PREC_EXTREME); // Определяем необходимую точность обработки нажатий: PREC_LOW - низкая, PREC_MEDIUM - средняя, PREC_HI - высокая, PREC_EXTREME - максимальная } void loop() { dallasSensors.setResolution(sensorAddress,12); tft.setTextColor(ILI9341_BLACK); // Определяем цвет текста для вывода на дисплей tft.setTextSize(3); // Определяем размер шрифта для вывода на дисплей tft.setCursor(20,80); // Определяем координаты верхнего левого угла области вывода tft.print("Balkon T="); // Выводим текст sensors.requestTemperatures(); // Считываем показания температуры tft.print(sensors.getTempCByIndex(0)); // Выводим показания температуры int x, y; // Переменные для работы с координатами нажатий while(ts.dataAvailable()) // Пока имеются данные с сенсорного модуля { ts.read(); // Считываем с него данные x = ts.getX(); // Считываем координату нажатия X y = ts.getY(); // Считываем координату нажатия Y if((x!=-1) && (y!=-1)) // Если обе координаты в положительном диапазоне (т.е. если есть нажатие) { x += 13; // Корректируем координату с учетом калибровочных данных y += 4; // Корректируем координату с учетом калибровочных данных int radius = 4; // Определяем радиус разрисовки tft.fillCircle(x, y, radius, ILI9341_RED); // Рисуем, цвет красный } } } // Начало функции обработки кириллических символов String utf8rus(String source) // Функция для конвертации русских символов из двубайтовой кодировки в однобайтовую { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xBF){ switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x2F; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB7; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x6F; break; } } } m[0] = n; target = target + String(m); } return target; } // Конец функции обработки кириллических символов
При выводе следующего значения тмпературы оно как бы накладывается на предыдущее
Принято к сведению.
Когда (и если) у Вас появятся вопросы, не стесняйтесь - спрашивайте.
Как можно исправить?
А что нужно-то?
При выводе следующего значения тмпературы оно как бы накладывается на предыдущее
Нужно чтобы накоадывалось не "как бы" а полноценно? Или чтобы не накладывалось? Объсняйтесь толком.
Нужно, чтобы реальную температуру показывал.
Так надо, чтобы накладывался, как окна в Windows? Или чтобы старое стиралось? Скажите толком.
Накладывается так, что символы искажаются.
Надо, чтобы старое стиралось.
Вот. Стирай сначала старое.
Не можешь сам - спроси у автора кода.
Я не очень программист.
Я использовал два источника кода.
Тот,что указан в начале не использовал измерение температуры.
Как стирать?
Как стирать?
Ну, не знаю, ну выведете туда пробелы или пустую "картинку", а потом уже выводите то, что надо.
Можете вывести строку из нескольких пробелов? Выводите. Она сотрёт то, что там было.
Спасибо за помощь, но
Не помогло
Что, стёрли, а оно снова проступило? :)))
Наверное, не получается стереть.
Значит, экран магический. Или в библиотеке режим "наложения" включен
Ну, не получается, значит не судьба. Тем более, что код секретный :(
Кстати, пробел может и не стирать, смотря как написан. Я Вам там не зря писал "пробел или пустая картинка" (она ещё называется "забой").
Где картинку эту взять?
Ну, в Вашей библиотеке (Adafruit_ILI9341) есть функция fillRect. Она заполняет прямоугольник тем цветом, который укажете. Вот и заполните нужный прямоугольник нулевым цветом (или ILI9341_WHITE - не знаю, какой там у Вас фон).
А синтаксис какой?
Я ж не очень программист.
Как написать строчку?
Я ж не очень программист.
А зачем взялись программировать? Если Вам надо, чтобы кто-то написал за Вас, то запостите хотелку в разделе Ищу исполнителя
Ну, в Вашей библиотеке (Adafruit_ILI9341) есть функция fillRect. Она заполняет прямоугольник тем цветом, который укажете. Вот и заполните нужный прямоугольник нулевым цветом (или ILI9341_WHITE - не знаю, какой там у Вас фон).
не нужно это, Евгений Петрович. В этой либе есть два способа вывода текста - поверх старого или с автоматическим стиранием предыдущего
В этой либе есть два способа вывода текста
Тем более!