Создание сенсорных кнопок на Tft LCD (spfd5408)

KRUTENb
Offline
Зарегистрирован: 03.05.2017

Добрый день. Новичок в ардуино-программировании (то есть  я) нуждается в помощи:

В тестовых примерах библиотек Adafruit имеются вот такие функции рисования и инициализации сенсорных клавиш. Все это прекрасно работает, рисует 3 кнопки в вертикальном отображении (столбец из кнопок).Однако мне в проекте понадобится еще больше кнопок. Каким образом можно добавить кнопки  для горизонтального отображения ( например, 3 кнопки в строке) при том что, функция рисования использует тот самый массив buttonlabels? 

//------------------------

for (uint8_t i=0; i<3; i++) 
 {
      buttons[i].drawButton();
  }
//-----------------------

void initializeButtons() {

  uint16_t x = 80;
  uint16_t y = 160;
  uint16_t w = 150;
  uint16_t h = 40;

  uint8_t spacing_y = 20;
  
  uint8_t textSize = 1;

  char buttonlabels[3][20];
  strcpy(buttonlabels[0], utf8rus("Старт"));
  strcpy(buttonlabels[1], utf8rus("Загрузка"));
  strcpy(buttonlabels[2], utf8rus("Выход"));
  
  uint16_t buttoncolors[30] = {RED, RED, RED};

  for (uint8_t b=0; b<3; b++) {
    buttons[b].initButton(&tft,                           // TFT object
                  x,  y+b*(h+spacing_y),                  // x, y,
                  w, h, WHITE, buttoncolors[b], WHITE,    // w, h, outline, fill, 
                  buttonlabels[b], textSize);             // text
  }
 buttons_y = y;
  
}

 

T.Rook
Offline
Зарегистрирован: 05.03.2016

Для роста, новичку, т.е. Вам, просто необходимо научится читать. Ведь ответ на Ваш вопрос, написан в приведенном Вами коде в строках 28-31 - инит одной кнопки

KRUTENb
Offline
Зарегистрирован: 03.05.2017

Изначально код был для горизонтального расположения. Это я уже переделал. Ну да ладно-я уже сделал что-то вроде этого:

void initializeButtons() {

  uint16_t x = 80;
  uint16_t y = 160;
  uint16_t w = 150;
  uint16_t h = 40;
 
  uint8_t spacing_y = 20;
  
  uint8_t textSize = 1;

  char buttonlabels[3][20];
  strcpy(buttonlabels[0], utf8rus("Выбрать раздел"));
  strcpy(buttonlabels[1], utf8rus("Продолжить"));
  strcpy(buttonlabels[2], utf8rus("Выход"));

  uint16_t buttoncolors[30] = {RED, RED, RED,RED, RED, RED};

  for (uint8_t b=0; b<3; b++) {
    buttons[b].initButton(&tft,                           // TFT object
                  x,  y+b*(h+spacing_y),                  // x, y,
                  w, h, WHITE, buttoncolors[b], WHITE,    // w, h, outline, fill, 
                  buttonlabels[b], textSize);             // text
  }
  char buttonlabels2[6][30];
  strcpy(buttonlabels2[3], utf8rus("<<<"));
  strcpy(buttonlabels2[4], utf8rus("Меню"));
  strcpy(buttonlabels2[5], utf8rus(">>>"));
  x = 40;
  y = 290;
  w = 60;
  for (uint8_t b=3; b<6; b++) {
    uint8_t spacing_x = 20;
    buttons[b].initButton(&tft,                           
                  x,  y,                  
                  w, h, WHITE, buttoncolors[b], WHITE,      
                  buttonlabels2[b], textSize); 
   x =x+w+spacing_x ;             
 
             
  }
  // Save the y position to avoid draws
  
  buttons_y = y;

Вопрос теперь такой появился: можно ли сделать изображение кнопкой или создать кнопку с прозрачным фоном, поверх которой вывести изображение? Считывать касание в области, которую занимает картинка?