תוכן עניינים:

כיף עם תצוגת OLED וארדואינו: 12 שלבים (עם תמונות)
כיף עם תצוגת OLED וארדואינו: 12 שלבים (עם תמונות)

וִידֵאוֹ: כיף עם תצוגת OLED וארדואינו: 12 שלבים (עם תמונות)

וִידֵאוֹ: כיף עם תצוגת OLED וארדואינו: 12 שלבים (עם תמונות)
וִידֵאוֹ: הוא נאלץ לצאת! ~ בית נטוש שובה לב של מהגרים הולנדים 2024, יולי
Anonim
כיף עם תצוגת OLED וארדואינו
כיף עם תצוגת OLED וארדואינו

אני די בטוח שבהחלט שמעת על טכנולוגיית תצוגת OLED. הוא חדש יחסית ומציע איכות טובה יותר מטכנולוגיית LCD הישנה. במדריך זה אנו רוצים לסקור את השלבים הנדרשים להצגת נתונים על אחד ממודולי התצוגה OLED בצבע אחד הנפוצים ביותר הקיימים בשוק. אנסה להסביר פונקציות המסופקות על ידי ספריית Adafruit המתאימה להצגת נתונים על מודול זה.

שלב 1: באילו מודולי OLED אנו הולכים להשתמש?

באילו מודולי OLED אנו הולכים להשתמש?
באילו מודולי OLED אנו הולכים להשתמש?
באילו מודולי OLED אנו הולכים להשתמש?
באילו מודולי OLED אנו הולכים להשתמש?
באילו מודולי OLED אנו הולכים להשתמש?
באילו מודולי OLED אנו הולכים להשתמש?

מודולי OLED זמינים במגוון רחב של גדלים ותכונות. זה שאנו הולכים להשתמש בו במדריך זה הוא מודול OLED בגודל 128x64 בצבע מונו. מודול מסוג זה זמין בגדלים הבאים (על מנת שתראה בתמונות):

  • 128x64
  • 128x32
  • 96x16
  • 64x48
  • 64x32

מכיוון שכל המודולים הללו תומכים בפרוטוקול I2C כאמצעי לתקשורת, הקוד והחיווט של כולם זהים לחלוטין. ההבדל היחיד הוא שאתה צריך לשקול את גודל התצוגה בקוד שלך כך שהתכנים שאתה עומד להציג יתאימו לו כראוי.

שלב 2: I2C בקצרה

I2C בקצרה
I2C בקצרה

המעגל המשולב (IIC) הנקרא בדרך כלל I2C (ריבוע C) שפותח על ידי פיליפס בשנות ה -80 כאוטובוס חילופי נתונים המשמש להעברת נתונים בין יחידת העיבוד המרכזית (CPU) או יחידת המיקרו-בקר (MCU) של מכשיר ובין שבבים היקפיים. זה היה מכוון בעצם ליישום טלוויזיה. בשל פשטותו, הוא הפך להיות כל כך פופולרי עד שלאחר זמן מה הוא הפך לאחד המנגנונים העיקריים להעברת נתונים עבור מעבדים ומרכזי MCU והתקנים היקפיים שאינם חלק הכרחי מאותו לוח PCB ומחוברים אליו באמצעות חוט (למשל חיישנים, מודולי תצוגה וכו ').

I2C מורכב מאוטובוס תקשורת העשוי משני חוטים התומך בהעברת נתונים דו כיוונית בין מאסטר למספר התקני עבדים. בדרך כלל צומת המאסטר אחראית על השליטה באוטובוס - מה שבאמת מתבצע על ידי יצירת אות סנכרון על קו השעון הטורי (SCL). זהו אות שיישלח ברציפות על ידי המאסטר במהלך ההעברה וכל הצמתים האחרים המחוברים לאוטובוס ישתמשו בו לסנכרן את התקשורת שלהם ולזהות את מהירות האוטובוס. הנתונים מועברים בין המאסטר לעבד באמצעות קו נתונים סדרתי (SDA). מהירות השידור יכולה להגיע עד 3.4 Mbps. כל המכשירים שרוצים להעביר נתונים באמצעות I2C צריכים להיות בעלי כתובת ייחודית ויכולים לפעול כמשדר או כמקלט בהתאם לתפקוד המכשיר. לדוגמא מודול תצוגה של OLED הוא מקלט המקבל נתונים מסוימים ומציג אותם, בעוד שחיישן טמפרטורה הוא מקלט ששולח טמפרטורה שנלכדה באמצעות אוטובוס I2C. בדרך כלל התקן ראשי הוא המכשיר שיוזם העברת נתונים באוטובוס ויוצר את אותות השעון כדי לאפשר את ההעברה. במהלך ההעברה, כל מכשיר שאליו פונה מאסטר זה נחשב לעבד וקורא את הנתונים האלה.

כאשר צומת רוצה לשלוח כמה נתונים, הבייט הראשון של הנתונים צריך להיות כתובת המקלט ולאחר מכן מגיעים נתונים אמיתיים לאחר מכן. המשמעות היא שכדי לשלוח נתונים להתקן פלט באמצעות I2C (למשל מודול תצוגה I2C OLED) ראשית עלינו למצוא את כתובת I2C שלה וזה מה שנעשה תחילה בשלבים הבאים.

אם אתה מעוניין לדעת יותר על הפרטים והתיאוריות לגבי אוטובוס I2C, תוכל להשתמש בהפניות הבאות:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

שלב 3: מודולים ורכיבים נדרשים

מודולים ורכיבים נדרשים
מודולים ורכיבים נדרשים
מודולים ורכיבים נדרשים
מודולים ורכיבים נדרשים
מודולים ורכיבים נדרשים
מודולים ורכיבים נדרשים

כאן תוכל למצוא את רשימת הרכיבים הדרושים לך להשלמת הדרכה זו:

קישורים לאיביי:

  • 1 x Arduino Uno:
  • 1 x מודול OLED 128x64:
  • 4 x כבל Dupont:
  • 1 x קרש לחם מיני ללא הלחמה:

קישורים של Amazon.com:

  • 1 x Arduino Uno:
  • 1 x מודול OLED 128x64:
  • 4 x כבל Dupont:
  • 1 x קרש לחם מיני ללא הלחמה:

שלב 4: חיווט מודול תצוגת OLED ל- Arduino

מודול תצוגת OLED לחיווט לארדואינו
מודול תצוגת OLED לחיווט לארדואינו
מודול תצוגת OLED לחיווט לארדואינו
מודול תצוגת OLED לחיווט לארדואינו
מודול תצוגת OLED לחיווט לארדואינו
מודול תצוגת OLED לחיווט לארדואינו
מודול תצוגת OLED לחיווט לארדואינו
מודול תצוגת OLED לחיווט לארדואינו

הערה חשובה לגבי מכשירים המותאמים ל- I2C היא שהדרך שבה אתה צריך לחבר אותם ל- Arduino זהה. זאת מכיוון שארדואינו מפעילה את תקשורת ה- I2C שלה רק על פינים ספציפיים. במדריך זה אני משתמש ב- Arduino Uno. ה- Arduino Uno משתמש בסיכה A5 כ- SCK ו- A4 כ- SDA. כך שנוכל לחבר את מודול התצוגה OLED ל- Arduino Uno כפי שמוצג בתצוגה הסכימטית. כפי שאתה עשוי להבחין בתמונה שצילמתי ממודול התצוגה OLED שלי, המחבר עבור VCC ו- GND שונה מהתצוגה הסכימטית. זכור לבדוק את התוויות של הסיכות במודולים שלך כדי לוודא שאתה מחבר אותו בצורה נכונה.

אנחנו צריכים רק 4 סיכות שצריך לחבר אותן להלן:

Arduino VCC -> מודול OLED VCC

Arduino GND -> מודול OLED GND

Arduino 4 -> מודול OLED SDA

Arduino 5 -> מודול OLED SCK

שלב 5: מציאת הכתובת של מודול התצוגה

מציאת כתובת מודול התצוגה
מציאת כתובת מודול התצוגה

כשלב ראשון בחיבור למכשיר מופעל I2C, עליך לקבל את כתובת המודול. על מנת לעשות זאת, לאחר חיבור המודול ל- Arduino שלך, עליך פשוט להעלות את הקוד המצורף אל ה- Arduino שלך. קוד זה משלב את ספריית Wire שהיא ספרייה הכלולה ב- Arduino IDE המטפלת בתקשורת I2C. הוא מנסה לסרוק התקני I2C מחוברים ושולח את כתובתם דרך יציאה טורית למחשב שלך. כך שתוכל לגשת לתפוקתו באמצעות כלי צג סידורי ב- Arduino IDE. הגרסה המקורית זמינה ב- Arduino Playground). כמו כן, תוכל לצפות בו בצורה קריאה יותר בעורך המקוון שלי Arduino. אל תצפה שמשהו יופיע על המסך בזמן שהקוד הזה פועל.

כפי שאתה יכול לראות בתמונה, המודול שלי נקשר לכתובת 0x3C. בדרך כלל לכל המכשירים בקו מוצרים ספציפי (למשל כל מודולי OLED 128x64) יש את אותה כתובת.

הכתובת של התקני I2C מוגבלת מ -1 ל -126. קוד זה פשוט מנסה להתחבר לכל מכשיר לפי הסדר (מבלי להעביר נתונים) ולאחר מכן לבדוק אם הייתה שגיאה שדווחה על ידי הספרייה הבסיסית בחיבור לכתובת המסופקת. אם אין שגיאה, הדפס את הכתובת כמודול זמין לחיבור. כמו כן יש לציין ש -15 הכתובות הראשונות שמורות, כך שהוא קופץ מעליהן ופשוט מדפיס את אלה שמעל לטווח זה. זכור כי הכתובת של מודולי I2C אלה מקודדים במכשיר ולא ניתן לשנות אותה. אז זה יהיה רעיון טוב לכתוב את זה איפשהו או לשים תווית על המודול כשאתה עומד להחזיר אותו למדף המעבדה שלך, כך שבפעם הבאה לא יהיה צורך בהפעלת קוד הסורק. עם זאת זה לא הליך מסובך;)

שלב 6: התקנת ספריות הנדרשות להצגת נתונים במודול OLED

התקנת ספריות הנדרשות להצגת נתונים במודול OLED
התקנת ספריות הנדרשות להצגת נתונים במודול OLED
התקנת ספריות הנדרשות להצגת נתונים במודול OLED
התקנת ספריות הנדרשות להצגת נתונים במודול OLED

ספריית Wire יכולה להתמודד עם תקשורת ברמה נמוכה עם התקני I2C. כאשר ברצונך להתחבר להתקן ספציפי על מנת לקרוא/לכתוב נתונים ממנו/אליו, בדרך כלל היית משתמש בספרייה המסופקת על ידי החברה שבנתה את המודול במקור. ספרייה זו מטפלת בכל פרטי התקשורת של I2C עם המודול הנתון ומאפשרת לנו להתרכז יותר בעסק שלנו שבמקרה זה מציג את הנתונים באופן הרצוי לנו.

Adafruit, החברה המייצרת את הגרסה המקורית של מודולי תצוגה מסוג זה, מספקת ספריות בשם Adafruit SSD1306 להצגת נתונים על מסכי מונוכרום אלה. אז לפני שנתחיל בקידוד, עלינו להתקין את הספרייה הזו באמצעות מנהל הספרייה (נגיש באמצעות סקיצה> כלול ספרייה> נהל ספריות … בתפריט Arduino IDE. יש גם ספרייה נוספת בשם Adafruit GFX Library המטפלת בדברים גרפיים ברמה נמוכה יותר ומשמשת אותה באופן פנימי על ידי Adafruit SSD1306. עליך להתקין את שניהם ב- Arduino IDE שלך כפי שאתה יכול לראות בתמונות.

שלב 7: אתחול מודול התצוגה

אתחול מודול התצוגה
אתחול מודול התצוגה

מודול הציור על התצוגה עטוף בכיתה בשם Adafruit_SSD1306. ההגדרה של מחלקה זו היא בספריית Adafruit, לכן עלינו לכלול תחילה את הספרייה הזו. לאחר מכן עלינו לייצר תחילה מופע מהשיעור הזה. הבונה של מחלקה זו לוקח את מספר היציאה שבו ניתן לאפס את המסך שהוא סיכה 4 (מחובר ל- SCK). חלק זה של הקוד צריך להיות ממוקם בתחילת הקובץ (מתוך פונקציות ההתקנה () והלולאה ()).

#לִכלוֹל

תצוגת Adafruit_SSD1306 (4);

כעת בתוך פונקציית ההתקנה () עלינו לקרוא לפונקציית ההתחלה של אובייקט התצוגה על ידי העברת כתובת I2C שלנו להלן (SSD1306_SWITCHCAPVCC הוא ערך קבוע המציין את סוג מקור החשמל לספרייה):

הגדרת בטל () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } לולאת void () {} // לולאה יכולה להיות ריקה לעת עתה

כעת אובייקט התצוגה מוכן ואנו יכולים לקרוא לפונקציות שלו (למשל display.write (), display.drawLine וכו '). ההערה החשובה היא שבכל פעם שאנו מציירים משהו על ידי קריאה לאובייקט התצוגה שלנו, עלינו להתקשר לפונקציה display.display () בכדי לגרום לציור לקרות בפועל ברמת החומרה. זה נובע בעיקר מכך שפונקציות הציור שאנו קוראים להן, פשוט עדכנו את הייצוג "בזיכרון" של התצוגה מסיבות ביצוע. זה למעשה מטמון את השינויים בזיכרון. אז עלינו לזכור תמיד לקרוא לפונקציית display () כשסיימנו לצייר משהו על המסך.

display.write (…); // ממשיך להתעדכן בזיכרון

display.drawLine (…); // ממשיך להתעדכן בזיכרון. display.display (); // שוטף את כל השינויים בחומרת התצוגה

אם תנסה להעלות את הקוד שלך בשלב זה, תבחין כי הלוגו של Adafruit Industries יוצג. אתה עשוי לתהות מי ביקש ממנה לצייר את זה! למעשה זה מה שספריית Adafruit עושה. הוא מאתחל את זיכרון המודול (ייצוג הזיכרון של חומרת התצוגה) עם הלוגו של חברה זו. אם אינך רוצה לראות זאת במהלך האתחול, תוכל לנסות להתקשר לפונקציית display.clearDisplay () ממש לפני קריאת display.display () בפונקציית ההתקנה שלך. פונקציה זו, כפי ששמה מרמז, מנקה את הצג לחלוטין.

#לִכלוֹל

תצוגת Adafruit_SSD1306 (4); הגדרת חלל () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.display (); } לולאת חלל () {}

בהתבסס על תיעוד של ספריית Adafruit_SSD1306, תוכל להשתמש בפונקציות שונות המסופקות על ידי מחלקה זו כדי לצייר בתצוגה או לתפעל ישירות את הפיקסלים בה. בחלקים הבאים ננסה להציג דוגמא לכל אחד מהם, כך שתוכל לקבל מושג לגבי אופן פעולתו. רוב הדוגמאות הללו יציגו רק תוכן סטטי פשוט, כך שנוכל להכניס אותן לפונקציית ההתקנה () שלנו (לאחר קוד האתחול). בכך הוא יופעל רק פעם אחת ונשאר שם.

שלב 8: הצג טקסט פשוט

הצג טקסט פשוט
הצג טקסט פשוט
הצג טקסט פשוט
הצג טקסט פשוט
הצג טקסט פשוט
הצג טקסט פשוט

כדי להציג טקסט, אנו יכולים להשתמש בפונקציה display.println () הפשוטה של הספרייה. הוא מקבל את הטקסט כמחרוזת ומנסה להציג אותו. חשוב לדעת שעלינו לספר לספרייה היכן על המסך נציג את הטקסט. לכל פיקסל בתצוגה יש קואורדינטות שצוין עם X ו- Y. ה- X עולה משמאל לימין ו- Y עולה מלמעלה למטה. הפינה השמאלית העליונה של המסך היא (X = 0, Y = 0) והפינה הימנית התחתונה היא (X = 127, Y = 63). ציינתי את קואורדינטות הפינות בתמונה הראשונה. אנו יכולים להשתמש בפונקציה display.setCursor () כדי לציין היכן בתצוגה נציג את הטקסט.

תכונה נוספת של הטקסט היא צבעו. אנו יכולים לציין את הצבע באמצעות display.setTextColor () כפי שמוצג במדגם הבא.

display.clearDisplay ();

display.setTextColor (לבן); display.setCursor (35, 30); display.println ("שלום עולם!"); display.display ();

אנו יכולים גם להשתמש בפונקציה display.write () להצגת תו יחיד. הוא מקבל קוד תו כסוג uint8_t ומציג את התו המתאים לקוד זה במחרוזת. כדוגמה, אם נרצה להציג את אותה מחרוזת באמצעות פונקציה זו, נוכל להשתמש בקטע הקוד הבא:

display.clearDisplay ();

display.setTextColor (לבן); display.setCursor (35, 30); display.write (72); display.write (101); display.write (108); display.write (108); display.write (111); display.write (32); display.write (87); display.write (111); display.write (114); display.write (108); display.write (100); display.write (33); display.display ();

אפשר גם לצייר טקסטים בצבע שחור עם רקע לבן. על מנת לעשות זאת, עליך להתקשר לפונקציה display.setTextColor כדלקמן:

display.clearDisplay ();

// מגדיר את הצבע לשחור עם תצוגת רקע לבנה. SetTextColor (BLACK, WHITE); display.setCursor (25, 30); display.println ("טקסט הפוך!"); display.display ();

יש לך גם אפשרות להגדיר את גודל הטקסט באמצעות הפונקציה display.setTextSize (). הוא מקבל מספר שלם כגודל. ככל שהמספר גדול יותר, הטקסט יהיה גדול יותר. הגודל הקטן ביותר הוא 1 שהוא גודל ברירת המחדל של טקסטים. הקוד הבא מנסה לכתוב את האות "A" ב -6 גדלים שונים:

display.clearDisplay ();

display.setTextColor (לבן); display.setCursor (0, 0); display.setTextSize (1); display.print ("A"); display.setTextSize (2); display.print ("A"); display.setTextSize (3); display.print ("A"); display.setTextSize (4); display.print ("A"); display.setTextSize (5); display.print ("A"); display.setTextSize (6); display.print ("A"); display.display ();

שלב 9: ציור צורות בסיסיות

ציור צורות בסיסיות
ציור צורות בסיסיות
ציור צורות בסיסיות
ציור צורות בסיסיות
ציור צורות בסיסיות
ציור צורות בסיסיות

ציור צורות בסיסיות כמו מלבן, עיגול, משולש, קו או נקודה מאוד קלות ויש פונקציה ייעודית לכל אחת מהן.

קו ציור

כדי לצייר קו אתה יכול להתקשר display.drawLine (startX, startY, endX, endY, color). לדוגמה הקוד הבא מצייר קווים אלכסוניים במסך כך שהם מעצבים X גדול:

display.clearDisplay ();

display.drawLine (0, 0, display.width () - 1, display.height () - 1, WHITE); display.drawLine (display.width () - 1, 0, 0, display.height () - 1, WHITE); display.display ();

ניתן לגשת לרוחב ולגובה התצוגה באמצעות הפונקציות display.width () ו- display.height (). בכך הקוד שלך יהיה בלתי תלוי בגודל המסך.

ציור מלבן

הפונקציה לציור מלבן היא display.drawRect (upperLeftX, upperLeftY, רוחב, גובה, צבע). להלן הקוד המשרטט שלושה מלבנים בכמה מקומות אקראיים:

display.clearDisplay ();

display.drawRect (100, 10, 20, 20, WHITE); display.fillRect (10, 10, 45, 15, לבן); display.drawRoundRect (60, 20, 35, 35, 8, WHITE); display.display ();

על ידי קריאת display.fillRect (upperLeftX, upperLeftY, רוחב, גובה, לבן) תוכל לצייר מלבן מלא בצבע שצוין. כמו כן הפונקציה השלישית בדוגמה זו היא display.drawRoundRect (upperLeftX, upperLeftY, רוחב, גובה, cornerRadius, צבע) שכפי שאתה יכול לראות בתמונה משמש לציור מלבן עם פינות עגולות. הוא מקבל פרמטר נוסף לפני צבע שהוא מספר שלם המציין את רדיוס הפינה. ככל שהערך גדול יותר הפינה עגולה יותר. יש לו גם פונקציית מילוי מתאימה בשם display.drawFillRoundRect שלדעתי תוכל לנחש מה היא עושה.

מעגל ציור

הפונקציה היא display.drawCircle (centerX, centerY, רדיוס, צבע). להלן דוגמה המציירת צורה דמוית סמיילי:

display.drawCircle (60, 30, 30, לבן);

display.fillCircle (50, 20, 5, WHITE); display.fillCircle (70, 20, 5, WHITE);

כמו מלבנים, אתה יכול להשתמש בפונקציה display.fillCircle כדי לצייר עיגול מלא בצבע הנתון.

ציור משולש

אהה, שוב פונקציה הנקראת display.drawTriangle (poin1X, point1Y, point2X, point2Y, point3X, point3Y, color) ותצוגה מקבילה display.fillTriangle המציירת משולש מלא.

display.drawTriangle (24, 1, 3, 55, 45, 55, WHITE);

display.fillTriangle (104, 62, 125, 9, 83, 9, WHITE);

צייר נקודה

ניתן גם לצבוע נקודה מסוימת (הנקראת פיקסל) במסך באמצעות פונקציית display.drawPixel (pixelX, pixelY, color).

display.drawPixel (20, 35, WHITE);

display.drawPixel (45, 12, לבן); display.drawPixel (120, 59, WHITE); display.drawPixel (97, 20, WHITE); display.drawPixel (35, 36, WHITE); display.drawPixel (72, 19, WHITE); display.drawPixel (90, 7, WHITE); display.drawPixel (11, 29, WHITE); display.drawPixel (57, 42, WHITE); display.drawPixel (69, 34, WHITE); display.drawPixel (108, 12, לבן);

שלב 10: ציור תמונה

תמונת ציור
תמונת ציור
תמונת ציור
תמונת ציור

ציור תמונה שונה וקצת מסובך. מכיוון שמודול התצוגה הוא חד -גוני, עלינו להמיר תחילה את התמונה שלנו לפורמט הנקרא מפת סיביות מונו (נקרא גם שחור ולבן). בפורמט כזה, כל פיקסל של התמונה מוצג עם 0 או 1. האות 1 מייצג את קיומו של הצבע ו- 0s פירושו שטח ריק. אתה יכול לראות דוגמה ללוגו של Arduino בפורמט זה על גבי חלק זה. הפונקציה לציור תמונת מפת סיביות היא display.drawBitmap (topLeftX, topLeftY, imageData, רוחב, גובה, צבע). הפרמטר imageData הוא מערך מספרים בתים. לכל בת יש 8 סיביות, ולכן כל בת מכיל את הנתונים של 8 פיקסלים של התמונה. על ידי ציון הרוחב והגובה של התמונה, פונקציית drawBitmap תדע מאיזה ביט מתחילה שורת הפיקסלים הבאה.

הפתרון שבחרתי להמיר את התמונה שלי לפורמט זה היה תחילה להשתמש באחד ממרכזי "image to ASCII" (למשל https://my.asciiart.club) כדי להמיר את התמונה שלי לסט של ASCII ולאחר מכן להחליף התווים המשמשים למרחב ריק ב 0 ואחרים ב 1. זה מה שאתה רואה למטה. אתה יכול לחשוב על כל 0 ו -1 כפיקסל בתצוגה. כך שגודל התמונה לא יעלה על גודל התצוגה שלנו שהוא 128x64.

הערה: שימוש בטכניקת ASCII זו אינה גישה מומלצת מכיוון שבגלל יחס הגודל של התווים התמונה שלך תתעוות (תווים אינם ריבוע). ניסיתי את הטכניקה הזו רק כי היא מקלה על המרת התמונה לפורמט הנדרש. אחרת ניתן יהיה להשיג את התוצאה הטובה ביותר באמצעות תכנות כלשהו או שימוש ביישומי כלי שירות שהם לגמרי מחוץ להיקף הטקסט הזה.

00000000000000000000011111111111111111111110000000000000000000000000000000000000011111111111111111111111111111100000000000000000 0000000000000111111111111111111111111111111111111110000000000000 0000000000011111111111111111111111111111111111111111100000000000 0000000001111111111111111111111111111111111111111111111000000000 0000000111111111111111111111111111111111111111111111111110000000 0000011111111111111111111111111111111111111111111111111111100000 0000111111111111111111111111111111111111111111111111111111110000 0001111111111111111111111111111111111111111111111111111111111000 0011111111111111111111111111111111111111111111111111111111111100 0111111111111111000000011111111111111111100000001111111111111110 0111111111110000000000000001111111111000000000000000111111111110 1111111111000000001111000000001111000000001111000000001111111111 1111111110000011111111111100000110000011111111111100000111111111 1111111100000111111111111111000000001111111001111110000011111111 1111111100001111100000011111100000011111100000011111000011111111 1111111100001111100000011111100000011111100000011111000011111111 1111111100000111111111111111000000001111111001111110000011111111 1111111110000011111111111100000110000011111111111100000111111111 1111111111000000001111000000001111000000001111100000001111111111 0111111111110000000000000000111111110000000000000000111111111110 0111111111111111000000001111111111111111000000001111111111111110 0011111111111111111111111111111111111111111111111111111111111100 0001111111111111111111111111111111111111111111111111111111111000 0000111111111111111111111111111111111111111111111111111111110000 0000011111111111111111111111111111111111111111111111111111100000 0000000111111111111111111111111111111111111111111111111110000000 0000000011111111111111111111111111111111111111111111111100000000 0000000000011111111111111111111111111111111111111111100000000000 0000000000000111111111111111111111111111111111111110000000000000 0000000000000000111111111111111111111111111111110000000000000000 0000000000000000000001111111111111111111111000000000000000000000

כעת עלינו לחלק כל שורה ב- 8, המייצגת בתים ולשמור אותם במערך להלן:

static const unsigned char PROGMEM arduino_logo = {

B00000000, B00000000, B00000111, B11111111, B11111111, B11100000, B00000000, B00000000, B00000000, B00000000, B01111111, B11111111, B11111111, B11111110, B00000000, B00000000,… // להמשיך עד סוף התמונה};

לאחר מכן נוכל לצייר אותו בתצוגה על ידי קריאה לפונקציית drawBitmap.

display.drawBitmap (32, 16, arduino_logo, 64, 32, WHITE);

שלב 11: פתרון בעיות

זו הייתה הדרכה ארוכה ולכן סביר מאוד שמשהו משתבש. להלן רשימת השגיאות הנפוצות שבהן אתה עלול להיתקל בעת הגדרת מודול תצוגה של OLED לפרויקט שלך (חלקן קרו לי בזמן הכנת הדרכה זו).

שום דבר לא מוצג כלל

זה יכול לקרות מסיבות רבות ולכן אני מציע לבדוק את הרשימה הבאה שתתאים לפי הפרויקט שלך:

כנראה שכתובת I2C שגויה

וודא שהגדרת את הכתובת שקיבלת בקוד סורק i2c בפונקציית display.begin () בעת הגדרת אובייקט התצוגה שלך.

SCL ו- SDA מחוברים בצורה לא נכונה

זה קרה לי בפועל. אם אתה משתמש ב- Arduino Uno, עליך לבדוק שוב את החיבורים שלך כדי לוודא שהם מחוברים זהים לשלי. אם אתה משתמש במהדורת ארדואינו אחרת (למשל מגה, לאונרדו וכו '), עליך לדעת כי ייתכן שה- I2C שלהם מוגדר לפינים אחרים. אתה יכול לבדוק זאת בתיעוד של ספריית Wire.

אתה מוציא משהו מהאזור הגלוי

זוהי בעיית תוכנה. זה מאוד נפוץ כשמשתמשים בפונקציות ציור לחישוב טעות של קואורדינטות ולכן הציור שלך יתעוות או שבתרחיש הגרוע ביותר הוא עשוי להיות לגמרי מחוץ לזירה. בדוק את החישובים שלך ונסה לצייר צעד אחר צעד ציור כדי לראות מה קורה.

הטקסט אינו מוצג כלל

שכחת להגדיר את צבע הטקסט או שהגדרת אותו לערך שגוי

עליך להתקשר ל- setTextColor לפני ציור טקסטים. אחרת אין לך שגיאות, אך לא תראה דבר המוצג. ייתכן גם שהגדרת את צבע הטקסט זהה לצבע הרקע.

אתה משתמש בפונט גדול מאוד

אם תגדיר את גודל הטקסט לערך גדול מאוד, יתכן שתווים יוצאים לגמרי מהאזור הגלוי.

יש שגיאת הידור לגבי גודל התצוגה

זה קרה גם לי ואני חושב שזה יקרה עבור רובכם. זה בגלל הערכים הקבועים של גודל התצוגה המוגדרים בתוך קובץ הכותרת Adafruit_SSD1306.h שאנו כוללים מעל התסריט שלנו. קובץ זה ממוקם בכתובת {your-project-folder} libraries / Adafruit_SSD1306 / Adafruit_SSD1306.h. אם תפתח קובץ זה תוכל להבחין כי יש קטע הערות להלן שבו הוא מתאר שאתה צריך לבטל תגובה רק על הקבוע המייצג את גודל מודול התצוגה של OLED שלך. עבור מודולי תצוגה של 128x64, השורה #define SSD1306_128_64 צריכה להיות ללא תגובה.

/*=====================================================================

תצוגות SSD1306 ------------------------------------------------ ---------------------- מנהל ההתקן משמש במספר תצוגות (128x64, 128x32 וכו '). בחר את התצוגה המתאימה למטה כדי ליצור מאגר מסגרות בגודל מתאים וכו 'SSD1306_128_64 תצוגת 128x64 פיקסלים SSD1306_128_32 צג 128x32 פיקסלים SSD1306_96_16 --------------------------- --------------------------------------------* / #define SSD1306_128_64 / / #define SSD1306_128_32 // #define SSD1306_96_16 /*======================================== ===============================*/

שלב 12: מה לעשות הלאה?

צג OLED כמודול פלט יכול לתת לך הזדמנות מצוינת לספק ממשק בעל מראה מקצועי לפרויקטים של התחביב שלך. אתה יכול לנסות לעקוב אחר רעיונות כנקודת מוצא להצגת נתונים משמעותיים עליהם או לעזור למשתמש לדעת מה קורה או אם הוא/היא צריכים לעשות משהו. למשתמש יהיה הרבה יותר ברור לקרוא הודעה בתצוגה מאשר לפרש את מצב הפרויקט/מכשיר באמצעות כמה נוריות LED.

מה שאתה יכול לעשות כנקודת מוצא יכול להיות:

  • קרא ערך חיישן טמפרטורה והצג אותו במודול OLED. אתה יכול להוסיף לו חיישן לחץ או לחות וליצור פרויקט תחנת מזג אוויר פונקציונאלי לחלוטין.
  • נסה לצייר משהו על מודול התצוגה באמצעות מודול ג'ויסטיק כמכשיר קלט.
  • נסה לצייר אנימציה בתצוגה על ידי רצף של שיחות ציור/עיכוב פונקציות או הפסקת Arduino
  • הצג את הלוגו המותאם אישית שלך בהפעלת המערכת שלך (במקום הלוגו של Adafruit)

אל תשכח לספר לי על הערות, מה היית עושה (או שכבר עשית) באמצעות מודול תצוגה של OLED.

מוּמלָץ: