- Απαιτούμενα υλικά:
- Γνωριμία με την ενότητα TFT LCD Screen:
- Βαθμονόμηση της οθόνης LCD TFT για οθόνη αφής:
- Συνδέσεις TFT LCD με Arduino:
- Προγραμματισμός του Arduino για TFT LCD:
- Εργαζόμενος:
Το Arduino πάντα βοηθούσε στην κατασκευή έργων εύκολα και τα έκανε πιο ελκυστικά. Ο προγραμματισμός μιας οθόνης LCD με επιλογή οθόνης αφής μπορεί να ακούγεται πολύπλοκη, αλλά οι βιβλιοθήκες και οι ασπίδες του Arduino το είχαν κάνει πολύ εύκολο. Σε αυτό το έργο θα χρησιμοποιήσουμε μια οθόνη Arduino TFT LCD 2,4 ιντσών για να φτιάξουμε τη δική μας αριθμομηχανή Arduino Touch Screen που θα μπορούσε να εκτελέσει όλους τους βασικούς υπολογισμούς όπως Προσθήκη, αφαίρεση, διαίρεση και πολλαπλασιασμός.
Απαιτούμενα υλικά:
- Arduino Uno
- 2,4 ιντσών TFT LCD Shield
- Μπαταρία 9V.
Γνωριμία με την ενότητα TFT LCD Screen:
Πριν πραγματικά βυθίσουμε στο έργο, είναι σημαντικό να γνωρίζουμε, πώς λειτουργεί αυτή η μονάδα TFT LCD 2.4 " και ποιοι είναι οι τύποι που υπάρχουν σε αυτό. Ας ρίξουμε μια ματιά στα pinouts αυτής της μονάδας οθόνης TFT LCD 2,4 ”.
Όπως μπορείτε να δείτε, υπάρχουν 28 ακίδες που θα ταιριάζουν απόλυτα σε οποιοδήποτε Arduino Uno / Arduino Mega Board. Μια μικρή ταξινόμηση αυτών των ακίδων δίνεται στον παρακάτω πίνακα.
Όπως μπορείτε να δείτε οι καρφίτσες μπορούν να ταξινομηθούν σε τέσσερις κύριες ταξινομήσεις, όπως LCD Command Pins, LCD Data Pin, SD Card Pin και Power Pins, Δεν χρειάζεται να γνωρίζουμε πολλά για τη λεπτομερή λειτουργία αυτών των καρφιτσών, καθώς θα πρέπει να τη βιβλιοθήκη μας Arduino.
Μπορείτε επίσης να βρείτε μια υποδοχή κάρτας SD στο κάτω μέρος της μονάδας που φαίνεται παραπάνω, η οποία μπορεί να χρησιμοποιηθεί για τη φόρτωση μιας κάρτας SD με αρχεία εικόνας bmp και αυτές οι εικόνες μπορούν να εμφανιστούν στην οθόνη TFT LCD χρησιμοποιώντας το πρόγραμμα Arduino.
Ένα άλλο σημαντικό πράγμα που πρέπει να σημειωθεί είναι το IC Interface. Υπάρχουν πολλοί τύποι μονάδων TFT που διατίθενται στην αγορά, ξεκινώντας από την αρχική μονάδα LCD Adafruit TFT έως φθηνούς κινεζικούς κλώνους. Ένα πρόγραμμα που λειτουργεί τέλεια για την ασπίδα Adafruit μπορεί να μην λειτουργεί το ίδιο για κινεζικά σκάφη ξεμπλοκαρίσματος. Έτσι, είναι πολύ σημαντικό να γνωρίζετε ποιοι τύποι οθόνης LCD κρατάτε στο χέρι. Αυτή η λεπτομέρεια πρέπει να ληφθεί από τον πωλητή. Εάν έχετε έναν φτηνό κλώνο όπως το δικό μου, τότε πιθανότατα χρησιμοποιεί το IC προγράμματος οδήγησης ili9341. Μπορείτε να ακολουθήσετε αυτό το TFT LCD interface με το Arduino tutorial για να δοκιμάσετε μερικά βασικά παραδείγματα προγραμμάτων και να νιώσετε άνετα με την οθόνη LCD. Δείτε επίσης τα άλλα έργα TFT LCD με το Arduino εδώ:
- Πώς να χρησιμοποιήσετε το LED NeoPixel Strip με Arduino και TFT LCD
- Έξυπνο ψηφιακό κλείδωμα κωδικού ελεγχόμενου τηλεφώνου χρησιμοποιώντας το Arduino
Βαθμονόμηση της οθόνης LCD TFT για οθόνη αφής:
Εάν σκοπεύετε να χρησιμοποιήσετε τη λειτουργία οθόνης αφής της μονάδας TFT LCD, τότε πρέπει να τη βαθμονομήσετε για να λειτουργήσει σωστά. Μια οθόνη LCD χωρίς βαθμονόμηση μπορεί να λειτουργήσει απίθανα, για παράδειγμα μπορεί να αγγίξετε σε ένα μέρος και το TFT μπορεί να ανταποκριθεί για ένα άγγιγμα σε κάποιο άλλο μέρος. Αυτά τα αποτελέσματα βαθμονομήσεων δεν θα είναι παρόμοια για όλους τους πίνακες και, ως εκ τούτου, μένετε μόνοι σας για να το κάνετε αυτό.
Ο καλύτερος τρόπος για τη βαθμονόμηση είναι να χρησιμοποιήσετε το πρόγραμμα παραδείγματος βαθμονόμησης (συνοδεύεται από βιβλιοθήκη) ή να χρησιμοποιήσετε τη σειριακή οθόνη για να εντοπίσετε το σφάλμα σας. Ωστόσο, για αυτό το έργο, δεδομένου ότι το μέγεθος των κουμπιών είναι μεγάλη βαθμονόμηση δεν θα πρέπει να είναι μεγάλο πρόβλημα και θα εξηγήσω επίσης πώς μπορείτε να βαθμονομήσετε την οθόνη σας στην ενότητα προγραμματισμού παρακάτω.
Συνδέσεις TFT LCD με Arduino:
Η οθόνη TFT LCD 2,4 ιντσών είναι ένα τέλειο Arduino Shield. Μπορείτε να σπρώξετε απευθείας την οθόνη LCD πάνω από το Arduino Uno και θα ταιριάζει απόλυτα με τους πείρους και θα γλιστρήσει. Ωστόσο, ως θέμα ασφάλειας, καλύψτε τον τερματικό προγραμματισμού του Arduino UNO με μια μικρή μονωτική ταινία, σε περίπτωση που το τερματικό έρθει σε επαφή με την οθόνη TFT LCD. Η LCD συναρμολογημένη στο UNO θα μοιάζει με αυτό παρακάτω.
Προγραμματισμός του Arduino για TFT LCD:
Χρησιμοποιούμε τη βιβλιοθήκη SPFD5408 για να λειτουργήσει αυτός ο κωδικός αριθμομηχανής arduino. Πρόκειται για μια τροποποιημένη βιβλιοθήκη Adafruit και μπορεί να λειτουργήσει απρόσκοπτα με το LCD TFT Module. Μπορείτε να ελέγξετε το πλήρες πρόγραμμα στο τέλος αυτού του άρθρου.
Σημείωση: Είναι πολύ σημαντικό για εσάς να εγκαταστήσετε αυτήν τη βιβλιοθήκη στο Arduino IDE ή σε αυτό το πρόγραμμα για να μεταγλωττίσετε χωρίς κανένα σφάλμα.
Για να εγκαταστήσετε αυτήν τη βιβλιοθήκη, μπορείτε απλά να κάνετε κλικ στον παραπάνω σύνδεσμο, ο οποίος θα σας μεταφέρει σε μια σελίδα Github. Εκεί κάντε κλικ στο κλώνο ή κατεβάστε και επιλέξτε "Λήψη ZIP". Θα ληφθεί ένα αρχείο zip.
Τώρα, ανοίξτε το Arduino IDE και επιλέξτε Σκίτσο -> Συμπερίληψη Librarey -> Προσθήκη βιβλιοθήκης.ZIP. Ένα παράθυρο του προγράμματος περιήγησης θα ανοίξει πλοηγηθείτε στο αρχείο ZIP και κάντε κλικ στο "OK". Θα πρέπει να παρατηρήσετε ότι "Βιβλιοθήκη προστέθηκε στις βιβλιοθήκες σας" στην κάτω αριστερή γωνία του Arduino, εάν είναι επιτυχής. Ένας λεπτομερής οδηγός για να κάνετε το ίδιο δίνεται στο Interfacing Tutorial.
Τώρα, μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα στο Arduino IDE σας και να το ανεβάσετε στο Arduino UNO για να λειτουργεί η Αριθμομηχανή οθόνης αφής. Πιο κάτω, εξήγησα τον κώδικα σε μικρά τμήματα.
Χρειαζόμαστε τρεις βιβλιοθήκες για να λειτουργήσει αυτό το πρόγραμμα. Και οι τρεις αυτές βιβλιοθήκες δόθηκαν στο αρχείο ZIP που κατεβάσατε από τον παραπάνω σύνδεσμο. Απλώς τα έχω συμπεριλάβει στον κώδικα όπως φαίνεται παρακάτω.
#περιλαμβάνω
Όπως ειπώθηκε νωρίτερα, πρέπει να βαθμονομήσουμε την οθόνη LCD για να λειτουργήσει όπως αναμενόταν, αλλά μην ανησυχείτε ότι οι τιμές που δίνονται εδώ είναι σχεδόν καθολικές. Οι μεταβλητές TS_MINX, TS_MINY, TS_MAXX και TS_MAXY αποφασίζουν τη βαθμονόμηση της οθόνης. Μπορείτε να παίξετε γύρω τους εάν πιστεύετε ότι η βαθμονόμηση δεν είναι ικανοποιητική.
# καθορισμός TS_MINX 125 # καθορισμός TS_MINY 85 # καθορισμός TS_MAXX 965 # καθορισμός TS_MAXY 905
Όπως γνωρίζουμε ότι η οθόνη LCD TFT μπορεί να εμφανίσει πολλά χρώματα, όλα αυτά τα χρώματα πρέπει να εισαχθούν σε δεκαεξαδική τιμή. Για να το κάνουμε πιο αναγνώσιμο από τον άνθρωπο, εκχωρούμε αυτές τις τιμές σε μια μεταβλητή όπως φαίνεται παρακάτω
#define ΛΕΥΚΟ 0x0000 // Μαύρο-> Λευκό # ορίστε ΚΙΤΡΙΝΟ 0x001F // Μπλε-> Κίτρινο # καθορισμός CYAN 0xF800 // Κόκκινο-> Κυανό # καθορισμό PINK 0x07E0 // Πράσινο-> Ροζ #define ΚΟΚΚΙΝΟ 0x07FF // Κυανό -> Κόκκινο #define ΠΡΑΣΙΝΟ 0xF81F // Ροζ -> Πράσινο # καθορισμό ΜΠΛΕ 0xFFE0 // Κίτρινο-> Μπλε # καθορισμό ΜΑΥΡΟ 0xFFFF // Λευκό-> Μαύρο
Εντάξει τώρα, μπορούμε να μπει στο τμήμα προγραμματισμού. Υπάρχουν τρία τμήματα που εμπλέκονται σε αυτό το πρόγραμμα. Κάποιος δημιουργεί ένα περιβάλλον εργασίας υπολογιστή με κουμπιά και οθόνη. Στη συνέχεια, εντοπίζοντας τα κουμπιά με βάση τους χρήστες αγγίζουν και τελικά υπολογίζουν τα αποτελέσματα και τα εμφανίζουν. Ας τα περάσουμε ένα προς ένα.
1. Δημιουργία διεπαφής χρήστη αριθμομηχανής:
Εδώ μπορείτε να χρησιμοποιήσετε πολύ τη δημιουργικότητά σας για να σχεδιάσετε το περιβάλλον εργασίας χρήστη της αριθμομηχανής. Απλώς έφτιαξα μια βασική διάταξη αριθμομηχανής με 16 κουμπιά και μία μονάδα οθόνης. Πρέπει να φτιάξετε το σχέδιο όπως ακριβώς θα σχεδιάσετε κάτι στο χρώμα MS. Οι βιβλιοθήκες που προστέθηκαν θα σας επιτρέψουν να σχεδιάσετε γραμμές, ορθογώνιο, κύκλους, χαρακτήρες, χορδές και πολλά άλλα από οποιοδήποτε προτιμώμενο χρώμα. Μπορείτε να κατανοήσετε τις διαθέσιμες λειτουργίες από αυτό το άρθρο.
Έχω χρησιμοποιήσει τις ικανότητες σχεδίασης γραμμής και κουτιού για να σχεδιάσω μια διεπαφή χρήστη που μοιάζει πολύ με την αριθμομηχανή της δεκαετίας του '90. Κάθε κουτί έχει πλάτος και ύψος 60 pixel.
// Σχεδιάστε το πλαίσιο αποτελεσμάτων tft.fillRect (0, 0, 240, 80, CYAN); // Σχεδίαση πρώτης στήλης tft.fillRect (0,260,60,60, RED); tft.fillRect (0,200,60,60, ΜΑΥΡΟ); tft.fillRect (0,140,60,60, ΜΑΥΡΟ); tft.fillRect (0,80,60,60, ΜΑΥΡΟ); // Σχεδίαση τρίτης στήλης tft.fillRect (120,260,60,60, GREEN); tft.fillRect (120.200, 60,60, ΜΑΥΡΟ); tft.fillRect (120,140,60,60, ΜΑΥΡΟ); tft.fillRect (120,80,60,60, ΜΑΥΡΟ); // Σχεδίαση Secound & Fourth Column for (int b = 260; b> = 80; b- = 60) {tft.fillRect (180, b, 60,60, BLUE); tft.fillRect (60, b, 60,60, BLACK);} // Σχεδιάστε οριζόντιες γραμμές για (int h = 80; h <= 320; h + = 60) tft.drawFastHLine (0, h, 240, WHITE); // Σχεδίαση κάθετων γραμμών για (int v = 0; v <= 240; v + = 60) tft.drawFastVLine (v, 80, 240, WHITE); // Εμφάνιση ετικετών πληκτρολογίου για (int j = 0; j <4; j ++) {για (int i = 0; i <4; i ++) {tft.setCursor (22 + (60 * i), 100 + (60 * ι)) tft.setTextSize (3); tft.setTextColor (ΛΕΥΚΟ); tft.println (σύμβολο);
2. Ανίχνευση των κουμπιών:
Μια άλλη δύσκολη εργασία είναι να εντοπίσετε το άγγιγμα του χρήστη. Κάθε φορά που ο χρήστης αγγίζει κάπου θα μπορούμε να μάθουμε πώς η θέση X και Y του pixel που άγγιξε. Αυτή η τιμή μπορεί να εμφανιστεί στη σειριακή οθόνη χρησιμοποιώντας το println όπως φαίνεται παρακάτω.
TSPoint p = waitTouch (); X = py; Y = px; Serial.print (X); Serial.print (','); Serial.println (Y); // + "" + Y);
Εφόσον έχουμε σχεδιάσει το κουτί με πλάτος και ύψος 60 pixel το καθένα και έχουμε τέσσερις σειρές και για στήλες ξεκινώντας από (0,0). Η θέση κάθε κουτιού μπορεί να προβλεφθεί όπως φαίνεται στην παρακάτω εικόνα.
Αλλά στην πράξη, αυτό δεν θα είναι το αποτέλεσμα. Θα υπάρξει μεγάλη διαφορά μεταξύ της αναμενόμενης και της πραγματικής τιμής, λόγω του προβλήματος βαθμονόμησης.
Έτσι, για να προβλέψετε την ακριβή θέση του κουτιού, πρέπει να κάνετε κλικ στη γραμμή και να ελέγξετε την αντίστοιχη θέση του στη σειριακή οθόνη. Αυτός μπορεί να μην είναι ο πιο επαγγελματικός τρόπος για να το κάνετε, αλλά εξακολουθεί να λειτουργεί τέλεια. Μέτρησα τη θέση όλων των γραμμών και έλαβα τις παρακάτω τιμές.
Τώρα, αφού γνωρίζουμε τη θέση όλων των κουτιών. Όταν ένας χρήστης αγγίζει οπουδήποτε μπορούμε να προβλέψουμε πού έχει αγγίξει συγκρίνοντας τις τιμές του (X, Y) με την τιμή για κάθε πλαίσιο όπως φαίνεται παρακάτω.
if (X <105 && X> 50) // Ανίχνευση κουμπιών στη στήλη 2 {if (Y> 0 && Y <85) {Serial.println ("Button 0"); // Το κουμπί 0 πατάται αν (Αριθμός == 0) Αριθμός = 0; αλλιώς Αριθμός = (Αριθμός * 10) + 0; // Πιέστηκε δύο φορές} εάν (Y> 85 && Y <140) {Serial.println ("Button 2"); εάν (Αριθμός == 0) Αριθμός = 2; αλλιώς Αριθμός = (Αριθμός * 10) + 2; // Πιέστηκε δύο φορές}
3. Εμφάνιση αριθμών και υπολογισμός του αποτελέσματος:
Το τελευταίο βήμα είναι να υπολογίσετε το αποτέλεσμα και να τα εμφανίσετε στην οθόνη LCD TFT. Αυτός ο υπολογιστής arduino μπορεί να εκτελέσει λειτουργία μόνο με 2 αριθμούς. Αυτοί οι δύο αριθμοί ονομάζονται ως μεταβλητές "Num1" και "Num2". Η μεταβλητή "Number" δίνει και παίρνει αξία από Num1 και Num2 και φέρει επίσης το αποτέλεσμα.
Όταν μια χρήση πιέζει ένα κουμπί, ένα ψηφίο προστίθεται στον αριθμό. Όταν πατηθεί άλλο κουμπί, το προηγούμενο ψηφίο πολλαπλασιάζεται με 10 και ο νέος αριθμός προστίθεται μαζί του. Για παράδειγμα, αν πατήσουμε 8 και στη συνέχεια πιέστε 5 και στη συνέχεια πιέστε 7. Στη συνέχεια, πρώτα η μεταβλητή θα κρατήσει 8 τότε (8 * 10) + 5 = 85 τότε (85 * 10) +7 = 857. Τελικά, η μεταβλητή θα έχει η τιμή 857 μαζί της.
εάν (Y> 192 && Y <245) {Serial.println ("Button 8"); εάν (Αριθμός == 0) Αριθμός = 8; αλλιώς Αριθμός = (Αριθμός * 10) + 8; // Πιέστηκε ξανά}
Όταν πραγματοποιούμε οποιαδήποτε λειτουργία όπως προσθήκη, όταν οι χρήστες πατούν το κουμπί προσθήκης, η τιμή από τον αριθμό θα μεταφερθεί στο Num1 και στη συνέχεια ο αριθμός θα γίνει μηδέν, ώστε να ετοιμαστεί να λάβει την είσοδο για τον δεύτερο αριθμό.
Όταν πατηθεί το Equal, η τιμή στο Number θα σταλεί στο Num2 και στη συνέχεια θα γίνει ο αντίστοιχος υπολογισμός (σε αυτήν την περίπτωση προσθήκη) και το αποτέλεσμα θα αποθηκευτεί ξανά στη μεταβλητή "Number".
Τέλος, αυτή η τιμή θα εμφανιστεί στην οθόνη LCD.
Εργαζόμενος:
Η εργασία αυτού του Arduino Touch Screen Calculator είναι απλή. Πρέπει να ανεβάσετε τον παρακάτω κωδικό στον Arduino και να τον ενεργοποιήσετε. Εμφανίζεται η αριθμομηχανή στην οθόνη LCD.
Τώρα, μπορείτε να εισαγάγετε οποιονδήποτε αριθμό και να εκτελέσετε τους υπολογισμούς σας. Περιορίζεται μόνο σε δύο τελεστές και μόνο χειριστή προς το παρόν. Αλλά, μπορείτε να τροποποιήσετε τον κώδικα για να έχετε πολλές επιλογές.
Πρέπει να πατήσετε το "C" για να καθαρίσετε την τιμή στην οθόνη κάθε φορά μετά την εκτέλεση ενός υπολογισμού. Ελπίζω να καταλάβατε το έργο και να απολαύσατε κάτι παρόμοιο. Αν έχετε αμφιβολίες, μη διστάσετε να τα δημοσιεύσετε σε φόρουμ ή στην παρακάτω ενότητα σχολίων. Τα λέμε την επόμενη φορά με ένα άλλο ενδιαφέρον έργο μέχρι τότε χαρούμενος υπολογιστής !!
Δείτε επίσης το βίντεο επίδειξης παρακάτω.