TFT LCD 3,5'' a Arduino - Menu

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

martinius96

TFT LCD 3,5'' a Arduino - Menu

Príspevok od používateľa martinius96 » 16 Júl 2017, 21:45

Ahojte, mám takýto problém. Kúpil som si z Aliexpressu TFT LCD 3.5'' displej Mcufriend. Je dotykový, example sketche, ktoré som skúšal fungujú OK. Ale nie je tu sketch pre dotykové menu, respektíve pre žiaden dotyk na button.. Mate niekto podobný displej a mohli by ste mi poslať sketch aj s knižnicou? Skúšal som UTFT knižnice, no tie nefungovali, iba Mcufriend s Adafruit GFX, Touchscreen knižnicami. Potreboval by som menu na displej pre 3 položky. Ďakujem.
Link na aliexpress: https://www.aliexpress.com/item/1pc-3-5 ... 796bb4be13

Sender
Pokročilý člen
Pokročilý člen
Príspevky: 535
Dátum registrácie: 26 Máj 2008, 00:00

Re: TFT LCD 3,5'' a Arduino - Menu

Príspevok od používateľa Sender » 16 Júl 2017, 21:59

Odkaz nefunguje.
0

Používateľov profilový obrázok
Najgel
Ultimate člen
Ultimate člen
Príspevky: 1695
Dátum registrácie: 02 Júl 2010, 00:00
Bydlisko: Námestovo, Žilina(škola)
Vek: 29

Re: TFT LCD 3,5'' a Arduino - Menu

Príspevok od používateľa Najgel » 16 Júl 2017, 22:04

Funguje.
0
Keď neodpisujem tak tu nie som, alebo som a neodpisujem :D

MPLAB & PIC
Texas Instruments DSP TMS320Fxxxxx
Tevo Tarantula 3D
Ponúkam 3D tlač.
Ponúkam návrh a vývoj elektroniky na zákazku.

UNIZA 5.ročník

martinius96

Re: TFT LCD 3,5'' a Arduino - Menu

Príspevok od používateľa martinius96 » 18 Júl 2017, 00:46

Ahoj, našiel som MENU! Je síce ruské, ale bude sa dať použiť! Len mám prevrátené osi alebo čo. Ak klikám vľavo hore, kde sa spúšťa button menu tak mi to kliká napravo dole a taktiež si myslím, že to rozlíšenie tam nie je presné... Vedeli by ste mi pomôcť prevrátiť osi + nastaviť rozlíšenie 480x320px? Na šírku! Landscape.. veľmi by som vám bol vďačný, nikdy som s TFT LCD displejom nerobil.
Kód, ku ktorému som sa dostal je takýto:

Kód: Vybrať všetko

#include <Adafruit_GFX.h>    // Core graphics library
#include <MCUFRIEND_kbv.h>
#include <TouchScreen.h>

//тач скрин
#define YP A1  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 7   // can be a digital pin
#define XP 6   // can be a digital pin
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);


#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define TEST            0x1BF5
#define JJCOLOR         0x1CB6  //ораньжевый
#define JJORNG          0xFD03

int homePage;
int settings;
int blv;
int barv;
int backlightbox;
int press=0;
int pressBatton3=0;
int pressbatto4=0;//меняем цвет при нажатии
boolean ledOn1 = false;
boolean lastButton = LOW;
boolean ledOn2 = false;
boolean lastButton1 = LOW;
int settings2;

//настройка тача
#define TS_MINX 190
#define TS_MINY 130
#define TS_MAXX 860
#define TS_MAXY 900

//чувствительность нажатия на тач
#define MINPRESSURE 10
#define MAXPRESSURE 1000
#define LCDROTATION 0


int ledPin = 11;

MCUFRIEND_kbv tft;

void setup(void) {
Serial.begin(9600);
  Serial.println(F("TFT LCD test"));
  pinMode(ledPin, OUTPUT);
  tft.reset();
  tft.begin(0x9488);
  tft.fillScreen(BLACK);
  tft.setRotation(1);
 // blv = EEPROM.read(1);
  tft.setTextColor(WHITE);

  home();

}

void home(){

homePage=1; //главная активна
/////////////////////////////////////   1  2   ///////////////////////
   tft.setTextSize(4);
  // tft.fillRect(0,0,320,87, BLUE);
   tft.drawLine(1,43,480,43, RED);
   tft.setCursor(50,10);
   tft.println("!!!PRIVET MIR!!!");
   tft.setTextSize(2);
   tft.setCursor(90,75);
   tft.println("DACO");
   /////////////////////////Рисуем первую кнопку/////////////////////
  tft.setTextSize(3);
  tft.drawRoundRect(20,120,210,80,5, CYAN);    //ободок кнопки 1
  tft.fillRoundRect(21,121,208,78,5, RED);     // кнопка 1
  tft.setCursor(33,130);                       //устанавливаем курсор
  tft.println("TEST MENU");           //Пишем на кнопке
  tft.setCursor(180,160);                      //еще чуть опускаем курсор
  tft.println("N1");                           //пишем на кнопке
  ///////////////////////Рисуем Вторую кнопку//////////////////////
  tft.drawRoundRect(250,120,210,80,5, CYAN);  //ободок кнопки 2
  tft.fillRoundRect(251,121,208,78,5, RED); //кнопка 2
  tft.setCursor(260,130);
 tft.println("TEST MENU");  
  tft.setCursor(410,160);
  tft.println("N2");
 
 /*
  * Так как хом выводится на экран каждый раз как вы нажимаете назад
  * Дальнейшая часть пишется пожже но суть в том что программа проверяет значение
  * кнопки нажата ли она и в соответствии с ее значением выводит эти данные на экран
  */
 if (lastButton==true ){                       //Если кнопка 1 нажата то программа рисует кнопку с надписью вкл
  tft.drawRoundRect(20,220,210,80,5, GREEN);   //ободок кнопки 3 нажатой
       tft.fillRoundRect(21,221,208,78,5, RED); //кнопка 3 нажатая
        tft.setCursor(40,230);
tft.println("TEST MENU");  
  tft.setCursor(180,270);
  tft.println("ON");
 }
 else {                                          //Если кнопка не была нажата то программа рисует кнопку выкл
  tft.setTextSize(3);
      tft.drawRoundRect(20,220,210,80,5, CYAN);   //ободок кнопки 3   //ободок кнопки 3 нажатой
       tft.fillRoundRect(21,221,208,78,5, RED); // кнопка 3 //кнопка 3 нажатая
        tft.setCursor(40,230);
tft.println("TEST MENU");  
  tft.setCursor(170,270);
  tft.println("OFF");
 }///////////////////////////тоже самое только для кнопки 2/////////////////////////
 if (lastButton1==true ){
  tft.drawRoundRect(250,220,210,80,5, GREEN);  //ободок кнопки 4
      tft.fillRoundRect(251,221,208,78,5, RED); //кнопка 4
      tft.setCursor(270,230);
  tft.println("TEST MENU");  
  tft.setCursor(400,270);
  tft.println("ON");
 }
 else {
  tft.drawRoundRect(250,220,210,80,5, CYAN);  //ободок кнопки 4
  tft.fillRoundRect(251,221,208,78,5, RED); //кнопка 4
  tft.setCursor(270,230);
tft.println("TEST MENU");  
  tft.setCursor(400,270);
  tft.println("OFF");
  
 }
    }
void loop() {


  TSPoint p = ts.getPoint();



  //pinMode(XP, OUTPUT);
  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);
// pinMode(YM, OUTPUT);


    #if LCDROTATION == 0
   if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
    // scale from 0->1023 to tft.width
  p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
  p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);

    Serial.print("X = "); Serial.print(p.x);
     Serial.print("\tY = "); Serial.print(p.y);
     Serial.print("\tPressure = "); Serial.println(p.z);
   }

    #elif LCDROTATION == 1
    #elif LCDROTATION == 2
    #elif LCDROTATION == 3
#endif

if (p.x > 145 && p.x < 296 && p.y > 164 && p.y < 305 && homePage== 1 ){//кновка 1
  Serial.print("\n pressed button 1 \n");

  press=1;
    if (press==1){
      tft.drawRoundRect(20,120,210,80,5,GREEN);   //ободок кнопки 1 // кнопка 1
      
      delay(150);
      tft.drawRoundRect(20,120,210,80,5,CYAN); // кнопка 1
            press=0;
      }
      settings=1;
      tft.fillRect(0,0,480,320, BLACK);
  settingsscr();
  tft.setCursor(120,100);
    tft.setTextSize(3);
   tft.println("TEST MENU");  
}


if (p.x > 150 && p.x < 230 && p.y > 5 && p.y < 130 && homePage== 1){//кновка 2
  Serial.print("\n pressed button 2 \n");

     press=2;
    if (press==2){
      
      tft.drawRoundRect(250,120,210,80,5,GREEN);   //ободок кнопки 2 
      
      delay(150);
      tft.drawRoundRect(250,120,210,80,5, CYAN); // кнопка 2
            press=0;
      
      }
      settings2=1;
      tft.fillRect(0,0,480,320, BLACK);
  settingsscr1();
  tft.setCursor(150,150);
    tft.setTextSize(3);
     tft.println("TEST MENU");  
}

  if (p.x > 342 && p.x < 458 && p.y > 168 && p.y < 290 && homePage== 1 ){//кновка 3
  Serial.print("\n pressed button 3");
    press=3;
      if (press==3 && lastButton == LOW){
                ledOn1 = !ledOn1;
                delay (500);
                lastButton = HIGH;
      tft.setTextSize(3);
      tft.drawRoundRect(20,220,210,80,5, GREEN);   //ободок кнопки 3 нажатой
       tft.fillRoundRect(21,221,208,78,5, RED); //кнопка 3 нажатая
        tft.setCursor(40,230);
tft.println("TEST MENU");  
  tft.setCursor(180,270);
  tft.println("ON");
      
      }
      else {
        delay (501);
        press=0;
        lastButton = press;
     
     tft.drawRoundRect(20,220,210,80,5, CYAN);   //ободок кнопки 3 после нажатия
     tft.fillRoundRect(21,221,208,78,5, RED);     //кнопка 3 после нажатия
      tft.setCursor(40,230);
  tft.println("TEST MENU");  
  tft.setCursor(170,270);
  tft.println("OFF");
      press = ledOn1;
      
      }
}

  if (p.x > 330 && p.x < 460 && p.y > 5 && p.y < 136 && homePage== 1){//кновка 4
  Serial.print("\n pressed button 4");
    press=4;
     if (press==4 && lastButton1 == LOW){
                ledOn2 = !ledOn2;
                delay (500);
                lastButton1 = HIGH;
      tft.setTextSize(3);
      tft.drawRoundRect(250,220,210,80,5, GREEN);  //ободок кнопки 4
      tft.fillRoundRect(251,221,208,78,5, RED); //кнопка 4
      tft.setCursor(270,230);
tft.println("TEST MENU");  
  tft.setCursor(400,270);
  tft.println("ON");
      
      }
      else {
        delay (501);
        press=0;
        lastButton1 = press;
     tft.drawRoundRect(250,220,210,80,5, CYAN);  //ободок кнопки 4
      tft.fillRoundRect(251,221,208,78,5, RED); //кнопка 4
      tft.setCursor(270,230);
tft.println("TEST MENU");  
  tft.setCursor(400,270);
  tft.println("OFF");
      press = ledOn1;
      
      
      }
  }

    // backlight buttons
    if (p.y >266 && p.y < 303 && p.x > 253 && p.x <310 && settings == 1) {
        Serial.print("\n pressed button backlight --");
        Serial.print("\n ");
        blightdown(); //яркость -
    }

    if (p.y > 0 && p.y < 35 && p.x > 246 && p.x < 300 && settings == 1) {
        Serial.print("\n pressed backlight ++");
        Serial.print("\n ");
        blightup(); // яркость +
    }
    
    if (p.y >190 && p.y < 303 && p.x > -25 && p.x <55 && settings == 1) {
        Serial.print("\n pressed button backlight --");
        Serial.print("\n ");
        settings=0; // вышли из натсроек
        homePage=1;
        settings2=0;
        tft.fillRect(0,0,480,320, BLACK);
        home(); //назад
        
     }
     if (p.y >190 && p.y < 303 && p.x > -25 && p.x <55 && settings2 == 1) {
        Serial.print("\n pressed button backlight --");
        Serial.print("\n ");
        settings=0; // вышли из натсроек
        homePage=1;
        settings2=0;
        tft.fillRect(0,0,480,320, BLACK);
        home();//назад
        //delay(50);
     }
    if (p.y > 0 && p.y < 108 && p.x > -9 && p.x < 45 && settings == 1) { // exit settings page
        tft.fillRect(0,0,480,320, BLACK);
       // tft.
        settings=0; // вышли из натсроек
        homePage=1; // активируем главноге меню
       // EEPROM.write(1, esleep);//
        //EEPROM.write(1, blv); // сохраняет в первую ячейку памяти значение blv
        tft.setCursor(130,120);
        tft.setTextSize(4);
       tft.println("TEST MENU");  
        delay(500);
        tft.fillRect(0,0,480,320, BLACK);
        home(); //
        
 
      }
  
  
}


