Πώς να αποθηκεύσετε δεδομένα στο Arduino

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

Πώς να αποθηκεύσετε δεδομένα στο Arduino
Πώς να αποθηκεύσετε δεδομένα στο Arduino

Βίντεο: Πώς να αποθηκεύσετε δεδομένα στο Arduino

Βίντεο: Πώς να αποθηκεύσετε δεδομένα στο Arduino
Βίντεο: Подключение Arduino, установка драйвера и первый запуск 2024, Νοέμβριος
Anonim

Οι πίνακες Arduino έχουν διάφορους τύπους μνήμης. Πρώτον, είναι η στατική RAM (μνήμη τυχαίας προσπέλασης), η οποία χρησιμοποιείται για την αποθήκευση μεταβλητών κατά την εκτέλεση του προγράμματος. Δεύτερον, είναι η μνήμη flash που αποθηκεύει τα σκίτσα που έχετε γράψει. Και τρίτον, είναι ένα EEPROM που μπορεί να χρησιμοποιηθεί για την μόνιμη αποθήκευση πληροφοριών. Ο πρώτος τύπος μνήμης είναι ασταθής, χάνει όλες τις πληροφορίες μετά την επανεκκίνηση του Arduino. Οι δεύτεροι δύο τύποι μνήμης αποθηκεύουν πληροφορίες έως ότου αντικατασταθούν με έναν νέο, ακόμη και μετά την απενεργοποίηση της τροφοδοσίας. Ο τελευταίος τύπος μνήμης - EEPROM - επιτρέπει την εγγραφή, αποθήκευση και ανάγνωση δεδομένων ανάλογα με τις ανάγκες. Θα εξετάσουμε αυτήν τη μνήμη τώρα.

Αποθήκευση δεδομένων στο EEPROM Arduino
Αποθήκευση δεδομένων στο EEPROM Arduino

Απαραίτητη

  • - Arduino;
  • - υπολογιστή.

Οδηγίες

Βήμα 1

Το EEPROM σημαίνει Ηλεκτρικά διαγράψιμη προγραμματιζόμενη μνήμη μόνο για ανάγνωση, δηλαδή ηλεκτρικά διαγράψιμη μνήμη μόνο για ανάγνωση. Τα δεδομένα σε αυτήν τη μνήμη μπορούν να αποθηκευτούν για δεκάδες χρόνια μετά την απενεργοποίηση της τροφοδοσίας. Ο αριθμός των κύκλων επανεγγραφής είναι της τάξης αρκετών εκατομμυρίων φορές.

Το μέγεθος της μνήμης EEPROM στο Arduino είναι μάλλον περιορισμένο: για πίνακες που βασίζονται στον μικροελεγκτή ATmega328 (για παράδειγμα, Arduino UNO και Nano), η ποσότητα μνήμης είναι 1 KB, για πίνακες ATmega168 και ATmega8 - 512 bytes, για ATmega2560 και ATmega1280 - 4 KB.

Βήμα 2

Για να συνεργαστείτε με το EEPROM για το Arduino, έχει γραφτεί μια ειδική βιβλιοθήκη, η οποία περιλαμβάνεται στο Arduino IDE από προεπιλογή. Η βιβλιοθήκη περιέχει τις ακόλουθες δυνατότητες.

read (διεύθυνση) - διαβάζει 1 byte από την EEPROM. διεύθυνση - η διεύθυνση από την οποία διαβάζονται τα δεδομένα (κελί ξεκινώντας από 0) ·

εγγραφή (διεύθυνση, τιμή) - γράφει την τιμή τιμής (1 byte, αριθμός από 0 έως 255) στη μνήμη στη διεύθυνση διεύθυνσης.

ενημέρωση (διεύθυνση, τιμή) - αντικαθιστά την τιμή στη διεύθυνση εάν το παλιό της περιεχόμενο διαφέρει από το νέο.

get (διεύθυνση, δεδομένα) - διαβάζει δεδομένα του καθορισμένου τύπου από τη μνήμη στη διεύθυνση.

put (διεύθυνση, δεδομένα) - γράφει δεδομένα του συγκεκριμένου τύπου στη μνήμη στη διεύθυνση.

EEPROM [διεύθυνση] - σας επιτρέπει να χρησιμοποιήσετε το αναγνωριστικό "EEPROM" ως πίνακα για να γράφετε δεδομένα και να διαβάζετε από τη μνήμη.

Για να χρησιμοποιήσετε τη βιβλιοθήκη στο σκίτσο, την συμπεριλαμβάνουμε στην οδηγία #include EEPROM.h.

Βήμα 3

Ας γράψουμε δύο ακέραιους αριθμούς στο EEPROM και μετά διαβάστε τους από το EEPROM και αφήστε τους στη σειριακή θύρα.

Δεν υπάρχουν προβλήματα με αριθμούς από 0 έως 255, καταλαμβάνουν μόνο 1 byte μνήμης και γράφονται στην επιθυμητή θέση χρησιμοποιώντας τη λειτουργία EEPROM.write ().

Εάν ο αριθμός είναι μεγαλύτερος από 255, τότε χρησιμοποιώντας τους τελεστές highByte () και lowByte () πρέπει να διαιρεθεί με byte και κάθε byte πρέπει να γραφτεί στο δικό του κελί. Ο μέγιστος αριθμός σε αυτήν την περίπτωση είναι 65536 (ή 2 ^ 16).

Κοιτάξτε, η οθόνη σειριακής θύρας στο κελί 0 εμφανίζει απλώς έναν αριθμό μικρότερο από 255. Στα κελιά 1 και 2, αποθηκεύεται ένας μεγάλος αριθμός 789. Σε αυτήν την περίπτωση, το κελί 1 αποθηκεύει τον παράγοντα υπερχείλισης 3 και το κελί 2 αποθηκεύει τον αριθμό που λείπει 21 (δηλ. 789 = 3 * 256 + 21). Για να επανασυναρμολογήσετε έναν μεγάλο αριθμό, αναλυμένο σε byte, υπάρχει η συνάρτηση word (): int val = word (hi, low), όπου hi και low είναι οι τιμές των υψηλών και χαμηλών byte.

Σε όλα τα άλλα κελιά που δεν έχουμε γράψει ποτέ, αποθηκεύονται οι αριθμοί 255.

Γράφοντας ακέραιους αριθμούς στο EEPROM Arduino
Γράφοντας ακέραιους αριθμούς στο EEPROM Arduino

Βήμα 4

Για να γράψετε αριθμούς και συμβολοσειρές κινητής υποδιαστολής, χρησιμοποιήστε τη μέθοδο EEPROM.put () και για να διαβάσετε, χρησιμοποιήστε το EEPROM.get ().

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

Στη διαδικασία βρόχου () θα διαβάσουμε όλα τα κελιά μνήμης και θα προσπαθήσουμε να τα αποκρυπτογραφήσουμε πρώτα ως τύπο "float" και στη συνέχεια ως τύπο "char" και να εξάγουμε το αποτέλεσμα στη σειριακή θύρα.

Μπορείτε να δείτε ότι η τιμή στα κελιά 0 έως 3 ορίστηκε σωστά ως αριθμός κινητού σημείου και ξεκινώντας από την 4η - ως συμβολοσειρά.

Οι προκύπτουσες τιμές ovf (υπερχείλιση) και nan (όχι αριθμός) υποδεικνύουν ότι ο αριθμός δεν μπορεί να μετατραπεί σωστά σε αριθμό κινητής υποδιαστολής. Εάν γνωρίζετε ακριβώς τι είδους δεδομένα καταλαμβάνουν τα κελιά μνήμης, τότε δεν θα έχετε κανένα πρόβλημα.

Γράφοντας αριθμούς και συμβολοσειρές κινητής υποδιαστολής στο EEPROM Arduino
Γράφοντας αριθμούς και συμβολοσειρές κινητής υποδιαστολής στο EEPROM Arduino

Βήμα 5

Ένα πολύ βολικό χαρακτηριστικό είναι να αναφέρεται στα κελιά μνήμης ως στοιχεία μιας συστοιχίας EEPROM. Σε αυτό το σκίτσο, στη διαδικασία setup (), πρώτα θα γράψουμε τα δεδομένα στα πρώτα 4 bytes, και στη διαδικασία loop (), κάθε λεπτό θα διαβάζουμε δεδομένα από όλα τα κελιά και θα τα εξάγουμε στη σειριακή θύρα.

Συνιστάται: