สารบัญ:

ตัวสร้างอักขระที่กำหนดเอง (เมทริกซ์ Adafruit HT16k33): 3 ขั้นตอน
ตัวสร้างอักขระที่กำหนดเอง (เมทริกซ์ Adafruit HT16k33): 3 ขั้นตอน

วีดีโอ: ตัวสร้างอักขระที่กำหนดเอง (เมทริกซ์ Adafruit HT16k33): 3 ขั้นตอน

วีดีโอ: ตัวสร้างอักขระที่กำหนดเอง (เมทริกซ์ Adafruit HT16k33): 3 ขั้นตอน
วีดีโอ: MicroPython Displays: Drawing Shapes with Tony D! @micropython 2024, กรกฎาคม
Anonim
ตัวสร้างอักขระที่กำหนดเอง (เมทริกซ์ Adafruit HT16k33)
ตัวสร้างอักขระที่กำหนดเอง (เมทริกซ์ Adafruit HT16k33)

การพิมพ์อักขระพิเศษบน LCD และ Led Matrices นั้นสนุกมาก ขั้นตอนในการพิมพ์อักขระพิเศษหรืออักขระที่กำหนดเองคือการสร้างอาร์เรย์ที่มีค่าไบนารีสำหรับแต่ละแถวและคอลัมน์ การค้นหาโค้ดที่ถูกต้องสำหรับอักขระที่กำหนดเองอาจเป็นเรื่องที่ยุ่งยาก ดังนั้น โครงการนี้จะทำให้ระบบอัตโนมัติและสร้างโค้ดสำหรับเมทริกซ์ led 8x8 และจะพิมพ์อักขระที่กำหนดเองบน Adafruit HT16k33 8x8 Bicolor Matrix

Adafruit HT16k33 ขนาด 1.2 นิ้ว 8x8 Bicolor Led Matrix สื่อสารกับ Arduino ผ่านโปรโตคอลการสื่อสาร I2C

Adafruit ระบุว่า " กระเป๋าเป้ LED รุ่นนี้ออกแบบมาสำหรับเมทริกซ์ขนาด 1.2" 8x8 พวกเขาวัดได้เพียง 1.2 "x1.2" ดังนั้นจึงเป็นเรื่องน่าละอายที่จะใช้ชิปจำนวนมากเพื่อควบคุม กระเป๋าเป้ใบนี้แก้ปัญหาความรำคาญของการใช้หมุด 16 พินหรือชิปหลายตัว โดยมีตัวควบคุมเมทริกซ์กระแสไฟคงที่ I2C วางอย่างเป็นระเบียบที่ด้านหลังของ PCB ชิปควบคุมดูแลทุกอย่าง โดยวาด LED ทั้ง 64 ดวงในพื้นหลัง สิ่งที่คุณต้องทำคือเขียนข้อมูลโดยใช้อินเทอร์เฟซ I2C แบบ 2 พิน มีหมุดเลือกที่อยู่สองอัน ดังนั้นคุณสามารถเลือกหนึ่งใน 8 แอดเดรสเพื่อควบคุมได้มากถึง 8 อันบนบัส I2C แบบ 2 พินเดียว (รวมถึงชิปหรือเซ็นเซอร์ I2C อื่นๆ ที่คุณต้องการ) ชิปไดรเวอร์สามารถ 'หรี่' จอแสดงผลทั้งหมดได้ตั้งแต่ความสว่าง 1/16 จนถึงความสว่างเต็มที่ในขั้นตอนที่ 1/16 ไม่สามารถหรี่ไฟ LED แต่ละดวงได้ เฉพาะจอแสดงผลทั้งหมดในคราวเดียว"

ในคำแนะนำนี้ ฉันจะอธิบายวิธีรับรหัสสำหรับอักขระที่กำหนดเองแบบเรียลไทม์และพิมพ์อักขระนั้นบน Led Matrix

ขั้นตอนที่ 1: ส่วนประกอบ

คำแนะนำนี้เป็นโครงการพื้นฐานบน Adafruit HT16k33 Matrix คุณต้องการ:

  1. Adafruit HT16k33 1.2 '' x 1.2 '' 8x8 Bicolor Led Matrix.
  2. Arduino (รุ่นใดก็ได้ แต่แนะนำให้ใช้ Uno)
  3. เขียงหั่นขนม
  4. พาวเวอร์ซัพพลาย

