Мазмуну:
- 1 -кадам: Arduino Mega 2560
- 2 -кадам: TFT LCD Shield 2.4 "
- 3 -кадам: Китепканалар
- 4 -кадам: Функциялар
- 5 -кадам: Мисал
- 6 -кадам: Китепканалар
- 7 -кадам: аныктайт
- 8 -кадам: Орнотуу
- 9 -кадам: Loop
- 10 -кадам: Биз Чөйрөгө тийип жатканыбызды текшериңиз
- 11 -кадам: Геометриялык фигураларды түзүүнүн функциялары
- 12 -кадам: Тик бурчтукка тийсек, текшериңиз
- 13 -кадам: Биз Чөйрөгө тийип жатканыбызды текшериңиз
- 14 -кадам: Биз үч бурчтукка тийе тургандыгыбызды текшериңиз
- 15 -кадам: Тийилген нерсенин атын басып чыгаруу функциясы
- 16 -кадам: Файлдар
Video: Сенсордук экран менен Arduino: 16 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Көбүрөөк жекелештирилген менюларды жана жакшыраак адам/машина интерфейстерин түзүүнү каалайсызбы? Мындай долбоорлор үчүн сиз Arduino жана сенсордук экранды колдоно аласыз. Бул идея кызыктыруучу угулабы? Андай болсо, бүгүн видеону көрүңүз, анда мен сизге Mega Arduino жана сенсордук экран менен чогулушту көрсөтөм. Сиз каалаган дизайны экранда кантип жасоону, ошондой эле тигил же бул буйрукту иштетүү үчүн экран аймагын кантип аныктоону көрөсүз. Мен Arduino Megaны казыктарынын санына байланыштуу колдонууну тандаганымды баса белгилейм.
Ошентип, бүгүн мен сизди Touch Screen дисплейи, анын графикалык функциялары жана экрандын тийүү чекитин кантип кармоо керектиги менен тааныштырам. Келгиле, позициялоо, жазуу, формаларды, түстөрдү жана тийүү сыяктуу бардык элементтерди камтыган мисал түзөлү.
1 -кадам: Arduino Mega 2560
2 -кадам: 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 -кадам: Файлдар
Файлдарды жүктөп алыңыз:
МЕН ЖОК
Сунушталууда:
Сенсордук экран Macintosh - IPad Mini экраны бар классикалык Mac: 5 кадам (сүрөттөр менен)
Сенсордук экран Macintosh | Классикалык Mac Экран үчүн iPad Mini менен: Бул винтаждык Macintoshтун экранын iPad mini менен кантип алмаштыруу боюнча менин жаңылануум жана кайра каралып чыккан дизайным. Бул менин жылдар бою жасаган 6 -ишим жана мен анын эволюциясы менен дизайнына абдан кубанычтамын! 2013 -жылы мен жасаган кезде
Сенсордук экран визиткасы: 8 кадам (сүрөттөр менен)
Сенсордук экрандын визиттик картасы: Мен инженер -механикмин, бирок мен электротехника жана программалоо боюнча көп жылдык долбоорлордун схемаларын жана микроконтроллерлерди өнүктүрдүм. Иш берүүчүлөр менин инженер -механик адистигине ээ болушумду күтүшөт
DIY Geiger эсептегич ESP8266 жана сенсордук экран менен: 4 кадам (сүрөттөр менен)
ESP8266 жана сенсордук экраны бар DIY Гейгер эсептегич: ЖАҢЫРТУУ: WIFI ЖАНА БАШКА ӨЗГӨРТҮЛГӨН ЖАҢЫ ЖАНА МЫКТЫ ВЕРСИЯЛАР HEREI Geiger Counterди иштеп чыккан жана курган - иондоштуруучу радиацияны аныктай турган жана колдонуучусун коркунучтуу радиациянын деңгээли жөнүндө эскертет. өтө тааныш эмес басуу
Сенсордук экран менен тараза (Arduino): 7 кадам (сүрөттөр менен)
Сенсордук экран менен таразага тартуу (Arduino): Сиз качандыр бир убакта сенсордук экран менен таразаны түзүүнү кааладыңыз беле? Эч качан ойлогон эмес белеңиз? Жакшылап окуңуз жана бирин курууга аракет кылыңыз … Сиз TFT сенсордук экраны жана Load Cell деген эмне экенин билесизби? Ооба, эгер 1 -кадамга өтсөңүз, Intro.Introduction: Эмне мен
Сенсордук экран менен колкап жасоо: 3 кадам (сүрөттөр менен)
Сенсордук экран менен мээлейди иштетүү: Сиз муну көп ноу-хаусуз эле бир нече мүнөттө жасай аласыз. Кыш жакындап калды (эгер сиз Түндүк жарым шарда болсоңуз) жана кыш менен суук келет аба ырайы, жана суук аба ырайы менен кол каптар келет. Бирок суукта да телефонуңуз