Πίνακας περιεχομένων:
- Βήμα 1: Διακοπή χειριστή
- Βήμα 2: Ορίστε περιοδικό χρονικό διάστημα
- Βήμα 3: Διακοπή εκκίνησης
- Βήμα 4: Πού να προσθέσετε τον κωδικό σας
Βίντεο: Arduino - Περιοδική διακοπή: 4 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:36
Αυτό το Instructable αφορά τη χρήση περιοδικής διακοπής για χρονισμό στα προγράμματα Arduino. Αυτό είναι ένα βήμα για έναν εκκολαπτόμενο προγραμματιστή Arduino που γνωρίζει ότι το Arduino μπορεί να κάνει περισσότερα, αλλά δεν ξέρει πώς να το κάνει αυτό.
Εάν υπάρχει πρόβλημα απόδοσης, υποθέτω ότι χρησιμοποιείτε μία ή περισσότερες συναρτήσεις καθυστέρησης (). Το κόλπο είναι να απαλλαγείτε από τη λειτουργία (ες) καθυστέρησης και να αντικαταστήσετε μια διακοπή. Η λειτουργία καθυστέρησης () αναγκάζει το Arduino να μην κάνει τίποτα ενώ περιμένει να ολοκληρωθεί η καθυστέρηση (). Η χρήση διακοπής επιτρέπει στο πρόγραμμά σας να κάνει άλλα πράγματα περιμένοντας το τέλος της καθυστέρησης. Συνήθως υπάρχει ένας τεράστιος αριθμός αχρησιμοποίητου νεκρού χρόνου που θα μπορούσε να χρησιμοποιηθεί για άλλα πράγματα όταν χρησιμοποιείται καθυστέρηση (). Η χρήση διακοπής επιλύει αυτό το πρόβλημα.
Βήμα 1: Διακοπή χειριστή
1. Προσθέστε το πρόγραμμα χειρισμού διακοπών στο πρόγραμμά σας. Απλώς αντιγράψτε και επικολλήστε κάπου πάνω από τη ρύθμιση ().
const unsigned long TIMER0_COUNT = 500; // Χρονοδιακόπτης χρονισμού 500 msec
// TIMER0 interrupt handler πτητικός χρόνος bool = false; ISR (TIMER0_COMPA_vect) {στατική μη υπογεγραμμένη μεγάλη καταμέτρηση = 0; if (++ count> TIMER0_COUNT) {count = 0? χρόνος = αλήθεια? // ο χρόνος έχει οριστεί σε true κάθε TIMER0_COUNT ms} // (ο χρόνος πρέπει να διαγραφεί στην κύρια ρουτίνα)}
Βήμα 2: Ορίστε περιοδικό χρονικό διάστημα
2. Ρυθμίστε το χρονικό διάστημα. Αυτή η ρουτίνα γουρουνάρει πίσω στη διακοπή TIMER0, η οποία τίθεται σε λειτουργία κάθε ~ 1 msec.
Το "διάστημα" σας είναι ο αριθμός των διακοπών TIMER0 προς επεξεργασία. Κάθε διάστημα είναι m 1 msec, οπότε ορίζετε πραγματικά πόσες διακοπές TIMER0 θα μετρήσετε πριν ενεργοποιήσετε το διάστημα σας. IOW, ορίστε τη μεταβλητή TIMER0_COUNT σε όσα χιλιοστά του δευτερολέπτου θέλετε να περιμένετε. Για παράδειγμα, χρησιμοποιήστε 500 για μισό δευτερόλεπτο. Χρησιμοποιήστε 3000 για 3 δευτερόλεπτα.
Βήμα 3: Διακοπή εκκίνησης
3. Προσθέστε τον κώδικα "προετοιμασία TIMER0" στη μέθοδο εγκατάστασης (). Και πάλι, απλά αντιγράψτε και επικολλήστε στη ρύθμιση ().
// *** Αρχικοποίηση TIMER0 ***
cli (); // απενεργοποίηση όλων των διακοπών TIMSK0 = 0; // απενεργοποιήστε το χρονόμετρο0 για χαμηλότερο jitter OCR0A = 0xBB; // αυθαίρετη καταμέτρηση διακοπών TIMSK0 | = _BV (OCIE0A); // γουρουνάκι πίσω στη διακοπή sei (); // ενεργοποιήστε ξανά τις διακοπές
Βήμα 4: Πού να προσθέσετε τον κωδικό σας
4. Προσθέστε τον κωδικό "έλεγχος χρόνου" στη μέθοδο βρόχου (). Αντιγράψτε και επικολλήστε σε βρόχο ().
αν (ώρα) {
χρόνος = ψευδής. // κάνε κάτι εδώ}
Το "time = false;" η γραμμή είναι σημαντική. Χωρίς αυτήν τη γραμμή, οι γραμμές "κάνε κάτι εδώ" θα εκτελούνται κάθε φορά που το πρόγραμμα εκτελεί βρόχο ().
Φυσικά, αντικαθιστάτε τις δικές σας δραστηριότητες στη γραμμή "κάντε κάτι εδώ". Ξεκινήστε με εκτύπωση κειμένου ή αναβοσβήνοντας το LED.
Τελείωσες!
Συνιστάται:
Διακοπή ρεύματος εναλλασσόμενου ρεύματος, Φωτισμός διαδρομής LED με μπαταρία: 8 βήματα
Διακοπή ρεύματος AC, Φωτεινή ένδειξη LED Path με μπαταρία: Κατά τη διάρκεια μιας πρόσφατης διακοπής ρεύματος, στα πιο σκοτεινά βάθη του υπογείου μου … ένα φως θα ήταν πολύ βολικό. Δυστυχώς ο φακός μου ήταν μερικά σκοτεινά δωμάτια μακριά. Ανακάτεψα λίγο, βρήκα το φως και πήρα το δρόμο για το οικογενειακό δωμάτιο. Το wi μου
Εφεδρική τροφοδοσία για σωστή διακοπή λειτουργίας: 5 βήματα
Εφεδρική τροφοδοσία για σωστή διακοπή λειτουργίας: Ένα εφεδρικό τροφοδοτικό είναι ένα κύκλωμα που τροφοδοτεί τις συσκευές σε περίπτωση διακοπής της κύριας τροφοδοσίας τους. Σε αυτήν την περίπτωση, αυτό το εφεδρικό τροφοδοτικό προορίζεται για την τροφοδοσία ρεύματος για λίγα δευτερόλεπτα, έτσι ώστε η συσκευή να μπορεί να κάνει τη διαδικασία τερματισμού λειτουργίας της. Αυτό
555 Χρονόμετρο για εκπομπή σήματος για διακοπή Atmega328: 7 βήματα
555 Timer to Emit Signal to Interrupt Atmega328: Ο κύριος στόχος αυτού του κυκλώματος είναι η εξοικονόμηση ενέργειας. Επομένως, δεν πρόκειται να μιλήσω για το arduino επειδή το ίδιο το ταμπλό έχει περιττή ισχύ για ένα τελικό προϊόν. Είναι εξαιρετικό για ανάπτυξη. Αλλά, δεν είναι πολύ καλό για τα τελικά έργα που τρέχουν σε batt
Διακοπή παρακολούθησης χωρίς προγραμματισμό: 5 βήματα
Σταματήστε να παρακολουθείτε χωρίς προγραμματισμό: Ρε παιδιά, για όλους τους αρχάριους, εδώ είναι ένα υπέροχο έργο που μπορείτε να δημιουργήσετε χωρίς προγραμματισμό. Είναι απλό και επίσης οικονομικά αποδοτικό. Πριν ξεκινήσετε, ας ρίξουμε μια ματιά στη λίστα με τα μέρη: IC που χρησιμοποιούνται: 1) χρονοδιακόπτης 555- x12) CD 4081BE (ΚΑΙ g
Δείκτης στάθμης μπαταρίας DIY/Αυτόματη διακοπή για μπαταρία 12v: 5 βήματα (με εικόνες)
Δείκτης στάθμης μπαταρίας DIY/Αυτόματη διακοπή για μπαταρία 12v: DIYers … Όλοι έχουμε περάσει από την κατάσταση όταν οι φορτιστές υψηλής τεχνολογίας είναι απασχολημένοι με τη φόρτιση αυτών των μπαταριών πολυμερών λιθίου, αλλά πρέπει ακόμα να φορτίσετε αυτήν την μπαταρία μολύβδου 12v και τον μοναδικό φορτιστή που έχετε το γκοτ είναι τυφλό…. Ναι, ένα τυφλό