สารบัญ:

โปรแกรมวาดภาพ Arduino TFT: 4 ขั้นตอน
โปรแกรมวาดภาพ Arduino TFT: 4 ขั้นตอน

วีดีโอ: โปรแกรมวาดภาพ Arduino TFT: 4 ขั้นตอน

วีดีโอ: โปรแกรมวาดภาพ Arduino TFT: 4 ขั้นตอน
วีดีโอ: EP49 แสดงภาพ JPEG บนจอ ILI9341 TFT 2.4" | Arduino project Esp32 Display JPEG images on TFT 2.4" 2024, กรกฎาคม
Anonim
โปรแกรมวาดภาพ Arduino TFT
โปรแกรมวาดภาพ Arduino TFT
โปรแกรมวาดภาพ Arduino TFT
โปรแกรมวาดภาพ Arduino TFT
โปรแกรมวาดภาพ Arduino TFT
โปรแกรมวาดภาพ Arduino TFT

คำแนะนำนี้มีรายละเอียดรหัสที่ใช้ในการสร้างโปรแกรมวาดภาพสำหรับหน้าจอ Arduino TFT โปรแกรมนี้ไม่เหมือนใครเพราะช่วยให้สามารถบันทึกภาพวาดลงในการ์ด SD และโหลดในภายหลังเพื่อทำการแก้ไขเพิ่มเติมได้!

เสบียง

  1. Arduino Uno - ต้นฉบับหรือโคลนที่เข้ากันได้
  2. หน้าจอสัมผัส TFT - ฉันใช้หน้าจอ Elegoo ซึ่งหมายความว่าฉันต้องการไดรเวอร์ Elegoo
  3. บอร์ดอ่าน Micro SD - ใช้เพื่อเก็บข้อมูลการวาดภาพลงในการ์ด SD หน้าจอของฉันมีตัวอ่านในตัวอยู่ใต้จอแสดงผล
  4. สไตลัส - หน้าจอของฉันมาพร้อมกับอันหนึ่ง เล็บก็ใช้ได้ดีเช่นกัน
  5. การ์ด Micro SD - ไม่เกิน 32GB เนื่องจากข้อ จำกัด ในการฟอร์แมต exFAT (Arduino สามารถอ่านการ์ดที่ฟอร์แมต FAT32 ได้ แต่ไม่ใช่ exFAT การ์ดขนาดใหญ่ส่วนใหญ่จะฟอร์แมตด้วย exFAT) นี่คือประเภทที่คุณจะใส่ลงในโทรศัพท์ที่มีพื้นที่เก็บข้อมูลที่ขยายได้
  6. คอมพิวเตอร์ที่มี Arduino IDE
  7. สายการเขียนโปรแกรม - USB A ถึง USB B Arduino ของฉันมาพร้อมกับหนึ่งอัน
  8. อะแดปเตอร์การ์ด SD - ใช้เพื่อแปลงการ์ด Micro SD เป็น SD ปกติเพื่อใส่ลงในช่องเสียบ SD หรือการ์ดที่เชื่อมต่อการ์ด SD กับช่องเสียบ USB

ขั้นตอนที่ 1: ฟอร์แมตการ์ด SD

ฟอร์แมตการ์ด SD
ฟอร์แมตการ์ด SD
ฟอร์แมตการ์ด SD
ฟอร์แมตการ์ด SD
  1. นำการ์ด Micro SD มาต่อเข้ากับคอมพิวเตอร์โดยใช้เครื่องอ่านการ์ด SD
  2. เปิด File Explorer และค้นหาการ์ด SD
  3. คลิกขวาและเลือกรูปแบบ
  4. ตั้งค่าตัวเลือกตามภาพหน้าจอ
  5. คลิกเริ่ม
  6. นำการ์ดออกเมื่อกระบวนการเสร็จสิ้น

หากคุณไม่ได้ใช้ Windows ให้ลองใช้ SD Formatter จาก SD Association

ขั้นตอนที่ 2: เตรียม Arduino

เตรียม Arduino
เตรียม Arduino
เตรียม Arduino
เตรียม Arduino
  1. กดตัวป้องกันหน้าจอของคุณลงบน Arduino ระวังในการเรียงพิน
  2. ใส่การ์ด SD ลงในเครื่องอ่านด้านล่างหน้าจอ

ขั้นตอนที่ 3: Arduino Sketch

แม้ว่ารายการชิ้นส่วนจะค่อนข้างเรียบง่าย แต่ก็มีโค้ดมากมาย ฉันจะทำทีละขั้นตอนที่นี่

#รวม

#รวม #รวม #รวม #รวม

Elegoo_GFX, _TFTLCD และ TouchScreen เป็นฮาร์ดแวร์เฉพาะทั้งหมด หากคุณใช้หน้าจออื่น ให้ใช้ไลบรารีที่ผู้ผลิตจัดหาให้

SPI และ SD ใช้เพื่อสื่อสารกับการ์ด SD SPI เป็นโปรโตคอลที่ใช้โดยตัวควบคุมการ์ด SD

#if กำหนด (_SAM3X8E_)#undef _FlashStringHelper::F(string_literal) #define F(string_literal) string_literal #endif

นี่เป็นเฉพาะฮาร์ดแวร์ด้วย

#define YP A3 // ต้องเป็นขาอนาล็อก#define XM A2 // ต้องเป็นขาอนาล็อก #define YM 9 #define XP 8

//แตะสำหรับ ILI9341 TP. ใหม่

#กำหนด TS_MINX 120 # กำหนด TS_MAXX 900 # กำหนด TS_MINY 70 # กำหนด TS_MAXY 920

#define CSPIN 10

#define LCD_CS A3

#define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 #define LCD_RESET A4

แต่ละคำสั่ง #define เหล่านี้ทำให้ IDE แทนที่ชื่อด้วยค่า ที่นี่ พวกเขาตั้งค่าพิน LCD และ SD I/O

// กำหนดชื่อให้กับค่าสี 16 บิต:#define BLACK 0x0000 #define WHITE 0xFFFF #define RED 0xF800 #define BLUE 0x001F #define GREEN 0x07E0

นี่คือสีบางส่วนที่ใช้ในโค้ด #define-ing พวกเขาทำให้การอ่านโค้ดง่ายขึ้น

#define PENRADIUS 3

สิ่งนี้กำหนดขนาดของปากกาวาดภาพ

#กำหนดแรงดันต่ำ 10#กำหนดแรงดันสูงสุด 1000

// เพื่อความแม่นยำของแรงกดที่ดีกว่า เราจำเป็นต้องรู้ความต้านทาน

// ระหว่าง X+ และ X- ใช้มัลติมิเตอร์เพื่ออ่านค่า // สำหรับอันที่ฉันใช้อยู่ 300 โอห์มบนจาน X TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

Elegoo_TFTLCD tft (LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

ข้อความเหล่านี้กำหนดความดันที่จำเป็นในการลงทะเบียนการสัมผัส เริ่มต้นฟังก์ชันการสัมผัส และเริ่มหน้าจอ

ที่จัดเก็บไฟล์ int storageSize; int stoX = 1; int stoY = 1;

เหล่านี้เป็นตัวแปรสำหรับส่วนการจัดเก็บของโปรแกรม

การตั้งค่าเป็นโมฆะ (เป็นโมฆะ) { Serial.begin (9600); Serial.println("โปรแกรมระบายสี");

tft.reset();

ตัวระบุ uint16_t = tft.readID();

ถ้า (ตัวระบุ == 0x0101) { ตัวระบุ = 0x9341; Serial.println(F("พบไดรเวอร์ LCD 0x9341")); }

//เริ่มหน้าจอ

tft.begin(ตัวระบุ); tft.setการหมุน(2);

โหมดพิน (13, เอาต์พุต);

// เริ่มการ์ด SD

ถ้า (!SD.begin (CSPIN)) { Serial.println ("การเริ่มต้น SD ล้มเหลว"); กลับ; } Serial.println ("SD เริ่มต้น");

//วาดพื้นหลัง

drawBack(); }

ฟังก์ชันการตั้งค่าจะเริ่มต้น Serial หากมี รีเซ็ตหน้าจอ ตรวจหาไดรเวอร์ TFT เริ่มหน้าจอ เริ่มการ์ด และเรียกใช้ฟังก์ชันเพื่อวาดพื้นหลัง

ฉันจะข้ามไปยังส่วนหลักของฟังก์ชันลูป อย่างอื่นใช้เพื่อขับเคลื่อนหน้าจอสัมผัสเท่านั้น

// ตรวจจับการกดหน้าจอและเก็บไว้ในตัวแปรหาก (p.z > MINPRESSURE && p.z < MAXPRESSURE) { //Scale p.x = map (p.x, TS_MINX, TS_MAXX, tft.width (), 0); p.y = (tft.height() - แผนที่ (p.y, TS_MINY, TS_MAXY, tft.height(), 0));

//วาด

if (py> 21) {// บันทึกข้อมูลลงใน SD card storage = SD.open ("storage.txt", FILE_WRITE); storage.print(หน้าx); storage.print(", "); storage.println(py); storage.close();

//จุดที่ตำแหน่งสัมผัส

tft.fillCircle(p.x, p.y, PENRADIUS, WHITE); }

//ปุ่มลบ

if ((หน้า 198) && (หน้าx < 219)) { deleteStorage(); }

//โหลดการทำงานของปุ่ม

ถ้า ((หน้า 219)) { loadStorage (); } }

หากตรวจพบการกด ให้ตั้งค่าตัวแปรสำหรับตำแหน่งของการกด

จากนั้น หากสื่ออยู่ในพื้นที่วาดภาพ ให้บันทึกจุดลงในการ์ด SD ใน storage.txt แล้ววาดวงกลมที่จุดที่กดด้วยขนาดและสีที่กำหนด

จากนั้น หากการกดอยู่ที่ตำแหน่งของปุ่มลบ ให้เรียกใช้ฟังก์ชันที่จะลบภาพวาดที่เก็บไว้ หากคุณกำลังใช้หน้าจอขนาดอื่น ให้ลองเล่นกับค่าตำแหน่งของปุ่ม

จากนั้น หากการกดอยู่ที่ตำแหน่งของปุ่มโหลด ให้เรียกใช้ฟังก์ชันที่โหลดภาพวาดที่เก็บไว้ หากคุณกำลังใช้หน้าจอขนาดอื่น ให้ลองเล่นกับค่าตำแหน่งของปุ่ม

ตอนนี้ฉันจะอธิบายฟังก์ชัน

เรียกใช้ฟังก์ชันแรกในการตั้งค่าเพื่อวาดพื้นหลังและปุ่ม

เป็นโมฆะ drawBackground () {// ตั้งค่าพื้นหลัง tft.fillScreen (BLACK);

//ระบายสีข้อความ

tft.setTextColor (สีขาว); tft.setTextSize(3); tft.setCursor(0, 0); tft.println("ระบายสี");

//ปุ่มโหลด

tft.fillRect (219, 0, 21, 21, สีเขียว);

//ล้างปุ่ม

tft.fillRect(198, 0, 21, 21, สีแดง); }

มันทำให้หน้าจอเป็นสีดำ เขียนคำว่า Paint และวาดสี่เหลี่ยมสีสำหรับปุ่มต่างๆ หากคุณกำลังใช้หน้าจอขนาดอื่น ให้ลองเล่นกับค่าตำแหน่งของปุ่ม

เป็นโมฆะ deleteStorage () {// ลบไฟล์ SD.remove ("storage.txt");

//ตั้งค่าพื้นหลัง

tft.fillScreen (สีดำ);

//ลบข้อความสำเร็จ

tft.setTextColor (สีขาว); tft.setTextSize(2); tft.setCursor(0, 0); tft.println("storage.txt ถูกลบ");

//ให้ผู้ใช้ได้อ่าน

ล่าช้า (2000);

//วาดรูปต่อ

drawBack(); }

ฟังก์ชัน deleteStorage ลบ storage.txt เติมหน้าจอสีดำ และแสดงข้อความแสดงความสำเร็จในการลบ จากนั้นเรียกใช้ฟังก์ชัน drawBackground เพื่อให้คุณสามารถเริ่มวาดภาพอย่างอื่นได้

เป็นโมฆะ loadStorage () {// หลีกเลี่ยงการทำซ้ำจากความล่าช้าของนิ้วช้า (250);

//ตรวจสอบไฟล์ที่จัดเก็บ

ถ้า (!SD.exists ("storage.txt")) { Serial.println ("ไม่มีไฟล์ storage.txt"); กลับ; }

//เปิดไฟล์ในโหมดอ่านอย่างเดียว

ที่เก็บข้อมูล = SD.open("storage.txt", FILE_READ);

//ในขณะที่มีข้อมูล

ในขณะที่ (stoY> 0) {// อัปเดตตัวแปรตำแหน่ง stoX = storage.parseInt (); stoY = storage.parseInt();

//วาดจากที่เก็บข้อมูล

tft.fillCircle (stoX, stoY, PENRADIUS, WHITE); } //ปิดไฟล์ storage.close(); }

สุดท้าย ฟังก์ชัน loadStorage จะตรวจสอบไฟล์ที่เก็บข้อมูล เปิดในโหมดอ่านอย่างเดียว จากนั้นวนซ้ำนี้:

ตราบใดที่มีข้อมูลมากขึ้น

  1. อัปเดตตัวแปรตำแหน่งด้วยข้อมูลที่แยกวิเคราะห์จาก storage.txt
  2. วาดวงกลมที่จุดโหลด

เมื่อการวนซ้ำเสร็จสิ้นและไม่มีข้อมูลใดๆ อีก จะเป็นการปิดไฟล์จัดเก็บ

รหัสสำหรับร่างนี้สามารถพบได้ด้านล่าง เพียงดาวน์โหลด เปิดใน Arduino แล้วอัปโหลดไปยังบอร์ดของคุณ!

ขั้นตอนที่ 4: การใช้โปรแกรมนี้

การใช้โปรแกรมนี้
การใช้โปรแกรมนี้

เพียงเสียบ Arduino ของคุณเข้ากับแหล่งพลังงาน - คอมพิวเตอร์ แบตเตอรี่ หูดที่ผนัง ฯลฯ แล้วเริ่มวาดภาพ หากต้องการลบภาพวาดและข้อมูลที่เก็บไว้ ให้กดปุ่มสีแดง หากต้องการโหลดภาพวาดจากที่เก็บข้อมูลและทำงานต่อ ให้คลิกปุ่มสีเขียว ด้วยวิธีนี้ คุณสามารถทำซ้ำได้หลายครั้งบนภาพวาด!

เป็นส่วนขยาย ให้ลองวาดภาพวาดบนคอมพิวเตอร์ของคุณ:

  1. เสียบการ์ด SD ที่มีข้อมูลเข้ากับคอมพิวเตอร์ของคุณ
  2. เปิด storage.txt ในโปรแกรมแก้ไขข้อความ/โค้ดที่คุณชื่นชอบ
  3. คัดลอกค่าทั้งหมดใน storage.txt
  4. ตามลิงค์นี้ไปยังโปรแกรมพล็อตจุด
  5. ลบจุดตัวอย่างสองจุดทางด้านซ้าย
  6. วางข้อมูลของคุณในตำแหน่งที่มีจุดตัวอย่าง

นี่เป็นวิธีที่เรียบร้อยในการแสดงภาพวาดของคุณ - อาจลองเปลี่ยนสีจุดบน Arduino หรือในพล็อตเตอร์!

ยินดีต้อนรับการปรับเปลี่ยนและฉันชอบที่จะเห็นคำแนะนำในความคิดเห็น ขอบคุณสำหรับการดูสิ่งนี้ และฉันหวังว่าคุณจะพบว่ามีประโยชน์ในการใช้งานในโครงการของคุณเอง!

แนะนำ: