Adafruit_ST7735.h

ilyash550
Offline
Зарегистрирован: 26.06.2017

Не могу найти полный список методов и их описание, обшарил весь интернет. Нашел .pdf для Adafruit_GFX.h но немогу найти для Adafruit_ST7735.h. С подобного рода проблемой сталкиваюсь уже не первый раз. Где искать описание библиотеки?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ilyash550 пишет:

Не могу найти полный список методов и их описание, обшарил весь интернет. Нашел .pdf для Adafruit_GFX.h но немогу найти для Adafruit_ST7735.h. С подобного рода проблемой сталкиваюсь уже не первый раз. Где искать описание библиотеки?

находишь файл Adafruit_ST7735.h и читаешь.A если не понимаете открываете и этот Adafruit_ST7735.срр.

https://github.com/adafruit/Adafruit-ST7735-Library/blob/master/Adafruit...

ilyash550
Offline
Зарегистрирован: 26.06.2017

Да, я там уже порылся и теперь в недоумении. GFX - базовый класс со стандартными графическими процедурами. ST7735 - библиотека для работы с LCD-контроллером TFT-экранов диагонально 1.8" и разрешением 128x160. Для работы с Adafruit_ST7735.h нужно заимпортить GFX библиотеку, я думал ST7735 ее расширяет (тогда тоже не понятно нафига импортить GFX) переопределяет некоторые методы и имеет свои. На деле же оказалось, что все методы из Adafruit_ST7735.h есть в GFX, но не все мотоды из GFX есть в ST7735. Все методы в примерах применяються к объекту класса Adafruit_ST7735. Как это понимать? Зачем она вообще тогда нужна, эта Adafruit_ST7735.h?

ilyash550
Offline
Зарегистрирован: 26.06.2017

Может я не понимаю чего то важного, фундаментального про библиотеки? C и С++ не знаю, немного знаю Java. 

ilyash550
Offline
Зарегистрирован: 26.06.2017

Например для использования сторонних библиотек ключевое слово include а не import (как в Java), и почему перед include стоит # и не ставиться точка с запятой в конце, и этот синтаксис <>. По каким тегам погуглить об этом ибо я вообще не в курсе.

negavoid
Offline
Зарегистрирован: 09.07.2016

ilyash550 пишет:
Может я не понимаю чего то важного, фундаментального про библиотеки?

Разумеется, но это не беда, научитесь :)

ilyash550 пишет:
Например для использования сторонних библиотек ключевое слово include а не import (как в Java)

Где-то include, где-то require, в джаве вот import.

ilyash550 пишет:
почему перед include стоит # и не ставиться точка с запятой в конце

Потому что это директива компилятора, точку с запятой не надо.

ilyash550 пишет:
этот синтаксис <>

<> искать во всех возможных папках, "" только в папке проекта.

ilyash550
Offline
Зарегистрирован: 26.06.2017

Спасибо. Так как работают эти битлиотеки. В GFX больше методов чем в ST7735, но создаеться именно объект класса Adafruit_ST7735. Как это понимать? ST7735 библиотека просто переоперделяет векоторые функции, чтоб те корректно работали на конкретном дисплеи и если применить к объекту класса ST7735 метод в котором его нет но есть в GFX, он просто выполнит этот метод, так как ST7735 наследует GFX? Я правильно понял?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

negavoid пишет:

ilyash550 пишет:
почему перед include стоит # и не ставиться точка с запятой в конце

Потому что это директива компилятора, точку с запятой не надо.

Это директива препроцессора.

https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%86...

https://msdn.microsoft.com/ru-ru/library/36k2cdd4.aspx

ilyash550
Offline
Зарегистрирован: 26.06.2017

Спасибо.

negavoid
Offline
Зарегистрирован: 09.07.2016

Да, да, естественно препроцессора, думаю одно, пишу что попало.

ilyash550 пишет:
ST7735 библиотека просто переоперделяет векоторые функции, чтоб те корректно работали на конкретном дисплеи и если применить к объекту класса ST7735 метод в котором его нет но есть в GFX, он просто выполнит этот метод, так как ST7735 наследует GFX? Я правильно понял?

Да, верно, только не переопределяет, а реализует, от абстрактных функций выше в GFX, ну и заодно реализует обмен данными с физическим дисплеем.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Библиотека это просто графический движок.https://github.com/adafruit/Adafruit-GFX-Library/blob/master/Adafruit_GFX.h

Я бы даже сказал виртуальный. Сам по себе класс ничего не может, потому что в нем нет буфера данных в котором он может рисовать. Краски есть, мольберт есть, а вот бумагу (полотно) не завезли.  Но есть возможность подключить внешний метод.

  // This MUST be defined by the subclass:
  virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;

 Вот это и есть главный узел который подключает краски к бумаге.

ПС: И да не иделизируйте Adafruit_GFX.h . библиотека немного недописана. Это как работающий черновик.

ilyash550
Offline
Зарегистрирован: 26.06.2017

Спасибо, действительно. Теперь пазл сложился, сила комьюнити)

defar
Offline
Зарегистрирован: 09.02.2019

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

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#include <HX711.h>

HX711 scale(A1, A0);                                // Указываем в какие пины подключен АЦП hx711 (DT(DOUT)  - pin A1, SCK - pin A0)

#define TFT_CS     9              // TFT CS pin is connected to arduino pin 9
#define TFT_DC     10            // TFT DC pin is connected to arduino pin 10
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC);

float myScale;                                      // Инициализируем переменную в которой будем хранить текущий вес

void setup() {
  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
  tft.fillScreen(ST7735_BLACK);
  draw_text(16, 81, "0.00", 2, ST7735_WHITE);
  scale.set_scale(467.48);                          // Устанавливаем калибровочный коэффициент 
  scale.tare();                                     // Сбрасываем весы на 0
  myScale = round(scale.get_units(10));             // Запоминаем среднее значение без груза, но с учетом тары               
}
void draw_text(x_pos, y_pos, char *text, text_size, text_color) {
  tft.setCursor(x_pos, y_pos);
  tft.setTextSize(text_size);
  tft.setTextColor(text_color, ST7735_WHITE);
  tft.print(text);
}

void loop() {
  scale.power_up();                                 // Отключаем энергосберегающий режим hx711
  if (round(scale.get_units(10)) != myScale) {      // Условие выполняется, если округленный до граммов вес отличается от последнего
    myScale = scale.get_units(20);                  // Запоминаем текущий вес
   tft.fillScreen(ST7735_BLACK);
   
  if (myScale > 0.5)                              // Если вес не ничтожно мал
      draw_text(16, 81, String(myScale), 2, ST7735_WHITE);    // то выводим его
    else                                            // иначе
      draw_text(16, 81, "0.00", 2, ST7735_WHITE);             // выводим нули
      
    tft.fillScreen(ST7735_BLACK);
    myScale = round(myScale);                       // Запоминаем округленный текущий вес (для сравнения)
  }
  scale.power_down();                               // Включаем энергосберегающий режим hx711
  delay(500);                                       // Пауза на половину сек.
}

    

 

 
    
sadman41
Offline
Зарегистрирован: 19.10.2016
defar
Offline
Зарегистрирован: 09.02.2019

вставка кода