Mundarija:

Sensorli ekranli Arduino: 16 qadam
Sensorli ekranli Arduino: 16 qadam

Video: Sensorli ekranli Arduino: 16 qadam

Video: Sensorli ekranli Arduino: 16 qadam
Video: Display input voltage as bargraph on LCD using Arduino and potentiometer 2024, Iyul
Anonim
Image
Image
Arduino mega 2560
Arduino mega 2560

Siz ko'proq moslashtirilgan menyu va yaxshiroq inson/mashina interfeyslarini yaratmoqchimisiz? Bunday loyihalar uchun siz Arduino va sensorli displeydan foydalanishingiz mumkin. Bu fikr o'ziga jalb etadimi? Agar shunday bo'lsa, bugun videoni ko'ring, men sizga Mega Arduino va sensorli ekranli montajni ko'rsataman. Siz xohlagan dizaynni ekranda qanday qilishni, shuningdek, ma'lum bir buyruqni tegizish va faollashtirish uchun ekran maydonini qanday aniqlashni ko'rasiz. Men ta'kidlaymanki, men Arduino Mega -ni pimlari tufayli ishlatishni tanladim.

Shunday qilib, bugun men sizga sensorli ekran, uning grafik funktsiyalari va ekrandagi sensorli nuqtani qanday tutish kerakligi bilan tanishtiraman. Keling, joylashishni aniqlash, yozish, shakllar, ranglar va teginish kabi barcha elementlarni o'z ichiga olgan misol yarataylik.

1 -qadam: Arduino Mega 2560

2 -qadam: TFT LCD qalqoni 2,4 dyuym

TFT LCD qalqoni 2.4
TFT LCD qalqoni 2.4
TFT LCD qalqoni 2.4
TFT LCD qalqoni 2.4

Loyihamizda foydalanadigan bu displey qiziqarli xususiyatga ega: u SD -kartaga ega. Biroq, bu bilan bog'liq yozish va o'qish yaqinda men tayyorlaydigan boshqa videoda ko'rsatiladi. Bugungi darsning maqsadi - bu displeyning grafik va sensorli ekran xususiyatlariga alohida e'tibor qaratish.

Xususiyatlari:

Ekran o'lchami: 2,4 dyuym

MicroSD karta uyasi

Rangli LCD displey: 65K

Haydovchi: ILI9325

Ruxsat: 240 x 320

Sensorli ekran: 4 simli rezistiv sensorli ekran

Interfeys: 8 bitli ma'lumotlar, shuningdek 4 ta nazorat chizig'i

Ishlash kuchlanishi: 3.3-5V

Olchamlari: 71 x 52 x 7 mm

3 -qadam: kutubxonalar

Kutubxonalar
Kutubxonalar

Kutubxonalarni qo'shing:

"Adafruit_GFX"

"SWTFT"

"Sensorli ekran"

Havolalarni bosing va kutubxonalarni yuklab oling.

Faylni oching va Arduino IDE kutubxonalari papkasiga joylashtiring.

C: / Dastur fayllari (x86) / Arduino / kutubxonalari

Eslatma

Dasturni boshlashdan oldin, biz muhim bir narsani hal qilishimiz kerak: TOUCH kalibrlash.

Sensorli nuqtalarni olish uchun oddiy dastur yordamida har bir uchida (x, y) nuqta qiymatini saqlang (quyidagi rasmda sariq rang bilan ajratilgan). Bu qiymatlar ekrandagi grafik nuqtalarga tegib turish uchun muhimdir.

#include // Portas de leitura das coordenadas do touchvoid #define YP A1 // Y+ Analog1da #XM A2 ni belgilang // X- Analog2da #define YM 7 // Y- Digital7da #define XP 6 // X+ bu Digital6 -da mavjud // TouchScreen ts = TouchScreen (XP, YP, XM, YM) bilan bir qatorda; void setup () {Serial.begin (9600); } void loop () {TSPoint touchPoint = ts.getPoint (); // pega o touch (x, y, z = pressao) Serial.print ("X:"); Serial.println (touchPoint.x); Serial.print ("Y:"); Serial.println (touchPoint.y); kechikish (1000); }

4 -qadam: funktsiyalar

Keling, kutubxonalar bizga taklif qila oladigan grafik funktsiyalarni ko'rib chiqaylik.

1. DrawPixel

DrawPixel funktsiyasi berilgan nuqtada ekranda bitta nuqtani bo'yash uchun javobgardir.

void drawPixel (int16_t x, int16_t va, uint16_t rangi);

2. drawLine

DrawLine funktsiyasi ikkita nuqtadan chiziq chizish uchun javobgardir.

void drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t rangi);

3. drawFastVLine

DrawFastVLine funktsiyasi nuqta va balandlikdan vertikal chiziq chizish uchun javobgardir.

void drawFastVLine (int16_t x, int16_t y, int16_t h, uint16_t rangi);

4. drawFastHLine

DrawFastHLine funktsiyasi nuqta va kenglikdan gorizontal chiziq chizish uchun javobgardir.

void drawFastHLine (int16_t x, int16_t y, int16_t w, uint16_t rangi);

5. DrawRect

DrawRect funktsiyasi ekranda to'rtburchaklar chizish, kelib chiqish nuqtasini, uning balandligi va kengligini o'tkazish uchun javobgardir.

void drawRect (int16_t x, int16_t y, int16_t w, int16_t soat, uint16_t rang);

6. to'ldirish

FillRect funktsiyasi drawRect bilan bir xil, lekin to'rtburchak berilgan rang bilan to'ldiriladi.

void fillRect (int16_t x, int16_t y, int16_t w, int16_t soat, uint16_t rang);

7. drawRoundRect

DrawRoundRect funktsiyasi drawRect bilan bir xil, lekin to'rtburchak qirralari yumaloq bo'ladi.

void drawRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radiusi, uint16_t rangi);

8. to'ldirishRoundRect

FillRoundRect funktsiyasi drawRoundRect bilan bir xil, lekin to'rtburchak berilgan rang bilan to'ldiriladi.

void fillRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radiusi, uint16_t rangi);

9. DrawTriangle

DrawTriangle funktsiyasi 3 tepalik nuqtasini o'tib, ekranda uchburchak chizish uchun javobgardir.

void drawTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t rang);

10. to'ldirish uchburchagi

FillTriangle funktsiyasi drawTriangle bilan bir xil, lekin uchburchak berilgan rang bilan to'ldiriladi.

void fillTriangle (int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t rang);

11. DrawCircle

DrawCircle funktsiyasi manba nuqtasi va radiusdan aylana chizish uchun javobgardir.

void drawCircle (int16_t x0, int16_t y0, int16_t r, uint16_t rangi);

12. fillCircle

FillCircle funktsiyasi drawCircle bilan bir xil, lekin aylana berilgan rang bilan to'ldiriladi.

void fillCircle (int16_t x0, int16_t y0, int16_t r, uint16_t rangi);

13. to'ldirish ekrani

FillScreen funktsiyasi ekranni bitta rang bilan to'ldirish uchun javobgardir.

void fillScreen (uint16_t rangi);

14. setCursor

SetCursor funktsiyasi kursorni ma'lum bir nuqtaga yozish uchun joylashtirish uchun javobgardir.

void setCursor (int16_t x, int16_t y);

15. setTextColor

SetTextColor funktsiyasi yoziladigan matnga rang berish uchun javobgardir. Bizda uni ishlatishning ikkita usuli bor:

bo'sh setTextColor (uint16_t c); // faqat yozish rangini belgilaydivoid setTextColor (uint16_t c, uint16_t bg); // yozuv rangini va fon rangini o'rnating

16. setTextSize

SetTextSize funktsiyasi yoziladigan matnga o'lcham berish uchun javobgardir.

bo'sh setTextSize (uint8_t s);

17. setTextWrap

SetTextWrap funktsiyasi, agar u ekran chegarasiga yetsa, chiziqni buzish uchun javobgardir.

void setTextWrap (mantiqiy w);

18. setRotation

SetRotation funktsiyasi ekranni aylantirish uchun javob beradi (landshaft, portret).

void setRotation (uint8_t r); // 0 (standart), 1, 2, 3

5 -qadam: Misol

Misol
Misol

Biz dastur yaratamiz, unda displey bizga taqdim etadigan resurslarning ko'pini ishlatamiz.

Keling, har xil o'lchamdagi satrlarni yozamiz, uchta geometrik figurani yaratamiz va ularga teginish hodisasini olamiz, har safar biz raqamlardan biriga tegib turganimizda, biz ularning ostidagi raqamlar haqidagi fikrlarga ega bo'lamiz.

6 -qadam: kutubxonalar

Birinchidan, biz foydalanadigan kutubxonalarni aniqlaylik.

#include // javoblar pela parte gráfica

#include // javoblar uchun javob bering

#include // comunicação com o display

#include // comunicação com o display

#"matematika.h" ni qo'shing // hisob -kitob potentsiyasi

7 -qadam: belgilaydi

Biz pinlar uchun ba'zi makrolarni, shuningdek, biz foydalanadigan muhim qiymatlarni aniqlaymiz.

// Portas de leitura das coordenadas do touch #YP A1 ni belgilash // Y+ #XM A2 ni belgilash // X- #YM 7 ni belgilash // Y- #XP ni 6 ni belgilash // X+ // valores encontrados através da calibração do touch // faca um código simples para impimir os valores (x, y) a cada toque // então encontre os valores ax/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 #define FEEDBACK_LABEL_X 10 #defineFEFFEFEFEFEFEFEFEFFEFFEFFEFFEF 10 #MAXPRESSURE 1000 ni aniqlang

Biz ba'zi makrolarning ta'rifini davom ettiramiz.

// Associa o nome das cores aos valores muxbirlari #QARAni aniqlang 0x0000 #RED 0xF800ni aniqlang Yashil 0x07E0 #define CYAN 0x07FF #define YELLOW 0xFFE0 #define WHITE 0xFFFF // dados de cia di cria const int Circle_x = 240; const int Circle_y = 125; // TouchScreen -ni o'chirib tashlamoqchi bo'lgan voqea -hodisalar - TouchScreen (XP, YP, XM, YM); // SWTFT tft;

8 -qadam: sozlash

O'rnatishda biz grafik boshqaruv ob'ektini ishga tushiramiz va birinchi konfiguratsiyalarni qilamiz.

void setup () {Serial.begin (9600); // qayta o'rnatish taf.reset (); // nazoratni amalga oshirishni nazorat qilish da lib grafica tft.begin (); kechikish (500); // rotaciona va landshaft tft.setRotation (1); // simsiz aloqa tft.fillScreen (Qora); // boshlang'ich sozlamalarni sozlash uchun funktsiyalarni bajarish kerak; }

9 -qadam: halqa

Davrada biz ekranga tegadigan joyni olamiz va teginish rasmlardan birida sodir bo'lganligini ko'ramiz.

void loop () {TSPoint touchPoint = ts.getPoint (); // pega o touch (x, y, z = pressao) pinMode (XM, OUTPUT); pinMode (YP, OUTPUT); // xaritada u (x, y) grafikasi uchun telekanallar mavjud // u TSPoint p xaritasi bo'lmagan X qabul qiluvchining manzili va tasviri. p.x = xarita (touchPoint.y, TS_MINY, TS_MAXY, 0, 320); p.y = xarita (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 boshqa hech qanday uchlik bo'lmasa, (pointInsideTriangle (TSPoint (110, 150, 0), TSPoint (150, 100, 0), TSPoint (190, 150, 0), p)) {writeShape ("Uchburchak"); } // verifica se tocou boshqa tsirkulo if if (pointInCircle (p)) {writeShape ("Circle"); }}}

10 -qadam: Biz aylanaga tegishimizni tekshiring

Ushbu bosqichda biz ekranni ishga tushirish bilan shug'ullanamiz va ko'rsatiladigan matnlarning ranglarini aniqlaymiz.

/ *Ma'lumotni o'chirish */ void initialSettings () {tft.setTextColor (WHITE); tft.setTextSize (TEXT_SIZE_S); tft.println ("ACESSE"); tft.setTextColor (SARI); tft.setTextSize (TEXT_SIZE_M); tft.println ("MEU BLOG"); tft.setTextColor (Yashil); tft.setTextSize (TEXT_SIZE_L); tft.println ("FERNANDOK. COM"); createRect (); yaratishTriangle (); yaratishCircle (); tft.setCursor (FEEDBACK_LABEL_X, FEEDBACK_LABEL_Y); tft.setTextColor (CYAN); tft.setTextSize (TEXT_SIZE_L); tft.println ("ShAKL:"); }

11 -qadam: Geometrik shakllarni yaratish funktsiyalari

Biz to'rtburchaklar, uchburchak va aylanani yaratamiz, biz kelib chiqishi aniqlaymiz.

// cria um retangulo com origem (x, y) = (10, 100) // kenglik = 80 e balandlik = 50 void createRect () {tft.fillRect (10, 100, 80, 50, RED); tft.drawRect (10, 100, 80, 50, oq); } // cria um triangulo com os vertices: // A = (110, 150); B = (150, 100); C = (190, 150) void createTriangle () {tft.fillTriangle (110, 150, 150, 100, 190, 150, SARI); tft.drawTriangle (110, 150, 150, 100, 190, 150, oq); } // 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, oq); }

12 -qadam: To'rtburchakka tegishimizni tekshiring

Bu funktsiya nuqta to'rtburchak ichida ekanligini tekshiradi.

// 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) {qaytarish rost; }} false qaytarish; }

13 -qadam: Biz aylanaga tegmasligimizni tekshiring

Bu aylana bilan bir xil.

// distancia entre pontos D = raiz ((xb-xa)^2 + (yb-ya)^2) // vefifica se o ponto está dentro do circulo // se a distancia do ponto pra origem do circulo for menor ou igual aO raio, ele está dentro bool pointInCircle (TSPoint p) {float masofa = sqrt (pow (px - aylana_x, 2) + kuch (py - aylana_y, 2)); if (masofa <= aylana_radius) {qaytish rost; } false qaytarish; }

14 -qadam: Uchburchakka tegishimizni tekshiring

Uchburchakka tegishimizni tekshiring
Uchburchakka tegishimizni tekshiring

Xuddi shu nuqta tekshiruvi uchburchak ichida ham sodir bo'ladi.

// ABC triangulo trunangulo funktsiyalarini bajaring // HAQIQAT HAQIQATI YANGI bool pointInsideTriangle (TSPoint a, TSPoint b, TSPoint c, TSPoint p) {float ABC = uchburchaklar maydoni (a, b, c)); float ACP = triangleArea (a, c, p); float ABP = triangleArea (a, b, p); float CPB = triangleArea (c, p, b); if (ABC == ACP+ABP+CPB) {true ga qaytish; } false qaytarish; } // Funchão que calcula a area de um triangulo com pontos x, y float triangleArea (TSPoint a, TSPoint b, TSPoint c) {fabs (((bx - ax)*(cy - ay) - (cx - bolta) * (by - ay))/2); }

15 -qadam: tegilgan ob'ekt nomini chop etish funktsiyasi

Bu erda biz ishlatilgan geometrik figuraning nomini ekranga yozamiz.

// yozishShape (String shakli) {tft.fillRect (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y, 170, 30, QORA); tft.setCursor (FEEDBACK_TOUCH_X, FEEDBACK_TOUCH_Y); tft.setTextSize (TEXT_SIZE_G); tft.setTextColor (oq); tft.println (shakli); }

16 -qadam: fayllar

Fayllarni yuklab oling:

INO

PDF

Tavsiya: