Laboratoriya ishi №2 Sensorli displeyni Arduino mikrokontrolleriga bog’lash


Download 1.31 Mb.
Sana18.10.2023
Hajmi1.31 Mb.
#1707557

Laboratoriya ishi №2
Sensorli displeyni Arduino mikrokontrolleriga bog’lash


Arduino bilan sensorli Ekranni qanday ishlatish kerak
Ushbu uch qismli seriyaning birinchi qismida keng tarqalgan sensorli ekran texnologiyalari va ulardan odatiy foydalanish holatlari muhokama qilindi. Keyin, ikkinchi qism ishlab chiqaruvchilar va havaskorlar uchun bir nechta tayyor va arzon sensorli displey variantlarini o'rganib chiqdi. Ushbu maqola tavsiya etilgan Arduino-ga mos keladigan 2.8 " rezistiv sensorli ekranlardan birini ikkinchi qismdan qanday boshlashni hujjatlashtiradi

Men foydalanadigan TFT displeyda foydalanuvchilarga Arduino-ga asoslangan loyihani sensorli kirishlar bilan boshqarishga imkon beradigan rezistiv qoplama mavjud. Sensorli ekran bilan birga keladigan displey boshqaruvchisi bir nechta turli xil aloqa usullarini qo'llab-quvvatlaydi. Biroq, men ulardan faqat ikkitasini bayon qilaman, chunki men ularni eng foydali deb bilaman. Birinchi usul Arduino-dan displeyga piksel ma'lumotlarini uzatish uchun sakkizta parallel aloqa liniyasidan foydalanadi. Arduino juda ko'p piksel ma'lumotlarini uzatishi kerak bo'lgan multimedia dasturlarida ushbu usuldan foydalanishni tavsiya etaman.
Ikkinchi usul displey tekshiruvi bilan aloqa qilish uchun SPI-dan foydalanishni o'z ichiga oladi. Shunday qilib, parallel aloqa usulidan sekinroq bo'lgan savdo-sotiq bilan bir nechta raqamli kiritish-chiqarish liniyalari saqlanadi. Displeyning SPI rejimini yoqish uchun taxtaning pastki qismidagi ushbu uchta lehim yostig'i o'tish moslamasini yopishingiz kerak:
Buni qilganingizdan so'ng, displeyni Arduino-ga quyidagi sxematik diagrammada ko'rsatilgandek ulang:
Arduino-dan displeyga ma'lumotlarni yuborish uchun SPI usulidan foydalanganimni unutmang. Qanday bo'lmasin, pikselli ma'lumotlar liniyalaridan tashqari, agar siz loyihangizga rezistiv sensorli aniqlashni qo'shmoqchi bo'lsangiz, ikkita qo'shimcha raqamli I/u liniyalari va Arduino-ning yana ikkita analog pinlarini ishlatishingiz kerak bo'ladi. Bundan tashqari, ushbu sensorli ekran moduli o'rnatilgan micro SD-kartani o'quvchi bilan birga keladi, men ushbu maqolada muhokama qilmayman.
TFT displeyiga piksel ma'lumotlarini yuborish
Rasm ma'lumotlarini TFT displeyiga yuborishdan oldin siz ikkita kutubxonani o'rnatishingiz kerak. Birinchidan, Adafruit ILI9341 kutubxonasini yuklab olish uchun Arduino IDE-ning o'rnatilgan kutubxona menejeridan foydalaning. Ushbu paket Arduino va displey tekshiruvi IC o'rtasidagi past darajadagi aloqani boshqaradi. Keyin, Adafruit_GFX kutubxonasini yuklab oling. Ikkinchi kutubxonada oddiy shakllar va matn kabi grafik primitivlarni chizish uchun foydali kod mavjud. Arduino IDE-da kutubxona menejeridan qanday foydalanishni bilmasangiz, ushbu maqolani o'qishni maslahat beraman
.Next, I used the following code snippet to test the display:
Copy Code
/* imports, defines, and variable declarations omitted */

void setup()


{
Serial.begin(9600);
tft.begin();
screenRedrawNecessary = true;
}

void loop()


{
/* Touch input detection omitted. See below */

if(screenRedrawNecessary)


{
resetAndClearScreen();
drawIntroText();
drawTouchButton(b1[0], b1[1], b1[2], b1[3], "Previous");
drawTouchButton(b2[0], b2[1], b2[2], b2[3], "Next");
screenRedrawNecessary = false;
}
}

void drawIntroText(void)


{
tft.setCursor(15, 15);
tft.setTextColor(font_colors[active_colors]);
tft.setTextSize(2);
tft.println("Hello, World!");

tft.setCursor(15, 55);


tft.println("Use the buttons below");
tft.setCursor(15, 75);
tft.println("to change the background");
tft.setCursor(15, 95);
tft.println("color!");
}

void drawTouchButton(unsigned x, unsigned y, unsigned width, unsigned height, String text)


{
int x_text_pos = x + width / 2 - (text.length() / 2) * 11;
int y_text_pos = y + height / 2 - 8;

tft.drawRect(x, y, width, height, font_colors[active_colors]);


tft.setTextSize(2);
tft.setTextColor(font_colors[active_colors]);
tft.setCursor(x_text_pos, y_text_pos);
tft.print(text);
}
Bu qisqa sinov dasturi birinchi setup TFT ekran boshlab, () - vazifa. Keyin men bir nechta yordamchi usullarni aniqladim. ResetAndClearScreen () - usuli displeyning aylanishini tiklaydi va ilgari chizilgan barcha piksellarni o'chiradi. Keyingi funktsiya chizilgantrotext(). U displeyning yuqori chap burchagida qisqa holat xabarini chop etadi. Va nihoyat, chizish tugmasi () berilgan kenglik va balandlik bilan belgilangan holatda to'rtburchak hosil qiladi. Keyin, usul ilgari chizilgan to'rtburchakning o'rtasiga ip qo'yadi. Nomidan ko'rinib turibdiki, keyinchalik foydalanuvchi ma'lumotlarini aniqlash uchun ushbu to'rtburchaklardan foydalanaman. Loop () - usuli Ekranni soniyada ikki marta yangilaydi. Ammo dasturga hali interaktivlik o'rnatilmaganligi sababli, foydalanuvchilar ushbu nuqtada ekran ko'rsatadigan narsalarni o'zgartira olmaydi.
Sensorli Kiritishni Talqin Qilish
Ushbu displeyning rezistiv teginish imkoniyatlaridan foydalanish uchun Arduino IDE-ning o'rnatilgan kutubxona menejeri yordamida Adafruit_TouchScreen kutubxonasini yuklab oling. Yuqoridagi misol kodi bir necha satr matnni bosib chiqaradi va keyin ikkita sensorli tugmani tortadi. Keyinchalik, foydalanuvchi tugmalardan birini qachon bosishini aniqlashimiz kerak. Agar shunday bo'ladigan bo'lsa, Arduino Ekranni yangilashi va turli xil ranglardan foydalangan holda barcha komponentlarni chizishi kerak. Shuning uchun, foydalanuvchi tugmachalardan biriga tegganligini aniqlash uchun quyidagi usulni qo'shdim:
Copy Code
/* Intro code omitted */

void setup()


{
/* Code omitted. Same as above. */
}

void loop()


{
// Determine whether the user touched the display
TSPoint p = ts.getPoint();

if (p.z > PRESSURE_THRESHOLD && !screenRedrawNecessary)


{
// NOTE: The touchscreen controller does NOT use the
// screen coordinates! It uses its own coordinate system
if(touchedWithin(p, 165, 100, 320, 450))
{
active_colors -= 1;
screenRedrawNecessary = true;
}
else if(touchedWithin(p, 175, 500, 330, 830))
{
active_colors += 1;
screenRedrawNecessary = true;
}

if(active_colors < 0)


active_colors = 2;
if(active_colors >= 3)
active_colors = 0;
}

/* Draw functionality. See above */


}

bool touchedWithin(TSPoint touch, unsigned x, unsigned y, unsigned w, unsigned h)


{
return (touch.x > x) && (touch.x < (w)) && (touch.y > y) && (touch.y < (h));
}

/* Draw functions omitted. See above */


Ichida tegdi () - funktsiya tushunish oson. Birinchi parametr aniqlangan kirishning koordinatalarini ifodalaydi. Keyin, yordamchi usul ushbu x va y koordinatalari tugma o'lchamlari ichida ekanligini tekshiradi.
Ilgari muhokama qilingan turli xil chizish funktsiyalariga qo'ng'iroqlarni amalga oshirishdan oldin, loop() usuli Foydalanuvchining rezistiv ekranga tegganligini ham tekshiradi. TS nuqtasi sinf biz bir foydalanuvchi ekranda pastga bosdi qanday qattiq aniqlash uchun foydalanishingiz mumkin bo'lgan z-qiymatini o'z ichiga oladi. Ushbu z qiymati Arduino-ning kiruvchi kirishlarni aniqlashiga yo'l qo'ymaslik uchun ham juda mos keladi. Agar z qiymati belgilangan chegara qiymatidan katta bo'lsa, Arduino sensorli kiritishni aniqlaydi. Kodi keyin ichidagi tegdi chaqiradi () - foydalanuvchi tugmalari birini bosib aniqlash uchun funktsiya.
Xulosa .
Arduino-ga mos keladigan sensorli ekranlar mavjud yoki yangi DIY loyihalaringizga sensorli Ekranni tezda qo'shish imkonini beradi. Oddiy foydalaniladigan kutubxonalar displeyni deyarli qisqa vaqt ichida ishga tushirishga imkon beradi. Men foydalangan ekran qurilmalarga piksel ma'lumotlarini yuborishning bir necha usullarini taklif etadi. Parallel interfeys sizga Ekranni yangilashning yuqori tezligiga erishishga imkon beradi, bu multimedia dasturlarida muhim bo'lishi mumkin. Parallel interfeysi, shuningdek, men bir qator bilan MCU uchun mukammal / o Pim. SPI usuli esa parallel aloqaga nisbatan biroz sekinroq. Biroq, bu sizga Arduino loyihalarining ko'pchiligida afzal qilingan variant bo'lgan kerakli I/O pinlari sonini kamaytirishga imkon beradi.
Download 1.31 Mb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling