- Απαιτούμενα υλικά:
- Προαπαιτούμενα:
- Διάγραμμα κυκλώματος:
- Προγραμματισμός για Ξυπνητήρι:
- Προσομοίωση:
- Εργασία ψηφιακού ξυπνητηριού με χρήση PIC16F877A:
Η ψηφιακή επανάσταση που ξεκίνησε το 1950 αλλάζει όλες τις υπάρχουσες μηχανικές και αναλογικές ηλεκτρονικές δομές σε ψηφιακούς υπολογιστές. Δεδομένου ότι η ανάπτυξη της ψηφιακής ηλεκτρονικής ήταν εκθετική, σήμερα είναι σχεδόν αδύνατο για ένα άτομο να αντισταθεί στη χρήση οποιουδήποτε ηλεκτρονικού εξοπλισμού. Ξεκινώντας από το ξυπνητήρι που σας ξυπνά και τη φρυγανιέρα που σας σερβίρει πρωινό, όλα είναι μια συνεισφορά από τα ψηφιακά ηλεκτρονικά. Σκεφτόμαστε όλα αυτά είναι πραγματικά συναρπαστικό να προγραμματίζουμε τα δικά μας πράγματα που θα μπορούσαν να κάνουν απλές αλλά χρήσιμες εργασίες, όπως το Ξυπνητήρι που πρόκειται να οικοδομήσουμε σε αυτό το έργο με το PIC Microcontroller. Έχουμε δημιουργήσει προηγουμένως ξυπνητήρι με άλλους μικροελεγκτές:
- Ξυπνητήρι Raspberry Pi χρησιμοποιώντας RTC Module DS1307
- Ψηφιακό ρολόι με βάση το Arduino με συναγερμό
- Ξυπνητήρι με χρήση μικροελεγκτή ATmega32
Αυτό το ξυπνητήρι θα έχει οθόνη LCD 16x2 η οποία θα εμφανίζει την τρέχουσα ώρα και τον καθορισμένο χρόνο. Θα χρησιμοποιήσουμε μερικά κουμπιά για να ρυθμίσουμε την ώρα αφύπνισης όποτε απαιτείται. Η τρέχουσα ώρα θα παρακολουθείται χρησιμοποιώντας τη μονάδα DS3231 RTC και θα χρησιμοποιήσουμε την επικοινωνία IIC για να λάβουμε αυτές τις τιμές από τη μονάδα RTC. Έχουμε ήδη μάθει για το RTC module και πώς να το συνδέσουμε με το PIC. Συνεπώς, συνιστάται να διαβάσετε αυτό το σεμινάριο, θα παραλείψουμε τις περισσότερες από τις πληροφορίες που καλύπτονται σε αυτό το σεμινάριο.
Απαιτούμενα υλικά:
- Πίνακας Ψωμιού - 2Nos
- PIC16F877Α
- Πηγή ισχύος 5V - Μονάδα τροφοδοσίας
- 20 MHz κρύσταλλο
- Πυκνωτής 33pf - 2Nos
- Μονάδα DS3231 RTC
- Μονάδα οθόνης LCD 16 * 2
- 10Κ ΔΟΧΕΙΟ
- 10k και 1K αντίσταση
- Πιέστε τα κουμπιά - 5Nos
- Βομβητής
- Σύνδεση καλωδίων
Προαπαιτούμενα:
Αυτό το έργο απαιτεί να γνωρίζετε λίγα βασικά στοιχεία για τον μικροελεγκτή PIC και πώς να το προγραμματίσετε. Για αυτό το έργο θα χρησιμοποιήσουμε GPIO, οθόνη LCD και RTC. Επομένως, είναι καλύτερο να μάθετε πώς να χρησιμοποιείτε αυτές τις ενότητες εκ των προτέρων. Οι παρακάτω σύνδεσμοι θα σας βοηθήσουν να μάθετε το ίδιο
- Σύνταξη του πρώτου σας προγράμματος με τον PIC Microcontroller
- Διασύνδεση LCD με PIC
- Επικοινωνία I2C χρησιμοποιώντας PIC
- DS3231 RTC διασύνδεση με PIC
Διάγραμμα κυκλώματος:
Το διάγραμμα κυκλώματος για αυτό το Alarm Clock Project που βασίζεται σε PIC φαίνεται παρακάτω, το οποίο δημιουργήθηκε χρησιμοποιώντας το λογισμικό πρωτεΐνης. Το θα χρησιμοποιηθεί επίσης για περαιτέρω προσομοίωση σε αυτό το έργο.
Τα πέντε κουμπιά θα λειτουργήσουν ως είσοδος για τη ρύθμιση του συναγερμού για τον απαιτούμενο χρόνο. Έτσι, το ένα άκρο όλων των μπουτόν συνδέεται με τη γείωση και τα άλλα άκρα συνδέονται με τον πείρο PORTB, θα χρησιμοποιηθεί εσωτερική αντίσταση έλξης πάνω σε αυτούς τους πείρους για να αποφευχθεί η επιπλέωση των πείρων. Το Buzzer θα λειτουργήσει ως έξοδος και θα μας δώσει ένα ηχητικό σήμα όταν ενεργοποιηθεί ο συναγερμός και είναι συνδεδεμένος στον ακροδέκτη PORT S. Η τρέχουσα ώρα παρακολουθείται πάντα από τη μονάδα DS3231 RTC από την οποία το PIC λαμβάνει τα δεδομένα μέσω διαύλου I2C, οπότε οι ακροδέκτες SCL και SDA της μονάδας RTC συνδέονται με τον ακροδέκτη SCL και SDA του ελεγκτή PIC. Μια οθόνη LCD είναι συνδεδεμένη στο PORTD του PIC που χρησιμοποιείται για την εμφάνιση της τρέχουσας ώρας και του καθορισμένου χρόνου. Μάθετε περισσότερα σχετικά με τη χρήση της μονάδας DS3231 RTC με PIC εδώ.
Το πλήρες κύκλωμα μπορεί να κατασκευαστεί πάνω από ένα breadboard. Επειδή υπάρχουν μερικά ντουζίνα καλώδια για σύνδεση, απλώς υπομονή και βεβαιωθείτε ότι οι συνδέσεις είναι σωστές. Η εγκατάσταση του υλικού μου έμοιαζε κάπως έτσι παρακάτω όταν τελείωσα με τις συνδέσεις
Έχω χρησιμοποιήσει μια μονάδα breadboard και έναν προσαρμογέα 12V για να τροφοδοτήσω τη μονάδα. Αυτή είναι η πηγή τάσης τροφοδοσίας + 5V. Επίσης πρέπει να χρησιμοποιήσω δύο ψωμιά για να διατηρήσω το κύκλωμα καθαρό. Μπορείτε επίσης να κολλήσετε ολόκληρο το κύκλωμα σε μια πλακέτα perf εάν θέλετε να κάνετε πιο στιβαρό έργο.
Προγραμματισμός για Ξυπνητήρι:
Το πλήρες πρόγραμμα PIC για αυτό το έργο Ξυπνητήρι βρίσκεται στο κάτω μέρος αυτής της σελίδας. Αυτό το έργο απαιτεί επίσης τρεις βιβλιοθήκες για τη χρήση LCD, I2C και RTC με PIC. Μπορείτε να κατεβάσετε τον πλήρη κώδικα με αρχεία κεφαλίδας από το αρχείο ZIP εδώ και να το ανοίξετε χρησιμοποιώντας το MPLABX μετά την εξαγωγή. Παρακάτω εξηγώ απλώς το κύριο αρχείο c ως μικρά αποσπάσματα. Μπορείτε να επιστρέψετε στα προαναφερθέντα σεμινάρια εάν θέλετε να μάθετε πώς λειτουργούν τα αρχεία κεφαλίδας.
Πριν μπείτε στο κύριο πρόγραμμα, πρέπει να ορίσετε τις καρφίτσες που έχουμε χρησιμοποιήσει με πιο νόημα όνομα. Με αυτόν τον τρόπο θα είναι εύκολο να τα χρησιμοποιήσετε κατά τον προγραμματισμό. Οι καρφίτσες που ορίζονται στο πρόγραμμά μας φαίνονται παρακάτω
// Καθορισμός των καρφιτσών LCD #define RS RD2 // Επαναφορά καρφίτσας LCD #define EN RD3 // Ενεργοποίηση ακίδας LCD #define D4 RD4 // Bit δεδομένων 0 της LCD #define D5 RD5 // Bit δεδομένων 1 της οθόνης LCD #define D6 RD6 // Bit δεδομένων 2 της οθόνης LCD # καθορισμός D7 RD7 // Bit δεδομένων 3 της οθόνης LCD // Ορισμός κουμπιών # καθορισμός MB RB1 // Το μεσαίο κουμπί # καθορισμός LB RB0 // Αριστερό κουμπί # καθορισμός RB RB2 // Δεξί κουμπί # define UB RB3 // Upper Button #define BB RB4 // Κάτω κουμπί // Ορισμός Buzz #define BUZZ RD1 // Το Buzzer είναι συνδεδεμένο στο RD1
Μέσα στην κύρια λειτουργία ξεκινάμε δηλώνοντας τους ακροδέκτες εισόδου και εξόδου. Στο έργο μας το PORTB χρησιμοποιείται για μπουτόν που είναι μια συσκευή εισόδου, οπότε ορίζουμε τους ακροδέκτες τους ως εισόδους και το PORTD χρησιμοποιείται για LCD και βομβητή, οπότε ορίζουμε τους ακροδέκτες τους ως Έξοδο. Επίσης, ένας πείρος δεν πρέπει ποτέ να αφήνεται να επιπλέει, οι πείροι εισόδου / εξόδου πρέπει πάντα να συνδέονται είτε με τη Γείωση είτε με την τάση + 5V. Στην περίπτωσή μας για τα μπουτόν, οι ακίδες δεν θα συνδέονται με τίποτα όταν δεν πατηθεί το κουμπί, οπότε χρησιμοποιούμε μια εσωτερική αντίσταση έλξης που ρυθμίζει τον πείρο σε Υψηλή όταν δεν χρησιμοποιείται. Αυτό γίνεται χρησιμοποιώντας τους καταχωρητές ελέγχου όπως φαίνεται παρακάτω
TRISD = 0x00; // Ορίστε τις καρφίτσες Port D ως έξοδο για διασύνδεση LCD TRISB = 0xFF; // Οι διακόπτες δηλώνονται ως καρφίτσες εισόδου OPTION_REG = 0b00000000; // Ενεργοποίηση pull up Resistor στη θύρα B για διακόπτες BUZZ = 0; // Στροφή του βομβητή
Δεδομένου ότι έχουμε το αρχείο κεφαλίδας LCD και I2C συνδεδεμένο με το κύριο πρόγραμμα, μπορούμε να ξεκινήσουμε την αρχικοποίηση LCD καλώντας μια απλή λειτουργία. Το ίδιο μπορεί να γίνει και για την αρχικοποίηση του I2C. Εδώ ξεκινάμε την επικοινωνία I2C στα 100kHz, καθώς η μονάδα RTC λειτουργεί με 100kHz.
Lcd_Start (); // Αρχικοποιήστε την ενότητα LCD I2C_Initialize (100); // Αρχικοποιήστε το I2C Master με ρολόι 100KHz
Η παρακάτω συνάρτηση χρησιμοποιείται για να ορίσετε την ώρα και την ημερομηνία στη μονάδα RTC, μόλις οριστεί η ώρα και η ημερομηνία αφαιρέστε αυτήν τη γραμμή. Αλλιώς κάθε φορά που ξεκινάτε το πρόγραμμα, η ώρα και η ημερομηνία θα ρυθμίζονται ξανά και ξανά
// Αφαιρέστε το κάτω από το όριο μία φορά το χρόνο και την ημερομηνία που ορίζεται για πρώτη φορά. Set_Time_Date (); // ορίστε ώρα και ημερομηνία στην ενότητα RTC
Για να δείξουμε ότι το πρόγραμμα ξεκινά, εμφανίζεται μια μικρή οθόνη εισαγωγής που εμφανίζει το όνομα του έργου και το όνομα του ιστότοπου όπως φαίνεται παρακάτω
// Δώστε ένα εισαγωγικό μήνυμα στην οθόνη LCD Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Ξυπνητήρι"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("-Παράσταση κυκλώματος"); __delay_ms (1500);
Δίπλα στο εσωτερικό του , ενώ βρόχο θα πρέπει να διαβάσετε την τρέχουσα ώρα και την ημερομηνία από την ενότητα RTC, αυτό μπορεί να γίνει με ένα απλό τηλεφώνημα η παρακάτω λειτουργία.
Ενημέρωση_Current_Date_Time (); // Διαβάστε την τρέχουσα ημερομηνία και ώρα από τη μονάδα RTC
Κλήση της παραπάνω συνάρτησης θα ενημερώσει τις μεταβλητές δευτερόλεπτα, λεπτά και ώρα με την τρέχουσα τιμή. Για να τα εμφανίσουμε στην οθόνη LCD πρέπει να τα χωρίσουμε σε μεμονωμένους χαρακτήρες χρησιμοποιώντας τον παρακάτω κώδικα.
// Διαχωρίστε το σε char για εμφάνιση στο lcd char sec_0 = sec% 10; char sec_1 = (δευτ. / 10); char min_0 = min% 10; char min_1 = min / 10; char hour_0 = ώρα% 10; char hour_1 = ώρα / 10;
Στη συνέχεια, ενημερώνουμε τις τιμές στην οθόνη LCD. Ο τρέχων χρόνος θα εμφανιστεί στην πρώτη γραμμή και ο καθορισμένος χρόνος κατά τον οποίο πρέπει να ενεργοποιηθεί ο συναγερμός εμφανίζεται στη δεύτερη γραμμή. Ο κωδικός που κάνει το ίδιο φαίνεται παρακάτω.
// Εμφάνιση της τρέχουσας ώρας στην οθόνη LCD Lcd_Clear (); Lcd_Set_Cursor (1, 1); Lcd_Print_String ("ΩΡΑ:"); Lcd_Print_Char (ώρα_1 + '0'); Lcd_Print_Char (ώρα_0 + '0'); Lcd_Print_Char (':'); Lcd_Print_Char (min_1 + '0'); Lcd_Print_Char (min_0 + '0'); Lcd_Print_Char (':'); Lcd_Print_Char (δευτ. 1 + '0'); Lcd_Print_Char (sec_0 + '0'); // Εμφάνιση της ημερομηνίας στην οθόνη LCD Lcd_Set_Cursor (2, 1); Lcd_Print_String ("Συναγερμός:"); Lcd_Print_Char (alarm_val + '0'); Lcd_Print_Char (alarm_val + '0'); Lcd_Print_Char (':'); Lcd_Print_Char (alarm_val + ')0 '); Lcd_Print_Char (alarm_val + '0');
Τώρα, εμφανίσαμε την ώρα και ορίσαμε την ώρα στην οθόνη LCD, πρέπει να ελέγξουμε εάν ο χρήστης προσπαθεί να ρυθμίσει την ώρα αφύπνισης. Για να γίνει αυτό, ο χρήστης πρέπει να πατήσει το μεσαίο κουμπί, οπότε θα ελέγξουμε εάν το μεσαίο κουμπί είναι πατημένο και εναλλαγή μιας μεταβλητής για να μπει σε λειτουργία συναγερμού. Το ίδιο κουμπί θα πατηθεί ξανά για να επιβεβαιώσει ότι οι τιμές έχουν οριστεί και σε αυτήν την περίπτωση πρέπει να βγούμε από τη λειτουργία συναγερμού. Χρησιμοποιούμε λοιπόν την παρακάτω γραμμή κώδικα για να αλλάξουμε την κατάσταση της μεταβλητής set_alarm .
// Χρησιμοποιήστε το μεσαίο κουμπί για να ελέγξετε αν πρέπει να ρυθμιστεί το ξυπνητήρι εάν (MB == 0 && set_alarm == 0) {// Εάν πατηθεί το μεσαίο κουμπί και το ξυπνητήρι δεν είναι ενεργοποιημένο ενώ (! MB); // Περιμένετε έως ότου απελευθερωθεί το κουμπί set_alarm = 1; // έναρξη ρύθμισης τιμής συναγερμού } if (MB == 0 && set_alarm == 1) {// Εάν πατηθεί το μεσαίο κουμπί και ο συναγερμός δεν απενεργοποιηθεί ενώ (! MB); // Περιμένετε έως ότου απελευθερωθεί το κουμπί set_alarm = 0; // διακοπή ρύθμισης τιμής συναγερμού }
Εάν ο χρήστης έχει πατήσει το μεσαίο κουμπί, τότε σημαίνει ότι προσπαθεί να ρυθμίσει την ώρα αφύπνισης. Σε αυτήν την περίπτωση, το πρόγραμμα μπαίνει σε λειτουργία συναγερμού χρησιμοποιώντας τον παραπάνω κωδικό. Μέσα στη λειτουργία ρύθμισης συναγερμού εάν ο χρήστης πατήσει το αριστερό ή το δεξί κουμπί σημαίνει ότι πρέπει να μετακινήσουμε τον κέρσορα αριστερά ή δεξιά. Για να το κάνουμε αυτό, απλώς αυξάνουμε τη μείωση της τιμής της θέσης στην οποία πρέπει να τοποθετηθεί ο δρομέας
if (LB == 0) {// Εάν πατηθεί το αριστερό κουμπί ενώ (! LB); // Περιμένετε έως ότου απελευθερωθεί το κουμπί pos--; // Στη συνέχεια, μετακινήστε τον κέρσορα προς τα αριστερά } εάν (RB == 0) {// Εάν πατηθεί το δεξί κουμπί ενώ (! RB); // Περιμένετε έως ότου απελευθερωθεί το κουμπί pos ++; // Μετακίνηση του δρομέα προς τα δεξιά }
Κατά τη χρήση ενός μπουτόν με έναν μικροελεγκτή ή έναν μικροεπεξεργαστή υπάρχει ένα κοινό πρόβλημα που πρέπει να αντιμετωπιστεί. Αυτό το πρόβλημα ονομάζεται αναπήδηση διακόπτη. Αυτό είναι όταν πατηθεί το κουμπί μπορεί να δώσει θορυβώδεις παλμούς στο MCU / MPU που θα μπορούσαν να ψεύσουν το MCU για πολλές καταχωρήσεις. Αυτό το πρόβλημα μπορεί να επιλυθεί με την προσθήκη ενός πυκνωτή στον διακόπτη ή χρησιμοποιώντας μια λειτουργία καθυστέρησης μόλις εντοπιστεί το πάτημα του κουμπιού. Αυτός ο τύπος λύσης ονομάζεται αποσύνδεση. Εδώ έχουμε χρησιμοποιήσει ένα , ενώ βρόχου για να κρατήσει το πρόγραμμα στη θέση του μέχρι το κουμπί απελευθερώνεται. Αυτή δεν είναι η καλύτερη λύση κατάργησης, αλλά για εμάς θα λειτουργήσει μια χαρά.
ενώ (! RB);
Παρόμοια με το κουμπί αριστερά και δεξιά, έχουμε επίσης τα άνω και κάτω κουμπιά που μπορούν να χρησιμοποιηθούν για να αυξήσουν ή να μειώσουν την αξία του χρόνου συναγερμού. Ο κώδικας για να κάνετε το ίδιο φαίνεται παρακάτω. Παρατηρήστε ότι κάθε χαρακτήρας του καθορισμένου χρόνου αφύπνισης αντιμετωπίζεται από την τιμή ευρετηρίου του πίνακα. Αυτό ήταν που έχουμε εύκολη πρόσβαση στον απαιτούμενο χαρακτήρα του οποίου οι τιμές πρέπει να αλλάξουν.
if (UB == 0) {// Εάν πατηθεί το πάνω κουμπί ενώ (! UB); // Περιμένετε έως ότου απελευθερωθεί το κουμπί alarm_val ++; // Αυξήστε τη συγκεκριμένη τιμή char } εάν (BB == 0) {// Εάν πατηθεί το χαμηλότερο κουμπί ενώ (! UB); // Περιμένετε έως ότου απελευθερωθεί το κουμπί alarm_val--; // Μειώστε τη συγκεκριμένη τιμή char }
Μόλις οριστεί η ώρα αφύπνισης, ο χρήστης θα πατήσει ξανά το μεσαίο κουμπί. Τότε μπορούμε να ξεκινήσουμε τη σύγκριση της τρέχουσας ώρας με την καθορισμένη ώρα. Η σύγκριση ελέγχοντας εάν κάθε χαρακτήρας της τρέχουσας ώρας είναι ίσος με τον χαρακτήρα του καθορισμένου χρόνου. Εάν οι τιμές είναι ίσες τότε ενεργοποιούμε το συναγερμό ρυθμίζοντας τη μεταβλητή trigger_alarm αλλιώς συγκρίνουμε έως ότου γίνει ίσος.
// ΕΑΝ έχει οριστεί συναγερμός Ελέγξτε αν η τιμή ρύθμισης είναι ίση με την τρέχουσα τιμή εάν (set_alarm == 0 && alarm_val == hour_1 && alarm_val == hour_0 && alarm_val == min_1 && alarm_val == min_0) trigger_alarm = 1; // Ενεργοποιήστε τη σκανδάλη εάν η τιμή αντιστοιχεί
Εάν ο συναγερμός έχει ρυθμιστεί, πρέπει να ηχήσουμε τον βομβητή για να ειδοποιήσουμε τον χρήστη για συναγερμό. Αυτό μπορεί να γίνει με απλή εναλλαγή του Buzzer σε κανονικό διάστημα όπως φαίνεται παρακάτω.
if (trigger_alarm) {// Εάν ενεργοποιηθεί συναγερμός // Μπιπ το βομβητή BUZZ = 1; __delay_ms (500); BUZZ = 0; __delay_ms (500); }
Προσομοίωση:
Αυτό το πρόγραμμα μπορεί επίσης να προσομοιωθεί χρησιμοποιώντας το λογισμικό πρωτεΐνης. Απλώς δημιουργήστε ξανά το κύκλωμα που φαίνεται παραπάνω και φορτώστε το δεκαεξαδικό αρχείο στο PIC. Ο δεκαεξαδικός κώδικας για αυτό το έργο βρίσκεται στο αρχείο ZIP που συνδέεται εδώ. Ένα στιγμιότυπο οθόνης που τραβήχτηκε κατά την προσομοίωση φαίνεται παρακάτω
Η προσομοίωση γίνεται πολύ χρήσιμη όταν προσπαθείτε να προσθέσετε νέες δυνατότητες στο έργο. Μπορείτε επίσης να χρησιμοποιήσετε τη μονάδα εντοπισμού σφαλμάτων I2C για να ελέγξετε ποια δεδομένα εισέρχονται και εξέρχονται μέσω του διαύλου I2C. Μπορείτε να δοκιμάσετε να πατήσετε τα κουμπιά και επίσης να ρυθμίσετε την ώρα αφύπνισης. Όταν ο καθορισμένος χρόνος είναι ίσος με την τρέχουσα ώρα τότε ο βομβητής θα ανεβεί ψηλά.
Εργασία ψηφιακού ξυπνητηριού με χρήση PIC16F877A:
Δημιουργήστε το κύκλωμα στο breadboard, λάβετε τον κωδικό από το σύνδεσμο λήψης και μεταγλωττίστε το χρησιμοποιώντας μεταγλωττιστή MplabX και XC8. Εάν έχετε κατεβάσει τον κωδικό από το αρχείο ZIP που παρέχεται εδώ, τότε δεν θα πρέπει να έχετε πρόβλημα κατά τη σύνταξη του δεδομένου ότι τα αρχεία κεφαλίδας είναι ήδη συνδεδεμένα.
Μετά τη σύνταξη, ανεβάστε το πρόγραμμα στο υλικό σας χρησιμοποιώντας τον προγραμματιστή PicKit3 Η σύνδεση για τη σύνδεση του προγραμματιστή pickit στο PIC IC φαίνεται επίσης στο διάγραμμα κυκλώματος. Μετά τη μεταφόρτωση του προγράμματος θα πρέπει να δείτε την οθόνη εισαγωγής και, στη συνέχεια, την ώρα που εμφανίζεται, μπορείτε στη συνέχεια να χρησιμοποιήσετε τα κουμπιά για να ρυθμίσετε την ώρα αφύπνισης. Η ρύθμιση του υλικού μου όταν τροφοδοτείται μοιάζει παρακάτω.
Όταν ο χρόνος αφύπνισης ταιριάζει με την τρέχουσα ώρα, ο βομβητής θα αρχίσει να ηχεί για να ειδοποιήσει τον χρήστη. Η πλήρης εργασία βρίσκεται στο παρακάτω βίντεο. Το έργο διαθέτει πληθώρα επιλογών για να αξιοποιήσει. Η μονάδα RTC μπορεί να παρακολουθεί οποιαδήποτε ώρα και ημερομηνία, ώστε να μπορείτε να εκτελέσετε μια προγραμματισμένη εργασία ανά πάσα στιγμή / ημερομηνία που απαιτείται. Μπορείτε επίσης να συνδέσετε μια συσκευή AC, όπως έναν ανεμιστήρα ή ένα φως και να προγραμματίσετε την ενεργοποίηση ή απενεργοποίηση όταν απαιτείται. Υπάρχουν ακόμα πολλά περισσότερα που μπορείτε να δημιουργήσετε πάνω σε αυτό το έργο, επιτρέψτε μου να ξέρω ποια ιδέα έρχεται στο μυαλό σας ως αναβάθμιση σε αυτό το έργο και θα χαρώ να ακούσω από εσάς.
Ελπίζω να καταλάβατε το έργο και να μάθετε κάτι χρήσιμο από τη διαδικασία. Εάν έχετε αμφιβολίες σε αυτό το έργο χρησιμοποιήστε την ενότητα σχολίων για να τις δημοσιεύσετε ή χρησιμοποιήστε τα φόρουμ για οποιαδήποτε τεχνική βοήθεια.
Μπορείτε να βρείτε τον πλήρη κώδικα PIC με αρχεία κεφαλίδας εδώ