Εισαγωγή
Σε αυτό το tutorial θα δούμε πως μπορούμε να χρησιμοποιήσουμε ένα ψηφίο 7 segment display με το Arduino uno με σκοπό να τυπώσουμε σε αυτό μέσω της σειριακής οθόνης έναν αριθμό απ' το 1 μέχρι το 9. Αυτόν τον τύπο οθόνης το συναντάμε συχνά σε ψηφιακά ρολόγια, ξυπνητήρια, ακόμα και σε αγώνες μπάσκετ (πίνακας σκορ, αντίστροφη μέτρηση πάνω απ' το καλάθι) και ποδοσφαίρου (αλλαγή παίχτη). Το αποτέλεσμα μπορείτε να το δείτε και στο παρακάτω βίντεο.
Τι είναι ένα 7 segment display;
Μια οθόνη - ψηφίο 7 segment είναι ένα παραλληλόγραμμο πλαίσιο που ουσιαστικά αποτελείτε απο επτά LED. Κάθε LED ονομάζεται segment γιατί αναπαριστά μέρος του ψηφίου που μπορεί να εμφανιστεί μέσα σε αυτό. Επιπλέον υπάρχει ενα 8ο LED στην κάτω δεξιά γωνία που χρησιμοποιείτε ως τελεία, π.χ. για να αναπαραστήσει δεκαδικό αριθμό όταν υπάρχουν δυο (ή περισσότερα) ψηφία-οθόνες. Κάποια seven segment displays υποστηρίζουν και γράμματα εκτός απ' αριθμούς. Μπορείτε επίσης να τα βρείτε σε διάφορα χρώματα.
Όπως έχουμε ήδη σε προηγούμενο tutorial, κάθε LED έχει δυο ακροδέκτες, την άνοδο και την κάθοδο. Η άνοδος είναι το θετικό άκρο και η κάθοδος το αρνητικό αντίστοιχα. Υπάρχουν δυο τύποι 7 segment: κοινής ανόδου και κοινής καθόδου. Στα displays κοινής ανόδου, όλοι οι ακροδέκτες των LED είναι βραχυκυκλωμένοι μεταξύ τους, ενώ οι ακροδέκτες καθόδου του κάθε LED βγαίνουν απ' το πίσω μέρος αυτού. Το ανάποδο συμβαίνει με τα displays κοινής καθόδου. Κάθε LED έχει ένα όνομα απ' το A μέχρι το G, όπως φαίνεται και στις παραπάνω εικόνες, για να μπορούμε εύκολα να τα ξεχωρίσουμε απ' τα υπόλοιπα.
Στο συγκεκριμένο tutorial θα χρησιμοποιήσω ένα ψηφίο 7 segment display κοινής καθόδου. Αν εσείς έχετε διαφορετικό, μπορείτε να το χρησιμοποιήσετε κανονικά, το μόνο που θα χρειαστεί είναι μια αλλαγή στον κώδικα.
Όπως έχουμε ήδη σε προηγούμενο tutorial, κάθε LED έχει δυο ακροδέκτες, την άνοδο και την κάθοδο. Η άνοδος είναι το θετικό άκρο και η κάθοδος το αρνητικό αντίστοιχα. Υπάρχουν δυο τύποι 7 segment: κοινής ανόδου και κοινής καθόδου. Στα displays κοινής ανόδου, όλοι οι ακροδέκτες των LED είναι βραχυκυκλωμένοι μεταξύ τους, ενώ οι ακροδέκτες καθόδου του κάθε LED βγαίνουν απ' το πίσω μέρος αυτού. Το ανάποδο συμβαίνει με τα displays κοινής καθόδου. Κάθε LED έχει ένα όνομα απ' το A μέχρι το G, όπως φαίνεται και στις παραπάνω εικόνες, για να μπορούμε εύκολα να τα ξεχωρίσουμε απ' τα υπόλοιπα.
Στο συγκεκριμένο tutorial θα χρησιμοποιήσω ένα ψηφίο 7 segment display κοινής καθόδου. Αν εσείς έχετε διαφορετικό, μπορείτε να το χρησιμοποιήσετε κανονικά, το μόνο που θα χρειαστεί είναι μια αλλαγή στον κώδικα.
Τα υλικά που θα χρειαστείτε
Για το tutorial αυτό θα χρειαστείτε:Προτείνετε να χρησιμοποιήσετε και μια αντίσταση 220 Ohm σε κάθε ακροδέκτη-led του display.
|
Το κύκλωμα
Η συνδεσμολογία είναι αρκετά απλή. Όπως σας είπα μπορείτε να χρησιμοποιήσετε και μερικές αντιστάσεις, εγώ δεν το έκανα γιατί υπάρχει η δυνατότητα μέσω του κώδικα και της αντίστοιχης βιβλιοθήκης που θα κάνουμε χρήση να ελέγξουμε την φωτεινότητα του μειώνοντας την τάση στους ακροδέκτες, έτσι τα εσωτερικά led δεν καίγονται.
Συμπληρωματικά και με βάση την ονομασία του κάθε segment LED όπως είδαμε παραπάνω, η συνδεσμολογία είναι η παρακάτω:
Συμπληρωματικά και με βάση την ονομασία του κάθε segment LED όπως είδαμε παραπάνω, η συνδεσμολογία είναι η παρακάτω:
|
|
Ο κώδικας με την χρήση του Codebender
O κώδικας περιέχει όλα τα σχόλια που χρειάζονται για την κατανόηση του. Αν έχετε οθόνη κοινής ανόδου, πατήστε edit και σβήστε την γραμμή"disp.setCommonCathode();"
Συμπληρωματικά για την καλύτερη κατανόηση του προγράμματος:
Συμπληρωματικά για την καλύτερη κατανόηση του προγράμματος:
- numOfDigits = 1 Δείχνει οτι έχουμε ένα ψηφίο, αν είχαμε δύο θα ήταν ίσο με 2.
- digitPins[numOfDigitls]={4} Δείχνει οτι έχουμε συνδέσει την κοινή κάθοδο (cc pin) με το pin 4 του Arduino. Αν είχαμε και δέυτερο ψηφίο και την κοινή κάθοδο συνδεδεμένη με το pin 3 του Arduino τότε θα ήταν ίσο με {4,3}.
- disp.setDutyCycle(50) Ελέγχει την φωτεινότητα των led (ποσοστό)
- disp.writeDigit(number) Εκτυπώνει έναν αριθμό απο 0 μέχρι 9.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | /* Arduino Tutorial - 7 Segment One 7 segment is one digit, from 0 to 9. Dev: Vasilakis Michalis // Date: 25/7/2015 // www.ardumotive.com */ //Library #include "SevenSeg.h" //Defines the segments A-G: SevenSeg(A, B, C, D, E, F, G); SevenSeg disp (10,9,8,7,6,11,12); //Number of 7 segments const int numOfDigits =1; //CC(or CA) pins of segment int digitPins [numOfDigits]={4}; //Variables int number=0; //Default number int flag; void setup() { Serial.begin(9600); //Defines the number of digits to be "numOfDigits" and the digit pins to be the elements of the array "digitPins" disp.setDigitPins ( numOfDigits , digitPins ); //Only for common cathode 7segments disp.setCommonCathode(); //Control brightness (values 0-100); disp.setDutyCycle(50); } void loop() { //Check if incoming data is available: if (Serial.available() > 0) { // If it is, we'll use parseInt() to pull out only numbers: number = Serial.parseInt(); flag=0; } //Valid range is from 1 to 9 if (number>=1 && number<=9){ //Print number to 7 segment display disp.writeDigit(number); //Print message to serial monito only once if (flag==0){ //Print number to serial monitor Serial.print("Number on 7 segment display:"); Serial.println(number); flag=1; } } } |
Κατεβάστε τον κώδικα απ' εδώ και ανοίξτε το αρχείο με το Arduino IDE. Μέσα θα βρείτε και τις σχετικές βιβλιοθήκες.
|
|
Ανοίξτε την σειριακή οθόνη απ' το μενού εργαλεία του Arduino IDE, δοκιμάστε να στείλετε έναν αριθμό απ' το 1 μέχρι το 9.
Συγχαρητήρια!
Μπορείτε επίσης να δοκιμάστε να εκτυπώσετε ένα γράμμα, π.χ. το F, απλά αλλάξτε την γραμμή κώδικα disp.writeDigit(number); σε disp.writeNumber("F"); (άλλα γράμματα που μπορούν να εκτυπωθούν σε αυτόν τον τύπο 7 seg: b, d, A, E)
Ελπίζω να σας άρεσε, αν θέλετε μπορείτε να αφήσετε το σχόλιο σας παρακάτω.
Ελπίζω να σας άρεσε, αν θέλετε μπορείτε να αφήσετε το σχόλιο σας παρακάτω.