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
TFT LCD 3,5'' a Arduino - Menu
Moderátor: Moderátori
- Najgel
- 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
Funguje.
0
Keď neodpisujem tak tu nie som, alebo som a neodpisujem
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
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
Re: TFT LCD 3,5'' a Arduino - Menu
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, 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("<==");
}
- jirka.jirka.
- Ultimate člen
- Príspevky: 1538
- 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
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:
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....
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/
Kód: Vybrať všetko
#define LCDROTATION 1
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.
http://tech.memoryimprintstudio.com/ard ... ch-screen/
https://softsolder.com/2015/02/03/adafr ... -rotation/
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 4 Odpovedí
- 1060 Zobrazení
-
Posledný príspevok od používateľa lucky62
-
- 11 Odpovedí
- 1785 Zobrazení
-
Posledný príspevok od používateľa mirosne
-
- 10 Odpovedí
- 686 Zobrazení
-
Posledný príspevok od používateľa budvar10
-
- 20 Odpovedí
- 1113 Zobrazení
-
Posledný príspevok od používateľa jankrizan
-
- 3 Odpovedí
- 4174 Zobrazení
-
Posledný príspevok od používateľa jankrizan