ขั้นตอนที่ 2: แผนผัง

แผนผัง
แผนผัง
แผนผัง
แผนผัง

การเดินสายไฟ Adafruit HT16k33 Led matrix นั้นง่ายมาก เนื่องจากเราจำเป็นต้องเชื่อมต่อนาฬิกาและดาต้าพิน เช่นเดียวกับที่เรามักจะทำกับอุปกรณ์ I2C การเชื่อมต่อจะเป็นดังนี้:

  1. SCL (เข็มนาฬิกาของเมทริกซ์) เชื่อมต่อกับ A5 (เข็มนาฬิกาของ Arduino Uno โปรดดูเอกสารข้อมูลสำหรับ Arduino รุ่นอื่นๆ)
  2. SDA (พินข้อมูลของเมทริกซ์) เชื่อมต่อกับ A4 (ดูเอกสารข้อมูลสำหรับ Arduino รุ่นอื่นๆ)
  3. VCC เชื่อมต่อกับ 5V
  4. GND เชื่อมต่อกับ 0V

คุณยังสามารถศึกษาแผนผังที่แสดงในรูป

ขั้นตอนที่ 3: รหัส

รหัส
รหัส
รหัส
รหัส

รหัส Arduino

ประการแรก เราจะรวมไลบรารีทั้งหมดที่จำเป็น

  1. Wire.h:- สำหรับการสื่อสาร I2C
  2. Adafruit_LedBackpack
  3. Adafruit_GFX

ไลบรารีทั้งหมดเหล่านี้มีอยู่ใน Arduino IDE เอง คุณเพียงแค่ต้องติดตั้งจาก Library Manager ร่าง>>รวมไลบรารี่ >> จัดการไลบรารี

ฟังก์ชันการตั้งค่า ()

การตั้งค่าอาร์เรย์ 8 บิตจำนวนเต็มที่ไม่ได้ลงนามเป็นค่าไบนารี strore8 สำหรับ 8 แถว โดยแต่ละ 8 บิต (8 คอลัมน์) ตั้งค่าที่อยู่สำหรับการสื่อสาร I2C

ฟังก์ชันวนรอบ ()

เนื่องจากเราต้องพิมพ์อักขระ เราจึงต้องการรหัสสำหรับอักขระนั้นในแบบเรียลไทม์ วิธีที่สะดวกที่สุดคือส่งรหัสตามลำดับและ Arduino จะอ่านข้อมูลอนุกรมและพิมพ์อักขระตามลำดับ การส่งอาร์เรย์แบบอนุกรมอาจเป็นงานที่วุ่นวาย ดังนั้น เราสามารถส่งสตริงที่มีรหัสทั้งหมด 8 รหัส (แต่ละรหัส 8 บิต) คั่นด้วยเครื่องหมายจุลภาค

การอ่านสตริงอนุกรม:

if (Serial.available()>0) { data=Serial.readStringUntil('\n'); Serial.println (ข้อมูล); }

หลังจากอ่านข้อความแล้ว เราจำเป็นต้องถอดรหัสสตริงนี้และรับค่าไบนารีกลับมา ดังที่เราทราบ รูปแบบของสตริงอินพุตจะเหมือนกันเสมอ เราสามารถเข้ารหัสเพื่อค้นหาสตริงย่อยและแปลงสตริงเป็นค่าทศนิยมที่เทียบเท่ากัน จากนั้นเราจะส่งอาร์เรย์ทศนิยมที่สร้างขึ้น (uint8_t) เพื่อพิมพ์อักขระบนเมทริกซ์

การแปลงสตริง 8 บิตเป็นทศนิยม:

int val (สตริง str) { int v=0; สำหรับ (int i=0;i<8;i++) { if (str=='1') { v=v+power(2, (7-i)); } } ส่งคืน v; }

สำหรับการประเมินค่าเทียบเท่าทศนิยมโดยใช้ฟังก์ชันกำลัง (pow ()) คุณต้องจัดการกับค่าประเภทสอง ดังนั้นเราสามารถเขียนฟังก์ชันกำลังของเราเองเป็น:

กำลัง int (ฐาน int, เลขชี้กำลัง int) { int c=1; สำหรับ (int i=0;i { c=c*base; } return c; }

สุดท้ายนี้ เราจะเขียนโค้ดเพื่อพิมพ์อักขระโดยใช้อาร์เรย์ที่สร้างจากค่าทศนิยม 8 ค่า (หนึ่งค่าสำหรับแต่ละแถว)

เป็นโมฆะ print_emoji (uint8_t emoji , สีสตริง) { matrix.clear (); ถ้า (สี = = "สีแดง") { matrix.drawBitmap (0, 0, อีโมจิ, 8, 8, LED_RED); } อื่น ๆ { matrix.drawBitmap(0, 0, อีโมจิ, 8, 8, LED_GREEN); } matrix.writeDisplay(); ล่าช้า (500); }

คุณจะเข้าใจโค้ดนี้ได้ง่ายในขณะที่เรากำลังล้างเมทริกซ์ก่อน จากนั้นจึงแสดงอักขระโดยใช้อาร์เรย์อีโมจิโดยใช้ฟังก์ชัน matrix.drawBitmap() อย่าลืมเขียน "matrix.writeDisplay()" หลังจากการจัดรูปแบบทั้งหมด เนื่องจากฟังก์ชันนี้จะแสดงการจัดรูปแบบทั้งหมดที่ทำบนเมทริกซ์เท่านั้น

ตอนนี้คุณสามารถส่งสตริงพร้อมค่ารหัสทั้งหมดและ Arduino จะพิมพ์อักขระบนเมทริกซ์ คุณสามารถดาวน์โหลดรหัส Arduino ได้จากด้านล่าง เพื่อวัตถุประสงค์ในการทดลอง คุณสามารถเขียน

B00111100, B01000010, B10100101, B10000001, B10100101, B10011001, B01000010, B00111100

สตริงนี้ใน Serial Monitor และสามารถดูอักขระบนเมทริกซ์

ตอนนี้ เราต้องส่งข้อมูลซีเรียลโดยอัตโนมัติจากซอฟต์แวร์เมื่อเรากดปุ่ม "พิมพ์" เพื่อทำให้สิ่งนี้เป็นอัตโนมัติ เราจะทำการสาธิตเมทริกซ์ขนาด 8x8 และเราจะจัดเตรียมสิ่งอำนวยความสะดวกให้กับผู้ใช้ในการเลือกว่าเซลล์ใดควรถูกระบายสี จากนั้นซอฟต์แวร์จะสร้างโค้ดโดยอัตโนมัติและส่งข้อมูลตามลำดับไปยัง Arduino ในรูปแบบสตริง ฉันเลือกการประมวลผลสำหรับงานที่เหลือของฉัน ในการประมวลผล เราสามารถสร้างเมทริกซ์โดยใช้ปุ่ม 64 ปุ่ม (สี่เหลี่ยมที่มีฟังก์ชั่นกด) และสามารถกำหนดค่าและสีเฉพาะเมื่อเริ่มต้น (ปล่อยให้เป็นสีขาวที่มีค่า 0) ตอนนี้ทุกครั้งที่กดปุ่ม เราจะแปลงสีของปุ่มเป็นสีดำและตั้งค่าเป็น 1 หากผู้ใช้กดปุ่มเดิมอีกครั้ง ค่าของปุ่มจะเปลี่ยนเป็น 0 อีกครั้งและสีจะกลับเป็นสีขาว สิ่งนี้จะช่วยให้ผู้ใช้เปลี่ยนรหัสครั้งแล้วครั้งเล่าได้อย่างง่ายดายและสามารถแก้ไขได้อย่างง่ายดายโดยไม่ต้องลบเมทริกซ์ทั้งหมดอีกครั้ง เมื่อคลิกปุ่ม "พิมพ์" เราจะสร้างสตริงที่คล้ายกับที่แสดงด้านบนสำหรับการสาธิต จากนั้นสตริงจะถูกส่งไปยังพอร์ตอนุกรมเฉพาะ

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

คุณสามารถดูว่า GUI มีลักษณะอย่างไรและอักขระถูกสร้างขึ้นโดยใช้ระบบอย่างไร แทบจะใช้เวลาไม่กี่วินาทีในการสร้างอักขระตัวเดียวกันบนเมทริกซ์

คุณสามารถดาวน์โหลดโค้ดและรูปภาพของโปรเจ็กต์นี้ได้จาก GitHub Repository ของฉัน

แนะนำ: