вывод температуры на ILI9341

kombatus
Offline
Зарегистрирован: 24.03.2018

Добрый день всем!

При выводе следующего значения тмпературы оно как бы накладывается на предыдущее

// Видеообзоры и уроки работы с 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;
}
// Конец функции обработки кириллических символов

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

kombatus пишет:

При выводе следующего значения тмпературы оно как бы накладывается на предыдущее

Принято к сведению.

Когда (и если) у Вас появятся вопросы, не стесняйтесь - спрашивайте.

kombatus
Offline
Зарегистрирован: 24.03.2018

Как можно исправить?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что нужно-то?

kombatus пишет:

При выводе следующего значения тмпературы оно как бы накладывается на предыдущее

Нужно чтобы накоадывалось не "как бы" а полноценно? Или чтобы не накладывалось? Объсняйтесь толком.

kombatus
Offline
Зарегистрирован: 24.03.2018

Нужно, чтобы реальную температуру показывал.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так надо, чтобы накладывался, как окна в Windows? Или чтобы старое стиралось? Скажите толком.

kombatus
Offline
Зарегистрирован: 24.03.2018

Накладывается так, что символы искажаются.

Надо, чтобы старое стиралось.

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Вот. Стирай сначала старое. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Не можешь сам - спроси у автора кода.

kombatus
Offline
Зарегистрирован: 24.03.2018

Я не очень программист.

 

kombatus
Offline
Зарегистрирован: 24.03.2018

Я использовал два источника кода. 

Тот,что указан в начале не использовал измерение температуры.

kombatus
Offline
Зарегистрирован: 24.03.2018

Как стирать?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

kombatus пишет:

Как стирать?

Ну, не знаю, ну выведете туда пробелы или пустую "картинку", а потом уже выводите то, что надо.

Можете вывести строку из нескольких пробелов? Выводите. Она сотрёт то, что там было.

kombatus
Offline
Зарегистрирован: 24.03.2018

Спасибо за помощь, но

 

Не помогло

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Что, стёрли, а оно снова проступило? :)))

kombatus
Offline
Зарегистрирован: 24.03.2018

Наверное, не получается стереть.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Значит, экран магический. Или в библиотеке режим "наложения" включен

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, не получается, значит не судьба. Тем более, что код секретный :(

Кстати, пробел может и не стирать, смотря как написан. Я Вам там не зря писал "пробел или пустая картинка" (она ещё называется "забой").

kombatus
Offline
Зарегистрирован: 24.03.2018

Где картинку эту взять?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, в Вашей  библиотеке (Adafruit_ILI9341) есть функция fillRect. Она заполняет прямоугольник тем цветом, который укажете. Вот и заполните нужный прямоугольник нулевым цветом (или ILI9341_WHITE - не знаю, какой там у Вас фон).

kombatus
Offline
Зарегистрирован: 24.03.2018

А синтаксис какой?

Я ж не очень программист.

Как написать строчку?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

kombatus пишет:

Я ж не очень программист.

А зачем взялись программировать? Если Вам надо, чтобы кто-то написал за Вас, то запостите хотелку в разделе Ищу исполнителя

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

Ну, в Вашей  библиотеке (Adafruit_ILI9341) есть функция fillRect. Она заполняет прямоугольник тем цветом, который укажете. Вот и заполните нужный прямоугольник нулевым цветом (или ILI9341_WHITE - не знаю, какой там у Вас фон).

не нужно это, Евгений Петрович. В этой либе есть два способа вывода текста - поверх старого или с автоматическим стиранием предыдущего

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

В этой либе есть два способа вывода текста

Тем более!