void settingsscr() {
  homePage=0;
  settings=1;
  settings2=0;
 
  // backlight level
  tft.setTextColor(WHITE);
  tft.setTextSize(3);
  tft.fillRect(16, 170, 60, 50, RED); //первый минус красный квадрат
  tft.drawRect(16, 170, 60, 50, WHITE);  // кантик красного квадрата
  tft.drawRect(85, 170, 308, 50, JJCOLOR); //кантик середины
  tft.fillRect(400, 170, 60, 50, GREEN); //первый плюс зелень
  tft.drawRect(401, 170, 60, 50, WHITE);// кантик зелени
  tft.setCursor(39, 183); //установка курсора минуса
  tft.print("-");
  tft.setCursor(423, 183);// установка курсора плюса
  tft.print("+");
  tft.setTextSize(1);
  tft.setCursor(190, 181);
tft.println("TEST MENU");  
  tft.drawRect(100, 198, 280, 10, WHITE); //прямоугольник бара
  blbar();
  // sleep time
  tft.setTextSize(3);
  tft.fillRect(16, 238, 60, 50, RED); //первый минус красный квадрат
  tft.drawRect(16, 238, 60, 50, WHITE);  // кантик красного квадрата
  tft.drawRect(85, 238, 308, 50, JJCOLOR); //кантик середины
  tft.fillRect(400, 238, 60, 50, GREEN); //первый плюс зелень
  tft.drawRect(401, 238, 60, 50, WHITE);// кантик зелени
  tft.setCursor(39, 251); //установка курсора минуса
  tft.print("-");
  tft.setCursor(423, 251);// установка курсора плюса
  tft.print("+");
  tft.setTextSize(1);
  tft.setCursor(190, 251);
tft.println("TEST MENU");  
  tft.drawRect(100, 266, 280, 10, WHITE); //прямоугольник бара

  //save and exit
  tft.drawRect(300, 10, 170, 50, JJCOLOR);
  tft.setCursor(345, 30);
  tft.print("Save and Exit"); 
  //назад
  tft.drawRect(10, 10, 170, 50, JJCOLOR);
  tft.setTextSize(2);
  tft.setCursor(75, 27);
 tft.println("TEST MENU");  

}

void blbar() { // this function fills the yellow bar in the backlight brightness adjustment
  if (blv < barv) {
    tft.fillRect(102, 199, 277, 8, BLACK);
  }
  backlightbox = map(blv, 1, 255, 0, 277);
  tft.fillRect(102, 199, backlightbox, 8, YELLOW);
  barv = blv;
  delay(3);
}
void blightup() { // increase the backlight brightness
  blv = blv + 1;
  if (blv >= 255) {
    blv = 255;
  }
  analogWrite(ledPin, blv);
  blbar();
}
void blightdown() { // decrease the backlight brightness
  blv = blv - 1;
  if (blv <= 1) {
    blv = 1;
  }
  analogWrite(ledPin, blv);
  blbar();
}
void settingsscr1() {
  homePage=0;
  settings=0;
  settings2=1;
  tft.drawRect(10, 10, 170, 50, JJCOLOR);
  tft.setTextSize(2);
  tft.setCursor(75, 27);
  tft.print("<==");
}

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: TFT LCD 3,5'' a Arduino - Menu

Príspevok od používateľa jirka.jirka. » 18 Júl 2017, 08:28

No tak jsem si to vygůglil. Sice Arduino nepoužívám, ale hned na prvním fóru, co jsem otevřel v tvém jazyku (bulharština, nebo co to je), tak jsem našel definici:

Kód: Vybrať všetko

#define LCDROTATION 1
ADKAZ, kde že jsem to našel

Sice tomuto jazyku, ve kterém jsou ty stránky napsané nerozumím, ale strejc Gůůgl a jeho překladač jo, ale nemohlo by to být to co hledáš?

Viz. kód z mé stránky....

Kód: Vybrať všetko

 #if LCDROTATION == 0
   if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
    // scale from 0->1023 to tft.width
  p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
  p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);

    Serial.print("X = "); Serial.print(p.x);
     Serial.print("\tY = "); Serial.print(p.y);
     Serial.print("\tPressure = "); Serial.println(p.z);
   }

  #elif LCDROTATION == 1
  if (p.z > MINPRESSURE && p.z < MAXPRESS
 atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd. atd.
AY možná tady by toho mohlo být ještě víc:
http://tech.memoryimprintstudio.com/ard ... ch-screen/
https://softsolder.com/2015/02/03/adafr ... -rotation/
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok