Агуулгын хүснэгт:

Мэдрэгчтэй дэлгэц бүхий Arduino: 16 алхам
Мэдрэгчтэй дэлгэц бүхий Arduino: 16 алхам

Видео: Мэдрэгчтэй дэлгэц бүхий Arduino: 16 алхам

Видео: Мэдрэгчтэй дэлгэц бүхий Arduino: 16 алхам
Видео: #5 Аналоговый ввод FLProg на ЖК-дисплее I2C | ESP32 NodeMCU |Визуальное программирование для Arduino 2024, Долдугаар сарын
Anonim
Image
Image
Arduino Mega 2560
Arduino Mega 2560

Та илүү хувийн цэс, илүү сайн хүн/машины интерфэйсийг бий болгохыг хүсч байна уу? Ийм төслүүдийн хувьд та Arduino болон мэдрэгчтэй дэлгэц ашиглаж болно. Энэ санаа сэтгэл татам сонсогдож байна уу? Хэрэв тийм бол өнөөдөр видеог үзээрэй, энд би танд Mega Arduino болон мэдрэгчтэй дэлгэц бүхий угсралтыг үзүүлэх болно. Та хүссэн загвараа хэрхэн яаж дэлгэц дээр гаргах, мөн тодорхой командыг хүрч, идэвхжүүлэх дэлгэцийн бүсийг хэрхэн тодорхойлохыг харах болно. Би Arduino Mega -ийг олон тооны голтой тул ашиглахаар сонгосон гэдгээ онцолж байна.

Тиймээс өнөөдөр би танд мэдрэгчтэй дэлгэц, түүний график функц, дэлгэц дээрх мэдрэгчтэй цэгийг хэрхэн яаж барих талаар танилцуулах болно. Мөн байрлал тогтоох, бичих, хэлбэр дүрс, өнгө, мэдрэгч зэрэг бүх элементүүдийг агуулсан жишээг бүтээцгээе.

Алхам 1: Arduino Mega 2560

Алхам 2: TFT LCD бамбай 2.4"

TFT LCD бамбай 2.4
TFT LCD бамбай 2.4
TFT LCD бамбай 2.4
TFT LCD бамбай 2.4

Манай төсөлд ашигладаг энэхүү дэлгэц нь сонирхолтой онцлогтой: SD карттай. Гэсэн хэдий ч үүнтэй холбоотой бичих, унших ажлыг би өөр видеогоор үзүүлэх бөгөөд үүнийг удахгүй бүтээх болно. Өнөөдрийн хичээлийн зорилго нь энэхүү дэлгэцийн график болон мэдрэгчтэй дэлгэцийн онцлог шинж чанаруудыг тусгайлан авч үзэх явдал юм.

Онцлог шинж чанар:

Дэлгэцийн хэмжээ: 2.4 инч

MicroSD картны үүр

Өнгөт LCD: 65K

Жолооч: ILI9325

Нарийвчлал: 240 x 320

Мэдрэгчтэй дэлгэц: 4 утастай эсэргүүцэлтэй мэдрэгчтэй дэлгэц

Интерфэйс: 8 битийн өгөгдөл, 4 хяналтын шугам

Ашиглалтын хүчдэл: 3.3-5V

Хэмжээ: 71 x 52 x 7 мм

Алхам 3: Номын сан

Номын сан
Номын сан

Номын санг нэмэх:

"Adafruit_GFX"

"SWTFT"

"Мэдрэгчтэй дэлгэц"

Холбоосууд дээр дарж номын санг татаж авна уу.

Файлыг задалж, Arduino IDE -ийн номын сангийн хавтсанд буулгана уу.

C: / Програмын файлууд (x86) / Arduino / номын сан

Тэмдэглэл

Хөтөлбөрөө эхлүүлэхийн өмнө бид TOUCH шалгалт тохируулга хийх чухал асуудлыг шийдэх хэрэгтэй.

Мэдрэх цэгүүдийг дэлгэц дээр авахын тулд энгийн програмыг ашиглан цэг бүрийн утгыг (x, y) хадгална уу (доорх зурган дээр шараар тодруулсан болно). Эдгээр утгууд нь дэлгэц дээрх график цэгүүдтэй харьцахад чухал ач холбогдолтой юм.

#include // Portas de leitura das coordenadas do touchvoid #тодорхойлох YP A1 // Y+ нь аналог1 дээр байна #XM A2-ийг тодорхойлно // X- нь аналог2 дээр байна #тодорхойлох YM 7 // Y- нь Digital7 дээр байна #тодорхойлох XP 6 // X+ нь Digital6 дээр байна // TouchScreen ts = TouchScreen (XP, YP, XM, YM) гэсэн хоёр чухал арга хэмжээ авах; 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); саатал (1000); }

Алхам 4: Чиг үүрэг

Номын сангийн бидэнд санал болгож болох график функцуудыг авч үзье.

1. drawPixel

DrawPixel функц нь тухайн цэг дээр дэлгэц дээрх ганц цэгийг будах үүрэгтэй.

хүчингүй drawPixel (int16_t x, int16_t ба, uint16_t өнгө);

2. drawLine

DrawLine функц нь хоёр цэгээс шугам татах үүрэгтэй.

void drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t өнгө);

3. drawFastVLine

DrawFastVLine функц нь цэг ба өндрөөс босоо шугам зурах үүрэгтэй.

void drawFastVLine (int16_t x, int16_t y, int16_t h, uint16_t өнгө);

4. drawFastHLine

DrawFastHLine функц нь цэг ба өргөнөөс хэвтээ шугам зурах үүрэгтэй.

void drawFastHLine (int16_t x, int16_t y, int16_t w, uint16_t өнгө);

5. DrawRect

DrawRect функц нь дэлгэц дээр тэгш өнцөгт зурах, гарал үүслийн цэг, түүний өндөр, өргөнийг дамжуулах үүрэгтэй.

void drawRect (int16_t x, int16_t y, int16_t w, int16_t h, uint16_t өнгө);

6. fillRect

FillRect функц нь drawRect -тэй адил боловч тэгш өнцөгт нь өгөгдсөн өнгөөр дүүрэх болно.

void fillRect (int16_t x, int16_t y, int16_t w, int16_t h, uint16_t өнгө);

7. drawRoundRect

DrawRoundRect функц нь drawRect -тэй адил боловч тэгш өнцөгт нь дугуйрсан ирмэгтэй байх болно.

void drawRoundRect (int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t радиус, uint16_t өнгө);

8. fillRoundRect

FillRoundRect функц нь drawRoundRect -тэй адил боловч тэгш өнцөгт нь өгөгдсөн өнгөөр дүүрэх болно.

void 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 функц нь эх цэг ба радиусаас тойрог зурах үүрэгтэй.

void drawCircle (int16_t x0, int16_t y0, int16_t r, uint16_t өнгө);

12. fillCircle

FillCircle функц нь drawCircle -тэй адил боловч тойрог нь өгөгдсөн өнгөөр дүүрэх болно.

void fillCircle (int16_t x0, int16_t y0, int16_t r, uint16_t өнгө);

13. дүүргэх дэлгэц

FillScreen функц нь дэлгэцийг нэг өнгөөр дүүргэх үүрэгтэй.

void fillScreen (uint16_t өнгө);

14. setCursor

SetCursor функц нь курсорыг тухайн цэг рүү бичих байрлалыг хариуцдаг.

хүчингүй setCursor (int16_t x, int16_t y);

15. setTextColor

SetTextColor функц нь бичих текстэд өнгө өгөх үүрэгтэй. Бидэнд үүнийг ашиглах хоёр арга бий:

хүчингүй setTextColor (uint16_t c); // зөвхөн бичих өнгийг тогтоодог setTextColor (uint16_t c, uint16_t bg) // бичих өнгө, дэвсгэр өнгийг тохируулна уу

16. setTextSize

SetTextSize функц нь бичих текстэд хэмжээ өгөх үүрэгтэй.

хүчингүй setTextSize (uint8_t s);

17. setTextWrap

SetTextWrap функц нь дэлгэцийн хязгаарт хүрсэн тохиолдолд шугамыг таслах үүрэгтэй.

хүчингүй setTextWrap (логик w);

18. setRotation

SetRotation функц нь дэлгэцийг эргүүлэх үүрэгтэй (ландшафт, хөрөг зураг).

void setRotation (uint8_t r); // 0 (стандарт), 1, 2, 3

Алхам 5: Жишээ

Жишээ
Жишээ

Бид програмыг бий болгож, дэлгэцийн бидэнд өгсөн ихэнх нөөцийг ашиглах болно.

Янз бүрийн хэмжээтэй хэдэн мөр бичиж, гурван геометрийн дүрс бүтээж, тэдгээрт хүрэх мэдрэмжээ олж авцгаая. Бид нэг дүрс дээр хүрэх тоолондоо доорх зургийн нэрний талаархи санал хүсэлтийг авах болно.

Алхам 6: Номын сан

Эхлээд ашиглах номын сангаа тодорхойлъё.

#include // responsável pela parte gráfica

#Include // хариулт өгөх

#оруулах // comunicação com o display

#оруулах // comunicação com o display

#"math.h" -ийг оруулна уу // тооцооллын потенци

Алхам 7: тодорхойлдог

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

// Portas de leitura das coordenadas do touch #тодорхойлох YP A1 // Y+ #deamine XM A2 // X- #define YM 7 // Y- #depine XP 6 // X+ // valores encontrados através da calibração do touch // faça um código simples para impimir os valores (x, y) a cada toque // então encontre os valores nas extremidades 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 #FEEDBACK_LABEL_X 10 #defineFEEDBACK_LABEL_X 200 #defineFEFEFEFEFEFEFEFEFFEFFEFFEFFEFFE 10 #MAXPRESSURE 1000 -ийг тодорхойлох

Бид зарим макрогийн тодорхойлолтыг үргэлжлүүлж байна.

// Associa o nome das cores aos valores корреспондентүүд const int тойрог_х = 240; const int тойрог_y = 125; // TouchScreen ts = TouchScreen (XP, YP, XM, YM) үйлдлийн системүүд; // SWTFT tft;

Алхам 8: Тохиргоо

Тохиргоонд бид график хяналтын объектоо эхлүүлж, анхны тохиргоог хийх болно.

void setup () {Serial.begin (9600); // дахин тохируулах эсвэл дахин тохируулах tft.reset (); // inicializa objeto controlador da lib grafica tft.begin (); саатал (500); // rotaciona a tela para landshaft tft.setRotation (1); // pinta a tela toda de preto tft.fillScreen (BLACK); // анхны тохиргоог тохируулах (); }

Алхам 9: Гогцоо

Гогцоонд бид дэлгэц дээр хүрч буй цэгийг авч, аль нэг зураг дээр хүрч байгааг харах болно.

void loop () {TSPoint touchPoint = ts.getPoint (); // pega o touch (x, y, z = pressao) pinMode (XM, OUTPUT); pinMode (YP, OUTPUT); // mapeia o ponto de touch para o (x, y) grafico // o fato de termos rotacionado a tela para Landscape implica no X хүлээн авагч эсвэл 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 pressão no toque foi suficiente if (touchPoint.z> MINPRESSURE && touchPoint.z <MAXPRESSURE) {// verifica se tocou no retangulo if (pointInRect (p)) {writeShape ("Rect"); } // verifica se tocou өөр гурвалжин байхгүй бол (pointInsideTriangle (TSPoint (110, 150, 0), TSPoint (150, 100, 0), TSPoint (190, 150, 0), p)) {writeShape ("Гурвалжин"); } // verifica se tocou өөр тойрог байхгүй бол (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 (НОГООН); 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) // width = 80 e height = 50 void 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) void 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: Бид тэгш өнцөгт хүрэх эсэхийг шалгана уу

Энэ функц нь цэг нь тэгш өнцөгт дотор байгаа эсэхийг шалгадаг.

// Função que verifica se o 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) {буцах үнэн; }} худал буцаах; }

Алхам 13: Бид тойрог дээр хүрч байгаа эсэхийг шалгаарай

Энэ нь тойрогтой адил юм.

// 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) {хөвөх зай = sqrt (pow (px - тойрог_х, 2) + pow (py - тойрог_y, 2)); if (зай <= тойрог_радиус) {буцах үнэн; } худал буцах; }

Алхам 14: Бид гурвалжинд хүрч байгаа эсэхийг шалгаарай

Бид гурвалжинд хүрч байгаа эсэхийг шалгаарай
Бид гурвалжинд хүрч байгаа эсэхийг шалгаарай

Тухайн цэгийн ижил шалгалт нь гурвалжин дотор хийгддэг.

// Funcão que verifica se o ponto p esta dentro do triangulo ABC // Үүсгэгчийг солих ҮНЭН нь хуурамч bool pointInsideTriangle (TSPoint a, TSPoint b, TSPoint c, TSPoint p) {float ABC = гурвалжинАреа (a, b, c); хөвөх ACP = гурвалжинАреа (a, c, p); хөвөх ABP = гурвалжинАреа (a, b, p); хөвөх CPB = гурвалжинАреа (c, p, b); if (ABC == ACP+ABP+CPB) {буцах үнэн; } худал буцах; } // Função que calcula a um de triangulo com nos pontos x, y float triangleArea (TSPoint a, TSPoint b, TSPoint c) {fabs буцах (((bx - ax)*(cy - ay) - (cx - ax) * (by - ay))/2); }

Алхам 15: Хүрсэн объектын нэрийг хэвлэх функц

Энд бид ашиглаж буй геометрийн дүрсийн нэрийг дэлгэц дээр бичнэ.

// escreve na tela o nome da figura geométrica que foi tocadavoid writeShape (String хэлбэр) {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: Файлууд

Файлуудыг татаж авах:

INO

PDF

Зөвлөмж болгож буй: