Мазмуну:

Сенсордук экран менен Arduino: 16 кадам
Сенсордук экран менен Arduino: 16 кадам

Video: Сенсордук экран менен Arduino: 16 кадам

Video: Сенсордук экран менен Arduino: 16 кадам
Video: Управление 16 серводвигателями с использованием модуля PCA9685 и Arduino V2 2024, Ноябрь
Anonim
Image
Image
Мэга 2560
Мэга 2560

Көбүрөөк жекелештирилген менюларды жана жакшыраак адам/машина интерфейстерин түзүүнү каалайсызбы? Мындай долбоорлор үчүн сиз Arduino жана сенсордук экранды колдоно аласыз. Бул идея кызыктыруучу угулабы? Андай болсо, бүгүн видеону көрүңүз, анда мен сизге Mega Arduino жана сенсордук экран менен чогулушту көрсөтөм. Сиз каалаган дизайны экранда кантип жасоону, ошондой эле тигил же бул буйрукту иштетүү үчүн экран аймагын кантип аныктоону көрөсүз. Мен Arduino Megaны казыктарынын санына байланыштуу колдонууну тандаганымды баса белгилейм.

Ошентип, бүгүн мен сизди Touch Screen дисплейи, анын графикалык функциялары жана экрандын тийүү чекитин кантип кармоо керектиги менен тааныштырам. Келгиле, позициялоо, жазуу, формаларды, түстөрдү жана тийүү сыяктуу бардык элементтерди камтыган мисал түзөлү.

1 -кадам: Arduino Mega 2560

2 -кадам: TFT LCD Shield 2.4"

TFT LCD Shield 2.4
TFT LCD Shield 2.4
TFT LCD Shield 2.4
TFT LCD Shield 2.4

Долбоорубузда колдонгон бул дисплейдин кызыктуу өзгөчөлүгү бар: анын SD картасы бар. Бирок, буга байланыштуу жазуу жана окуу башка видеодо көрсөтүлөт, мен жакында чыгарам. Бүгүнкү сабактын максаты - бул дисплейдин графикалык жана сенсордук экран өзгөчөлүктөрүнө өзгөчө көңүл буруу.

Мүнөздөмөлөрү:

Экран өлчөмү: 2.4 дюйм

MicroSD картанын уячасы

Түсү LCD: 65K

Айдоочу: ILI9325

Чечим: 240 x 320

Сенсордук экран: 4 зымдуу каршылыктуу сенсордук экран

Interface: 8 бит маалыматы, плюс 4 башкаруу линиясы

Иштөө чыңалуусу: 3.3-5V

Өлчөмү: 71 x 52 x 7mm

3 -кадам: Китепканалар

Китепканалар
Китепканалар

Китепканаларды кошуу:

"Adafruit_GFX"

"SWTFT"

"Сенсордук экран"

Шилтемелерди басыңыз жана китепканаларды жүктөп алыңыз.

Файлды ачып, Arduino IDEнин китепканалар папкасына чаптаңыз.

C: / Программа файлдары (x86) / Arduino / китепканалар

Эскертүү

Программаны баштоодон мурун, биз маанилүү нерсени чечишибиз керек: TOUCH калибрлөө.

Тийүү чекиттерин алуу үчүн жөнөкөй программаны колдонуп, чекиттердин маанисин (x, y) ар бир учунда сактаңыз (төмөнкү сүрөттө сары түс менен белгиленген). Бул баалуулуктар экрандын графикалык чекиттерине тийүү үчүн маанилүү.

#clude // Portas de leitura das coordenadas do touchvoid #depine YP A1 // Y+ Analog1де #define XM A2 // X- Analog2де #define YM 7 // Y- Digital7де #define XP 6 // X+ Digital6де бар // TouchScreen ts = TouchScreen (XP, YP, XM, YM) менен байланышкан окуялар; void setup () {Serial.begin (9600); } void loop () {TSPoint touchPoint = ts.getPoint (); // touch (x, y, z = pressao) Serial.print ("X:"); Serial.println (touchPoint.x); Serial.print ("Y:"); Serial.println (touchPoint.y); кечигүү (1000); }

4 -кадам: Функциялар

Эми китепканалар бизге сунуштай турган графикалык функцияларды карап көрөлү.

1. drawPixel

DrawPixel функциясы берилген чекитте экранда бир чекитти сүрөткө тартуу үчүн жооптуу.

жараксыз drawPixel (int16_t x, int16_t жана, uint16_t түсү);

2. drawLine

DrawLine функциясы эки чекиттен сызык чийүү үчүн жооптуу.

жараксыз drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t түсү);

3. drawFastVLine

DrawFastVLine функциясы чекиттен жана бийиктиктен тик сызык тартуу үчүн жооптуу.

жараксыз drawFastVLine (int16_t x, int16_t y, int16_t ч, uint16_t түсү);

4. drawFastHLine

DrawFastHLine функциясы чекиттен жана туурасынан горизонталдык сызык тартуу үчүн жооптуу.

жараксыз drawFastHLine (int16_t x, int16_t y, int16_t w, uint16_t түсү);

5. drawRect

DrawRect функциясы экранда тик бурчтукту тартууга, келип чыгуу чекитин, анын бийиктиги менен туурасына жооптуу.

жараксыз drawRect (int16_t x, int16_t y, int16_t w, int16_t h, uint16_t түсү);

6. fillRect

FillRect функциясы drawRect менен бирдей, бирок тик бурчтук берилген түс менен толтурулат.

боштук fillRect (int16_t x, int16_t y, int16_t w, int16_t h, uint16_t түсү);

7. drawRoundRect

DrawRoundRect функциясы drawRect менен бирдей, бирок тик бурчтуктун тегеректелген кырлары болот.

жараксыз drawRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t ч, int16_t радиусу, uint16_t түсү);

8. fillRoundRect

FillRoundRect функциясы drawRoundRect менен бирдей, бирок тик бурчтук берилген түс менен толтурулат.

боштук fillRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t радиусу, uint16_t түсү);

9. drawTriangle

DrawTriangle функциясы 3 чокулардын чекитинен өтүп, экранда үч бурчтук тартуу үчүн жооптуу.

void drawTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t түсү);

10. fillTriangle

FillTriangle функциясы drawTriangle менен бирдей, бирок үч бурчтук берилген түс менен толтурулат.

void fillTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t түсү);

11. drawCircle

DrawCircle функциясы булактан жана радиустан тегерек тартууга жооптуу.

жараксыз DrawCircle (int16_t x0, int16_t y0, int16_t r, uint16_t түсү);

12. fillCircle

FillCircle функциясы drawCircle менен бирдей, бирок тегерек берилген түс менен толтурулат.

боштук fillCircle (int16_t x0, int16_t y0, int16_t r, uint16_t түсү);

13. fillScreen

FillScreen функциясы экранды бир түс менен толтурууга жооптуу.

боштук fillScreen (uint16_t түсү);

14. setCursor

SetCursor функциясы курсорду белгиленген чекитте жазуу үчүн жайгаштырууга жооптуу.

боштук setCursor (int16_t x, int16_t y);

15. setTextColor

SetTextColor функциясы жазыла турган текстке түс берүү үчүн жооптуу. Бизде аны колдонуунун эки жолу бар:

жараксыз setTextColor (uint16_t c); // жазуунун түсүн белгилейт onlyvoid setTextColor (uint16_t c, uint16_t bg); // жазуунун түсүн жана фон түсүн коюңуз

16. setTextSize

SetTextSize функциясы жазыла турган текстке өлчөм берүү үчүн жооптуу.

жараксыз setTextSize (uint8_t s);

17. setTextWrap

SetTextWrap функциясы экрандын чегине жетсе, линияны бузууга жооп берет.

жараксыз setTextWrap (логикалык w);

18. setRotation

SetRotation функциясы экранды айлантуу үчүн жооптуу (пейзаж, портрет).

жараксыз setRotation (uint8_t r); // 0 (стандарт), 1, 2, 3

5 -кадам: Мисал

Мисал
Мисал

Биз программа түзөбүз, анда дисплей бизге берген ресурстардын көбүн колдонобуз.

Келгиле, ар кандай өлчөмдөгү кээ бир саптарды жазып, үч геометриялык фигураны түзүп, аларга тийүү окуясын тандап алалы, биз фигуралардын бирине тийген сайын, биз алардын астындагы фигуранын аталышы боюнча пикирге ээ болобуз.

6 -кадам: Китепканалар

Адегенде биз колдоно турган китепканаларды аныктайлы.

#кошуу // answerável pela parte gráfica

#кошуу // жооп берүү үчүн, бул жердеги тел

#кошуу // comunicação com o display

#кошуу // comunicação com o display

#"math.h" кошуңуз // эсептик потенция

7 -кадам: аныктайт

Биз казыктар үчүн кээ бир макростарды, ошондой эле биз колдоно турган маанилүү баалуулуктарды аныктайбыз.

// Portas de leitura das coordenadas do touch #аныктоо YP A1 // Y+ #define XM A2 // X- #define YM 7 // Y- #define XP 6 // X+ // valores encontrados através da calibração do touch // (x, y) үчүн эң жөнөкөй ыкмалар (x, y) a tada toque // então encontre os valores nas extridades max/min (x, y) #define TS_MINX 130 #define TS_MINY 80 #define TS_MAXX 900 #define TS_MAXY 900 // tamanho dos textos #dexine TEXT_SIZE_L 3 #dexine TEXT_SIZE_M 2 #dexine TEXT_SIZE_S 1 // posicionamento dos textos de feedback #defineFEEDBACK_LABEL_X 10 #defineFEFEFEFEFEFEFFEFFEFFEFFEFFEFFEFFEFFEFEроФЕД 10 #dexine MAXPRESSURE 1000

Биз кээ бир макростордун аныктамасын улантабыз.

// Associa o nome das cores aos valores корреспонденттери #аныктоо КАРА 0x0000 #аныктоо КЫЗЫЛ 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define YELLOW 0xFFE0 #define WHITE 0xFFFF // Dados de criaç = doc de criaç const int Circle_x = 240; const int Circle_y = 125; // TouchScreen менен байланышкан окуялар - бул TouchScreen (XP, YP, XM, YM); // SWTFT tft;

8 -кадам: Орнотуу

Орнотууда биз графикалык көзөмөл объектибизди баштапкы конфигурацияларды жасайбыз.

void setup () {Serial.begin (9600); // баштапкы абалга келтирүү tft.reset (); // индикатор көзөмөлдөө да lib grafica tft.begin (); кечигүү (500); // ландшафттык ландшафт tft.setRotation (1); // алдын ала tft.fillScreen (КАРА); // конфигурациялоочу орнотуулардын баштапкы параметрлери (); }

9 -кадам: Loop

Укурукта, биз экранга тийген чекитти алып, тийүү фигуралардын биринде болгонун көрөбүз.

void loop () {TSPoint touchPoint = ts.getPoint (); // touch (x, y, z = pressao) pinMode (XM, OUTPUT); pinMode (YP, OUTPUT); // mapeia o ponto de touch para o (x, y) grafico // fatp de termos rotacionado a tela para landscape implica no X resber o mapeamento de Y TSPoint p; p.x = карта (touchPoint.y, TS_MINY, TS_MAXY, 0, 320); p.y = карта (touchPoint.x, TS_MINX, TS_MAXX, 240, 0); // verifica se a pressao no toque foi suficiente if (touchPoint.z> MINPRESSURE && touchPoint.z <MAXPRESSURE) {// verifica se tocou no retangulo if (pointInRect (p)) {writeShape ("Rect"); } // verifica se tocou no triangulo else if (pointInsideTriangle (TSPoint (110, 150, 0), TSPoint (150, 100, 0), TSPoint (190, 150, 0), p)) {writeShape ("Triangle"); } // verifica se tocou no circulo else if if (pointInCircle (p)) {writeShape ("Circle"); }}}

10 -кадам: Биз Чөйрөгө тийип жатканыбызды текшериңиз

Бул кадамда биз экранды инициализациялоо менен алектенебиз жана көрсөтүлө турган тексттердин түсүн аныктайбыз.

/ *Desenha na tela os elementos */ void initialSettings () {tft.setTextColor (WHITE); tft.setTextSize (TEXT_SIZE_S); tft.println ("ACESSE"); tft.setTextColor (САРЫ); tft.setTextSize (TEXT_SIZE_M); tft.println ("MEU BLOG"); tft.setTextColor (GREEN); tft.setTextSize (TEXT_SIZE_L); tft.println ("FERNANDOK. COM"); createRect (); createTriangle (); createCircle (); tft.setCursor (FEEDBACK_LABEL_X, FEEDBACK_LABEL_Y); tft.setTextColor (CYAN); tft.setTextSize (TEXT_SIZE_L); tft.println ("SHAPE:"); }

11 -кадам: Геометриялык фигураларды түзүүнүн функциялары

Биз тик бурчтукту, үч бурчтукту жана тегеректи биз түпкү тегин аныктайбыз.

// cria um retangulo com origem (x, y) = (10, 100) // туурасы = 80 e бийиктик = 50 боштук createRect () {tft.fillRect (10, 100, 80, 50, RED); tft.drawRect (10, 100, 80, 50, АК); } // cria um triangulo com os vertices: // A = (110, 150); B = (150, 100); C = (190, 150) жараксыз createTriangle () {tft.fillTriangle (110, 150, 150, 100, 190, 150, САРЫ); tft.drawTriangle (110, 150, 150, 100, 190, 150, АК); } // cria um circulo com origem no ponto (x, y) = (240, 125) e raio = 30 void createCircle () {tft.fillCircle (240, 125, 30, GREEN); tft.drawCircle (240, 125, 30, АК); }

12 -кадам: Тик бурчтукка тийсек, текшериңиз

Бул функция чекит тик бурчтуктун ичинде экендигин текшерет.

// Funngão que verifica se or ponto está dentro do retángulobool pointInRect (TSPoint p) {// max/min X do retangulo if (px> = 10 && px <= 90) {// max/min Y do retangulo if (py) = 100) {return true; }} false; }

13 -кадам: Биз Чөйрөгө тийип жатканыбызды текшериңиз

Бул тегерек менен бирдей.

// distancia entre pontos D = raiz ((xb-xa)^2 + (yb-ya)^2) // менеджер же менчик же цигуло үчүн циркуло жасаңыз. aO raio, déstro bool pointInCircle (TSPoint p) {float distance = sqrt (pow (px - circle_x, 2) + pow (py - circle_y, 2)); if (distance <= Circle_radius) {return true; } false false; }

14 -кадам: Биз үч бурчтукка тийе тургандыгыбызды текшериңиз

Биз үч бурчтукка тийип жатканыбызды текшериңиз
Биз үч бурчтукка тийип жатканыбызды текшериңиз

Ошол эле чекитти текшерүү үч бурчтуктун ичинде да болот.

// Funcão que verifica se o ponto p esta dentro do ABC triangulo ABC // ЧЫНДЫК СЕНАГА ЖАЛГАН bool pointInsideTriangle (TSPoint a, TSPoint b, TSPoint c, TSPoint p) {float ABC = triangleArea (a, b, c)); калкып ACP = triangleArea (a, c, p); сүзүүчү ABP = triangleArea (a, b, p); калкыма CPB = triangleArea (c, p, b); if (ABC == ACP+ABP+CPB) {return true; } false false; } // Função que calcula a um de triangulo com pontos x, y float triangleArea (TSPoint a, TSPoint b, TSPoint c) {return fabs (((bx - ax)*(cy - ay) - (cx - ax) * (by - ay))/2); }

15 -кадам: Тийилген нерсенин атын басып чыгаруу функциясы

Бул жерде биз колдонулган геометриялык фигуранын атын экранга жазабыз.

// escreve na tela o nome da figura geométrica que toi tocadavoid writeShape (String shape) {tft.fillRect (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y, 170, 30, BLACK); tft.setCursor (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y); tft.setTextSize (TEXT_SIZE_G); tft.setTextColor (АК); tft.println (форма); }

16 -кадам: Файлдар

Файлдарды жүктөп алыңыз:

МЕН ЖОК

PDF

Сунушталууда: