Πίνακας περιεχομένων:

Διασκέδαση με οθόνη OLED και Arduino: 12 βήματα (με εικόνες)
Διασκέδαση με οθόνη OLED και Arduino: 12 βήματα (με εικόνες)

Βίντεο: Διασκέδαση με οθόνη OLED και Arduino: 12 βήματα (με εικόνες)

Βίντεο: Διασκέδαση με οθόνη OLED και Arduino: 12 βήματα (με εικόνες)
Βίντεο: Leap Motion SDK 2024, Νοέμβριος
Anonim
Διασκέδαση με οθόνη OLED και Arduino
Διασκέδαση με οθόνη OLED και Arduino

Είμαι σίγουρος ότι σίγουρα έχετε ακούσει για την τεχνολογία οθόνης 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 (I στο τετράγωνο C) που αναπτύχθηκε από τη Philips στη δεκαετία του '80 ως δίαυλος ανταλλαγής δεδομένων που χρησιμοποιείται για τη μεταφορά δεδομένων μεταξύ της κεντρικής μονάδας επεξεργασίας (CPU) ή της μονάδας μικροελεγκτή (MCU) μιας συσκευής και περιφερειακά τσιπ. Βασικά απευθυνόταν σε τηλεοπτική εφαρμογή. Λόγω της απλότητάς του, έγινε τόσο δημοφιλές που μετά από λίγο έγινε ένας από τους κύριους μηχανισμούς μεταφοράς δεδομένων για CPU και MCU και περιφερειακές συσκευές που δεν είναι απαραίτητα μέρος της ίδιας πλακέτας PCB και συνδέονται με αυτό μέσω καλωδίου (π.χ. αισθητήρες, μονάδες οθόνης κλπ.).

Το I2C αποτελείται από ένα δίαυλο επικοινωνίας κατασκευασμένο από δύο σύρματα που υποστηρίζει αμφίδρομη μεταφορά δεδομένων μεταξύ μιας κύριας συσκευής και πολλών βοηθητικών συσκευών. Συνήθως ο κύριος κόμβος είναι υπεύθυνος για τον έλεγχο του διαύλου - ο οποίος στην πραγματικότητα γίνεται με τη δημιουργία ενός σήματος συγχρονισμού στη σειριακή σειρά ρολογιού (SCL). Είναι ένα σήμα που θα αποστέλλεται συνεχώς από τον κύριο κατά τη μεταφορά και όλοι οι άλλοι κόμβοι που συνδέονται με το δίαυλο θα το χρησιμοποιήσουν για να συγχρονίσουν την επικοινωνία τους και να ανιχνεύσουν την ταχύτητα του διαύλου. Τα δεδομένα μεταφέρονται μεταξύ του master και του slave μέσω μιας γραμμής σειριακών δεδομένων (SDA). Η ταχύτητα μετάδοσης μπορεί να φτάσει τα 3,4 Mbps. Όλες οι συσκευές που θέλουν να μεταφέρουν δεδομένα μέσω I2C θα πρέπει να έχουν μια μοναδική διεύθυνση και μπορούν να λειτουργούν ως πομπός ή δέκτης ανάλογα με τη λειτουργία της συσκευής. Για παράδειγμα, μια μονάδα οθόνης OLED είναι ένας δέκτης που δέχεται ορισμένα δεδομένα και τα εμφανίζει, ενώ ένας αισθητήρας θερμοκρασίας είναι ένας πομποδέκτης που στέλνει την καταγεγραμμένη θερμοκρασία μέσω διαύλου I2C. Κανονικά μια κύρια συσκευή είναι η συσκευή που ξεκινά μια μεταφορά δεδομένων στο δίαυλο και παράγει τα σήματα ρολογιού για να επιτρέψει τη μεταφορά. Κατά τη μεταφορά, οποιαδήποτε συσκευή απευθύνεται σε αυτόν τον κύριο θεωρείται υποτελής και διαβάζει αυτά τα δεδομένα.

Όταν ένας κόμβος θέλει να στείλει κάποια δεδομένα, το πρώτο byte των δεδομένων θα πρέπει να είναι η διεύθυνση του δέκτη και στη συνέχεια έρχονται τα πραγματικά δεδομένα. Αυτό σημαίνει ότι για να στείλουμε δεδομένα σε μια συσκευή εξόδου χρησιμοποιώντας I2C (π.χ. μονάδα οθόνης I2C OLED) θα πρέπει πρώτα να βρούμε τη διεύθυνση I2C του και αυτό θα κάνουμε πρώτα στα επόμενα βήματα.

Εάν ενδιαφέρεστε να μάθετε περισσότερα για τις λεπτομέρειες και τις θεωρίες σχετικά με το δίαυλο I2C, μπορείτε να χρησιμοποιήσετε τις ακόλουθες αναφορές:

www.i2c-bus.org

learn.sparkfun.com/tutorials/i2c

Βήμα 3: Απαιτούμενες ενότητες και εξαρτήματα

Απαιτούμενες ενότητες και εξαρτήματα
Απαιτούμενες ενότητες και εξαρτήματα
Απαιτούμενες ενότητες και εξαρτήματα
Απαιτούμενες ενότητες και εξαρτήματα
Απαιτούμενες ενότητες και εξαρτήματα
Απαιτούμενες ενότητες και εξαρτήματα

Εδώ μπορείτε να βρείτε τη λίστα των στοιχείων που θα χρειαστείτε για να ολοκληρώσετε αυτό το σεμινάριο:

σύνδεσμοι eBay:

  • 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 στο Arduino
Καλωδίωση μονάδας οθόνης OLED στο Arduino
Καλωδίωση μονάδας οθόνης OLED στο Arduino
Καλωδίωση μονάδας οθόνης OLED στο Arduino
Καλωδίωση μονάδας οθόνης OLED στο Arduino
Καλωδίωση μονάδας οθόνης OLED στο Arduino
Καλωδίωση μονάδας οθόνης OLED στο Arduino
Καλωδίωση μονάδας οθόνης OLED στο Arduino

Μια σημαντική σημείωση για τις συσκευές με δυνατότητα I2C είναι ότι ο τρόπος που πρέπει να τις συνδέσετε στο Arduino είναι όλοι ίδιοι. Αυτό συμβαίνει επειδή το Arduino εκτελεί την επικοινωνία I2C μόνο σε συγκεκριμένες ακίδες. Σε αυτό το σεμινάριο χρησιμοποιώ το Arduino Uno. Το Arduino Uno χρησιμοποιεί τον πείρο A5 ως SCK και τον Α4 ως SDA. Έτσι μπορούμε να συνδέσουμε τη μονάδα οθόνης OLED στο Arduino Uno όπως φαίνεται στη σχηματική προβολή. Όπως μπορείτε να παρατηρήσετε στην εικόνα που έχω τραβήξει από τη μονάδα οθόνης OLED, η σύνδεση για VCC και GND είναι διαφορετική από τη σχηματική προβολή. Θυμηθείτε να ελέγξετε τις ετικέτες των ακίδων στις μονάδες σας για να βεβαιωθείτε ότι τις συνδέετε με τον σωστό τρόπο.

Χρειαζόμαστε μόνο 4 ακίδες που πρέπει να συνδεθούν όπως παρακάτω:

Arduino VCC -> OLED Module VCC

Arduino GND -> OLED Module GND

Arduino 4 -> OLED Module SDA

Arduino 5 -> OLED Module SCK

Βήμα 5: Εύρεση της διεύθυνσης της ενότητας οθόνης

Εύρεση της διεύθυνσης της μονάδας εμφάνισης
Εύρεση της διεύθυνσης της μονάδας εμφάνισης

Ως πρώτο βήμα για τη σύνδεση σε μια συσκευή με δυνατότητα I2C, πρέπει να έχετε τη διεύθυνση της μονάδας. Για να το κάνετε αυτό, αφού συνδέσετε τη μονάδα στο Arduino σας, πρέπει απλώς να ανεβάσετε τον συνημμένο κώδικα, στο Arduino σας. Αυτός ο κώδικας ενσωματώνει τη βιβλιοθήκη Wire, μια βιβλιοθήκη που περιλαμβάνεται στο Arduino IDE και χειρίζεται την επικοινωνία I2C. Προσπαθεί να σαρώσει τις συνδεδεμένες συσκευές I2C και στέλνει τη διεύθυνση τους μέσω σειριακής θύρας στον υπολογιστή σας. Έτσι, μπορείτε να έχετε πρόσβαση στην έξοδο του μέσω του εργαλείου Serial Monitor στο 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 για την εμφάνιση δεδομένων σε αυτές τις μονόχρωμες οθόνες. Έτσι, πριν ξεκινήσουμε την κωδικοποίηση, πρέπει να εγκαταστήσουμε αυτήν τη βιβλιοθήκη μέσω της Διαχείρισης Βιβλιοθηκών (προσβάσιμη μέσω Sketch> Include Library> Manage Libraries … menu) στο Arduino IDE. Υπάρχει επίσης μια άλλη βιβλιοθήκη που ονομάζεται Adafruit GFX Library, η οποία χειρίζεται γραφικά πιο χαμηλού επιπέδου και χρησιμοποιείται εσωτερικά από το Adafruit SSD1306. Πρέπει να τα έχετε και τα δύο εγκατεστημένα στο Arduino IDE, όπως μπορείτε να δείτε στις εικόνες.

Βήμα 7: Αρχικοποίηση της μονάδας οθόνης

Αρχικοποίηση της μονάδας οθόνης
Αρχικοποίηση της μονάδας οθόνης

Η ενότητα σχεδίασης στην οθόνη είναι τυλιγμένη σε μια κλάση που ονομάζεται Adafruit_SSD1306. Ο ορισμός αυτής της κατηγορίας είναι στη βιβλιοθήκη Adafruit, οπότε πρέπει πρώτα να συμπεριλάβουμε αυτήν τη βιβλιοθήκη. Στη συνέχεια, πρέπει πρώτα να δώσουμε ένα παράδειγμα αυτής της κατηγορίας. Ο κατασκευαστής αυτής της κλάσης παίρνει τον αριθμό θύρας στον οποίο θα μπορούσε να γίνει επαναφορά της οθόνης που είναι ο ακροδέκτης 4 (συνδεδεμένος στο SCK). Αυτό το μέρος του κώδικα θα πρέπει να βρίσκεται στην αρχή του αρχείου (εκτός των ρυθμίσεων () και βρόχου ()).

#περιλαμβάνω

Adafruit_SSD1306 οθόνη (4).

Τώρα μέσα στη συνάρτηση setup () θα πρέπει να καλέσουμε τη λειτουργία έναρξης του αντικειμένου οθόνης περνώντας τη διεύθυνση I2C όπως παρακάτω (το SSD1306_SWITCHCAPVCC είναι μια σταθερή τιμή που καθορίζει τον τύπο πηγής ενέργειας στη βιβλιοθήκη):

void setup () {

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); } void loop () {} // loop μπορεί να είναι κενός προς το παρόν

Τώρα το αντικείμενο εμφάνισης είναι έτοιμο και μπορούμε να καλέσουμε τις λειτουργίες του (π.χ. display.write (), display.drawLine, κ.λπ.). Η σημαντική σημείωση είναι ότι κάθε φορά που σχεδιάζουμε κάτι καλώντας το αντικείμενο οθόνης, πρέπει να καλέσουμε τη λειτουργία display.display () για να πραγματοποιήσουμε το πραγματικό σχέδιο σε επίπεδο υλικού. Αυτό οφείλεται κυρίως στο γεγονός ότι οι λειτουργίες σχεδίασης που καλούμε, απλώς ενημερώνουν την αναπαράσταση "στη μνήμη" της οθόνης για λόγους απόδοσης. Στην πραγματικότητα αποθηκεύει τις αλλαγές στη μνήμη. Θα πρέπει λοιπόν να θυμόμαστε πάντα να καλούμε τη λειτουργία εμφάνισης () όταν τελειώσουμε να σχεδιάσουμε κάτι στην οθόνη.

display.write (…); // συνεχίζει να ενημερώνεται στη μνήμη

display.drawLine (…); // συνεχίζει να ενημερώνεται στη μνήμη. display.display (); // ξεπλένει όλες τις αλλαγές στο υλικό της οθόνης

Εάν προσπαθήσετε να ανεβάσετε τον κωδικό σας σε αυτό το βήμα, θα παρατηρήσετε ότι θα εμφανίζεται το λογότυπο της Adafruit Industries. Wonderσως αναρωτιέστε ποιος το ζήτησε να το σχεδιάσει! Στην πραγματικότητα αυτό κάνει η βιβλιοθήκη του Adafruit. Αρχικοποιεί τη μνήμη της μονάδας (η αναπαράσταση μνήμης του υλικού οθόνης) με το λογότυπο αυτής της εταιρείας. Εάν δεν θέλετε να το δείτε κατά τη διάρκεια της προετοιμασίας, μπορείτε να δοκιμάσετε να καλέσετε τη λειτουργία display.clearDisplay () αμέσως πριν καλέσετε το display.display () στη λειτουργία ρύθμισης. Αυτή η λειτουργία, όπως υποδηλώνει το όνομά της, καθαρίζει εντελώς την οθόνη.

#περιλαμβάνω

Adafruit_SSD1306 οθόνη (4). void setup () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay (); display.display (); } void loop () {}

Με βάση την τεκμηρίωση της βιβλιοθήκης Adafruit_SSD1306, μπορείτε να χρησιμοποιήσετε διαφορετικές λειτουργίες που παρέχονται από αυτήν την κλάση για να σχεδιάσετε ή να χειριστείτε άμεσα τα εικονοστοιχεία σε αυτήν. Στις επόμενες ενότητες θα προσπαθήσουμε να παρουσιάσουμε ένα παράδειγμα για καθένα από αυτά, ώστε να έχετε μια ιδέα για τον τρόπο λειτουργίας του. Τα περισσότερα από αυτά τα παραδείγματα θα εμφανίζουν ένα απλό στατικό περιεχόμενο, ώστε να μπορούμε να τα τοποθετήσουμε μέσα στη συνάρτηση setup () (μετά τον κώδικα αρχικοποίησης). Με αυτόν τον τρόπο θα εκτελείται μόνο μία φορά και παραμένει εκεί.

Βήμα 8: Εμφάνιση απλού κειμένου

Εμφάνιση απλού κειμένου
Εμφάνιση απλού κειμένου
Εμφάνιση απλού κειμένου
Εμφάνιση απλού κειμένου
Εμφάνιση απλού κειμένου
Εμφάνιση απλού κειμένου

Για την εμφάνιση ενός κειμένου, μπορούμε να χρησιμοποιήσουμε την απλή συνάρτηση display.println () της βιβλιοθήκης. Αποδέχεται το κείμενο ως συμβολοσειρά και προσπαθεί να το εμφανίσει. Είναι σημαντικό να γνωρίζουμε ότι πρέπει να πούμε στη βιβλιοθήκη πού θα παρουσιάσουμε το κείμενο στην οθόνη. Κάθε εικονοστοιχείο στην οθόνη έχει μια συντεταγμένη που καθορίζεται με Χ και Υ. Το Χ αυξάνεται από αριστερά προς τα δεξιά και το Υ αυξάνεται από πάνω προς τα κάτω. Η επάνω αριστερή γωνία της οθόνης είναι (X = 0, Y = 0) και η κάτω δεξιά γωνία είναι (X = 127, Y = 63). Σημείωσα τις συντεταγμένες των γωνιών στην πρώτη εικόνα. Μπορούμε να χρησιμοποιήσουμε τη λειτουργία display.setCursor () για να καθορίσουμε πού στην οθόνη πρόκειται να εμφανίσουμε το κείμενο.

Μια άλλη ιδιότητα του κειμένου είναι το χρώμα του. Μπορούμε να καθορίσουμε το χρώμα χρησιμοποιώντας το display.setTextColor () όπως εμφανίζεται στο ακόλουθο δείγμα.

display.clearDisplay ();

display.setTextColor (ΛΕΥΚΟ); display.setCursor (35, 30); display.println ("Hello World!"); 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 ();

// Ορίζει το χρώμα σε μαύρο με λευκό φόντο display.setTextColor (ΜΑΥΡΟ, ΛΕΥΚΟ). display.setCursor (25, 30); display.println ("Ανεστραμμένο κείμενο!"); display.display ();

Έχετε επίσης την επιλογή να ρυθμίσετε το μέγεθος του κειμένου χρησιμοποιώντας τη λειτουργία display.setTextSize (). Δέχεται έναν ακέραιο αριθμό ως μέγεθος. Όσο μεγαλύτερος είναι ο αριθμός, τόσο μεγαλύτερο θα είναι το κείμενο. Το μικρότερο μέγεθος είναι 1 που είναι το προεπιλεγμένο μέγεθος των κειμένων. Ο ακόλουθος κώδικας προσπαθεί να γράψει το γράμμα "Α" σε 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, χρώμα). Για παράδειγμα, ο ακόλουθος κώδικας σχεδιάζει διαγώνιες γραμμές στην οθόνη έτσι ώστε να σχηματίζουν ένα μεγάλο Χ:

display.clearDisplay ();

display.drawLine (0, 0, display.width () - 1, display.height () - 1, WHITE); display.drawLine (display.width () - 1, 0, 0, display.height () - 1, ΛΕΥΚΟ)? display.display ();

Μπορείτε να έχετε πρόσβαση στο πλάτος και το ύψος της οθόνης χρησιμοποιώντας τις λειτουργίες display.width () και display.height (). Με αυτόν τον τρόπο, ο κωδικός σας θα είναι ανεξάρτητος από το μέγεθος της οθόνης.

Σχέδιο ορθογωνίου

Η συνάρτηση σχεδίασης ορθογωνίου είναι display.drawRect (upperLeftX, aboveLeftY, πλάτος, ύψος, χρώμα). Ακολουθεί ο κώδικας που σχεδιάζει τρία ορθογώνια σε ορισμένα τυχαία μέρη:

display.clearDisplay ();

display.drawRect (100, 10, 20, 20, ΛΕΥΚΟ); display.fillRect (10, 10, 45, 15, ΛΕΥΚΟ); display.drawRoundRect (60, 20, 35, 35, 8, ΛΕΥΚΟ); display.display ();

Καλώντας το display.fillRect (upperLeftX, upperLeftY, πλάτος, ύψος, ΛΕΥΚΟ) μπορείτε να σχεδιάσετε ένα ορθογώνιο γεμάτο με καθορισμένο χρώμα. Επίσης η τρίτη συνάρτηση σε αυτό το παράδειγμα είναι display.drawRoundRect (upperLeftX, aboveLeftY, πλάτος, ύψος, cornerRadius, χρώμα) που όπως μπορείτε να δείτε στην εικόνα χρησιμοποιείται για να σχεδιάσετε ένα ορθογώνιο με στρογγυλές γωνίες. Δέχεται μια επιπλέον παράμετρο πριν από το χρώμα που είναι ένας ακέραιος αριθμός που υποδεικνύει την ακτίνα γωνίας. Όσο μεγαλύτερη είναι η τιμή, τόσο πιο στρογγυλή είναι η γωνία. Έχει επίσης μια αντίστοιχη λειτουργία πλήρωσης που ονομάζεται display.drawFillRoundRect που νομίζω ότι μπορείτε να μαντέψετε τι κάνει.

Κύκλος σχεδίασης

Η λειτουργία είναι display.drawCircle (centerX, centerY, ακτίνα, χρώμα). Εδώ είναι ένα παράδειγμα που σχεδιάζει ένα σχήμα χαμογελαστό:

display.drawCircle (60, 30, 30, ΛΕΥΚΟ);

display.fillCircle (50, 20, 5, ΛΕΥΚΟ); display.fillCircle (70, 20, 5, ΛΕΥΚΟ);

Όπως και τα ορθογώνια, μπορείτε να χρησιμοποιήσετε τη λειτουργία display.fillCircle για να σχεδιάσετε έναν κύκλο γεμάτο με το δεδομένο χρώμα.

Σχέδιο τρίγωνο

Αχ, πάλι μια συνάρτηση που ονομάζεται display.drawTriangle (poin1X, point1Y, point2X, point2Y, point3X, point3Y, color) και αντίστοιχη display.fillTriangle που σχεδιάζουν ένα γεμάτο τρίγωνο.

display.drawTriangle (24, 1, 3, 55, 45, 55, ΛΕΥΚΟ);

display.fillTriangle (104, 62, 125, 9, 83, 9, ΛΕΥΚΟ)

Σχεδιάστε ένα σημείο

Μπορείτε επίσης να χρωματίσετε ένα συγκεκριμένο σημείο (το οποίο ονομάζεται pixel) στην οθόνη μέσω της λειτουργίας display.drawPixel (pixelX, pixelY, χρώμα).

display.drawPixel (20, 35, ΛΕΥΚΟ);

display.drawPixel (45, 12, ΛΕΥΚΟ); display.drawPixel (120, 59, ΛΕΥΚΟ); display.drawPixel (97, 20, ΛΕΥΚΟ); display.drawPixel (35, 36, ΛΕΥΚΟ); display.drawPixel (72, 19, ΛΕΥΚΟ); display.drawPixel (90, 7, ΛΕΥΚΟ); display.drawPixel (11, 29, ΛΕΥΚΟ); display.drawPixel (57, 42, ΛΕΥΚΟ); display.drawPixel (69, 34, ΛΕΥΚΟ); display.drawPixel (108, 12, ΛΕΥΚΟ);

Βήμα 10: Σχεδίαση εικόνας

Σχέδιο εικόνας
Σχέδιο εικόνας
Σχέδιο εικόνας
Σχέδιο εικόνας

Η σχεδίαση μιας εικόνας είναι διαφορετική και λίγο περίπλοκη. Καθώς η μονάδα οθόνης είναι μονόχρωμη, πρέπει πρώτα να μετατρέψουμε την εικόνα μας σε μια μορφή που ονομάζεται μονόχρωμη bitmap (που ονομάζεται επίσης ασπρόμαυρη). Σε μια τέτοια μορφή, κάθε εικονοστοιχείο της εικόνας παρουσιάζεται με 0 ή 1. Το 1s αντιπροσωπεύει την ύπαρξη του χρώματος και το 0s σημαίνει κενό χώρο. Μπορείτε να δείτε ένα παράδειγμα του λογότυπου Arduino σε αυτήν τη μορφή πάνω από αυτήν την ενότητα. Η λειτουργία για τη σχεδίαση μιας εικόνας bitmap είναι η display.drawBitmap (topLeftX, topLeftY, imageData, πλάτος, ύψος, χρώμα). Η παράμετρος imageData είναι ένας πίνακας αριθμών σε byte. Κάθε byte έχει 8 bits, οπότε κάθε byte περιέχει τα δεδομένα των 8 pixel της εικόνας. Καθορίζοντας το πλάτος και το ύψος της εικόνας, η συνάρτηση drawBitmap θα γνωρίζει από ποιο bit ξεκινά η επόμενη σειρά εικονοστοιχείων.

Η λύση που επέλεξα να μετατρέψω την εικόνα μου σε αυτήν τη μορφή ήταν να χρησιμοποιήσω πρώτα έναν από τους διαδικτυακούς μετατροπείς "εικόνας σε ASCII" (π.χ. https://my.asciiart.club) για να μετατρέψω την εικόνα μου σε ένα σύνολο χαρακτήρων ASCII και στη συνέχεια να αντικαταστήσω οι χαρακτήρες που χρησιμοποιούνται για κενό χώρο κατά 0 και άλλοι κατά 1. Αυτό είναι που βλέπετε παρακάτω. Μπορείτε να σκεφτείτε κάθε 0 και 1 ως pixel στην οθόνη. Επομένως, το μέγεθος της εικόνας δεν πρέπει να υπερβαίνει το μέγεθος της οθόνης μας που είναι 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, αντιπροσωπεύοντας ένα byte και να τις αποθηκεύσουμε σε έναν πίνακα όπως παρακάτω:

static const unsigned char PROGMEM arduino_logo = {

B00000000, B00000000, B00000111, B11111111, B11111111, B11100000, B00000000, B00000000, B00000000, B00000000, B01111111, B11111111, B11111111, B11111110, B0000000000, του B0000000000, Στη συνέχεια, μπορούμε να το σχεδιάσουμε στην οθόνη καλώντας τη συνάρτηση drawBitmap.

display.drawBitmap (32, 16, arduino_logo, 64, 32, ΛΕΥΚΟ);

Βήμα 11: Αντιμετώπιση προβλημάτων

Αυτό ήταν ένα μακρύ σεμινάριο και έτσι είναι πολύ πιθανό ότι κάτι δεν πάει καλά. Ακολουθεί η λίστα με ορισμένα κοινά σφάλματα που μπορεί να αντιμετωπίσετε κατά τη ρύθμιση της μονάδας οθόνης OLED για το έργο σας (μερικά από αυτά συνέβησαν για μένα κατά την προετοιμασία αυτού του σεμιναρίου).

Τίποτα δεν εμφανίζεται καθόλου

Αυτό μπορεί να συμβεί για πολλούς λόγους, οπότε προτείνω να ελέγξετε την ακόλουθη λίστα που μπορεί να συμβεί στο έργο σας:

Η διεύθυνση I2C είναι πιθανώς λάθος

Βεβαιωθείτε ότι έχετε ορίσει τη διεύθυνση που πήρατε στον κωδικό σαρωτή i2c στη λειτουργία display.begin () κατά τη ρύθμιση του αντικειμένου εμφάνισης.

Το SCL και το SDA συνδέονται με λάθος τρόπο

Αυτό συνέβη στην πραγματικότητα για μένα. Εάν χρησιμοποιείτε το Arduino Uno, πρέπει να ελέγξετε ξανά τις συνδέσεις σας για να βεβαιωθείτε ότι συνδέονται ίδιες με τις δικές μου. Εάν χρησιμοποιείτε άλλη έκδοση Arduino (π.χ. Mega, Leonardo, κ.λπ.), πρέπει να γνωρίζετε ότι ενδέχεται να έχουν ορίσει το 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 pixel SSD1306_128_32 Οθόνη 128x32 pixel SSD1306_96_16 --------------------------- --------------------------------------------* / #define SSD1306_128_64 / / #define SSD1306_128_32 // #define SSD1306_96_16 /*======================================= ================================*/

Βήμα 12: Τι να κάνετε στη συνέχεια;

Η οθόνη OLED ως μονάδα εξόδου μπορεί να σας δώσει μια μεγάλη ευκαιρία να παρέχετε μια επαγγελματική εμφάνιση διεπαφής στα έργα σας για χόμπι. Μπορείτε να δοκιμάσετε να ακολουθήσετε τις ιδέες ως σημείο εκκίνησης για να εμφανίσετε σημαντικά δεδομένα σε αυτό ή να βοηθήσετε τον χρήστη να μάθει τι συμβαίνει ή εάν έπρεπε να κάνει κάτι. Θα ήταν πολύ σαφέστερο για έναν χρήστη να διαβάσει ένα μήνυμα σε μια οθόνη παρά να ερμηνεύσει την κατάσταση ενός έργου/συσκευής μέσω κάποιων LED.

Αυτό που μπορείτε να κάνετε ως σημείο εκκίνησης μπορεί να είναι:

  • Διαβάστε μια τιμή αισθητήρα θερμοκρασίας και εμφανίστε την στην μονάδα OLED. Μπορείτε να προσθέσετε αισθητήρα πίεσης ή υγρασίας σε αυτό και να δημιουργήσετε ένα πλήρως λειτουργικό έργο μετεωρολογικών σταθμών.
  • Προσπαθήστε να σχεδιάσετε κάτι στη μονάδα οθόνης χρησιμοποιώντας μια μονάδα χειριστηρίου ως συσκευή εισόδου.
  • Προσπαθήστε να σχεδιάσετε μια κίνηση στην οθόνη με μια ακολουθία σχεδίασης/καθυστέρησης κλήσεων λειτουργίας ή διακοπή Arduino
  • Εμφάνιση του προσαρμοσμένου λογότυπού σας κατά την εκκίνηση του συστήματός σας (αντί για το λογότυπο Adafruit)

Μην ξεχάσετε να μου πείτε για σχόλια, τι θα κάνατε (ή έχετε ήδη κάνει) χρησιμοποιώντας τη μονάδα οθόνης OLED.

Συνιστάται: