Мазмұны:

Сенсорлы экранмен Arduino: 16 қадам
Сенсорлы экранмен Arduino: 16 қадам

Бейне: Сенсорлы экранмен Arduino: 16 қадам

Бейне: Сенсорлы экранмен Arduino: 16 қадам
Бейне: Lesson 98: Arduino 10 LED Push button Projects, Potentiometer LED Voltmeter and Traffic Light 2024, Шілде
Anonim
Image
Image
2560
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 картасының ұясы

Түсті СКД: 65K

Жүргізуші: ILI9325

Ажыратымдылық: 240 x 320

Сенсорлық экран: 4 сымды резистивті сенсорлық экран

Интерфейс: 8 биттік деректер, 4 бақылау желісі

Жұмыс кернеуі: 3.3-5В

Өлшемдері: 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 функциясы нүктеден және биіктіктен тік сызық жүргізуге жауап береді.

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

4. drawFastHLine

DrawFastHLine функциясы нүкте мен енден көлденең сызық жүргізуге жауап береді.

void 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 с, 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 функциясымен бірдей, бірақ тіктөртбұрыштың дөңгеленген жиектері болады.

жарамсыз 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 с, 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

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

жарамсыз fillScreen (uint16_t түсі);

14. setCursor

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

void 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 -қадам: Кітапханалар

Алдымен біз қолданатын кітапханаларды анықтайық.

#қосу // жауап беру

#қосу // жауап беру

#қосу // comunicação com немесе дисплей

#қосу // comunicação com немесе дисплей

#«math.h» қосыңыз // есептік потенция

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

Біз түйреуіштер үшін кейбір макростарды, сондай -ақ біз қолданатын маңызды мәндерді анықтаймыз.

// Portas de leitura das coordenadas do touch #YP A1 анықтау // Y+ #XM A2 анықтау // X- #demine YM 7 // Y- #depine XP 6 // X+ // valores encontrados através da calibração do touch // (x, y) ақаулардың алдын алудың қарапайым әдістері // максимум/мин (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 #dinefine FEEDBACK_LABEL_Y 200 #200FinFoDeFineFineFoFineFineFineFEFEFEFEFEFEFEFFEFFEFFEED 10 #MAXPRESSURE 1000 анықтаңыз

Біз кейбір макростардың анықтамасын жалғастырамыз.

// Ассоциация nos das cores aos valores корреспонденттері #ҚАРА анықтаңыз 0x0000 #анықтаңыз ҚЫЗЫЛ 0xF800 #анықтаңыз ЖАСЫЛ 0x07E0 #анықтайтын CYAN 0x07FF #define САРЫ 0xFFE0 #define WHITE 0xFFFF // dados de cia de cia de cia de cia? const int Circle_x = 240; const int Circle_y = 125; // TouchScreen ts = TouchScreen (XP, YP, XM, YM) бағдарламаларының бір бөлігі; // SWTFT tft;

8 -қадам: Орнату

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

void setup () {Serial.begin (9600); // бастапқы кестені қалпына келтіру tft.reset (); // индикаторлар бақылау тиф.teg.begin (); кешіктіру (500); // ландшафт tft.setRotation (1); // tft.fillScreen (ҚАРА); // бастапқы баптаулардың конфигурациясы үшін функцияларды орнату (); }

9 -қадам: ілмек

Циклда біз экранға тиетін нүктені таңдаймыз және жанасудың фигуралардың бірінде болғанын көреміз.

void loop () {TSPoint touchPoint = ts.getPoint (); // touch (x, y, z = pressao) pinMode (XM, OUTPUT); pinMode (YP, OUTPUT); // x (y, grafico) графикалық картасы // ол TSPoint p X картасын қабылдамайтын ландшафттық пейзажды анықтауға мүмкіндік береді; 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 else if no triangulo else if (pointInsideTriangle (TSPoint (110, 150, 0), TSPoint (150, 100, 0), TSPoint (190, 150, 0), p)) {writeShape («Үшбұрыш»)); } // verifica se tocou басқа айналым болмайды 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 (ЖАСЫЛ); 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 void createRect () {tft.fillRect (10, 100, 80, 50, ҚЫЗЫЛ); tft.drawRect (10, 100, 80, 50, АҚ); } // cria um triangulo com os vertices: // A = (110, 150); В = (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 -қадам: тіктөртбұрышқа тиетінімізді тексеріңіз

Бұл функция нүктенің тіктөртбұрыштың ішінде екенін тексереді.

// 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) {қайтару ақиқат; }} false қайтару; }

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 - шеңбер_x, 2) + pow (py - шеңбер_y, 2)); if (қашықтық <= шеңбер_радиус) {ақиқатты қайтару; } жалған қайтару; }

14 -қадам: Үшбұрышқа тиетінімізді тексеріңіз

Үшбұрышқа тиетінімізді тексеріңіз
Үшбұрышқа тиетінімізді тексеріңіз

Нүктенің дәл осылай тексерілуі үшбұрыштың ішінде де болады.

// ABC триангуло функцияларының орындалуы // ЖАҢА сендірудің бұрмалануы ЖАЛҒАН bool pointInsideTriangle (TSPoint a, TSPoint b, TSPoint c, TSPoint p) {float ABC = үшбұрышАудан (a, b, c)); өзгермелі ACP = triangleArea (a, c, p); float ABP = triangleArea (a, b, p); өзгермелі CPB = triangleArea (c, p, b); if (ABC == ACP+ABP+CPB) {true қайтару; } жалған қайтару; } // Funcão que calcula a de de triangulo com pontos x, y float triangleArea (TSPoint a, TSPoint b, TSPoint c) {қайтару (((bx - ax)*(cy - ay) - (cx - ax) * (by - ay))/2); }

15 -қадам: Объектінің атын түрту функциясы

Мұнда біз экранда қолданылатын геометриялық фигураның атын жазамыз.

// escRave 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 -қадам: файлдар

Файлдарды жүктеңіз:

МЕН ЖОҚ

PDF

Ұсынылған: