ללוחות Arduino יש כמה סוגים של זיכרון. ראשית, זהו זיכרון RAM סטטי (זיכרון גישה אקראית), המשמש לאחסון משתנים במהלך ביצוע התוכנית. שנית, זהו זיכרון הפלאש המאחסן את המערכונים שכתבת. ושלישית, זהו EEPROM שניתן להשתמש בו כדי לאחסן מידע לצמיתות. הסוג הראשון של הזיכרון הוא נדיף, הוא מאבד את כל המידע לאחר אתחול הארדואינו מחדש. שני סוגי הזיכרון השניים מאחסנים מידע עד שהוא מוחלף עם חדש, גם לאחר כיבוי החשמל. הסוג האחרון של הזיכרון - EEPROM - מאפשר לכתוב, לאחסן ולקרוא נתונים לפי הצורך. נשקול זיכרון זה כעת.
נחוץ
- - ארדואינו;
- - מחשב.
הוראות
שלב 1
EEPROM מייצג זיכרון לקריאה בלבד לתכנות המחיק באמצעות חשמל, כלומר זיכרון לקריאה בלבד שנמחק באמצעות חשמל. ניתן לשמור את הנתונים בזיכרון זה עשרות שנים לאחר כיבוי החשמל. מספר מחזורי השכתוב בסדר גודל של כמה מיליוני פעמים.
כמות הזיכרון של EEPROM בארדואינו מוגבלת למדי: עבור לוחות המבוססים על מיקרו-בקרה ATmega328 (למשל, Arduino UNO ו- Nano), כמות הזיכרון היא 1 קילו-בתים, עבור לוחות ATmega168 ו- ATmega8 - 512 בתים, ל- ATmega2560 ו- ATmega1280 - 4 KB.
שלב 2
לעבודה עם ה- EEPROM עבור Arduino, נכתבה ספרייה מיוחדת אשר כלולה ב- IDE של Arduino כברירת מחדל. הספרייה מכילה את התכונות הבאות.
קרא (כתובת) - קורא בת אחד מ- EEPROM; כתובת - הכתובת ממנה נקראים הנתונים (תא החל מ- 0);
כתוב (כתובת, ערך) - כותב את ערך הערך (בת אחד, מספר 0 עד 255) לזיכרון בכתובת הכתובת;
עדכון (כתובת, ערך) - מחליף את הערך בכתובת אם התוכן הישן שלה שונה מהתוכן החדש;
קבל (כתובת, נתונים) - קורא נתונים מהסוג שצוין מהזיכרון בכתובת;
put (כתובת, נתונים) - כותב נתונים מהסוג שצוין לזיכרון בכתובת;
EEPROM [כתובת] - מאפשר לך להשתמש במזהה "EEPROM" כמערך לכתיבת נתונים ולקריאה מהזיכרון.
כדי להשתמש בספרייה בשרטוט, אנו כוללים אותה בהנחיית EEPROM.h הכוללת.
שלב 3
בואו נכתוב שני מספרים שלמים ל- EEPROM ואז נקרא אותם מה- EEPROM ונפיק אותם ליציאה הטורית.
אין בעיות עם מספרים מ -0 עד 255, הם תופסים זיכרון אחד בלבד ונכתבים למיקום הרצוי באמצעות הפונקציה EEPROM.write ().
אם המספר גדול מ- 255, אז באמצעות האופרטורים highByte () ו- lowByte () יש לחלק אותו בתים וכל בייט חייב להיות כתוב לתא משלו. המספר המרבי במקרה זה הוא 65536 (או 2 ^ 16).
תראה, צג היציאות הטוריות בתא 0 פשוט מציג מספר נמוך מ- 255. בתאים 1 ו -2 מאוחסן מספר גדול 789. במקרה זה תא 1 מאחסן את גורם הגלישה 3 ותא 2 שומר את המספר החסר 21 (כלומר 789 = 3 * 256 + 21). כדי להרכיב מחדש מספר גדול, המנותח לבתים, קיימת הפונקציה word (): int val = word (hi, low), כאשר hi ו- low הם הערכים של בתים גבוהים ונמוכים.
בכל שאר התאים שמעולם לא רשמנו, מאוחסנים המספרים 255.
שלב 4
כדי לכתוב מספרים ומחרוזות של נקודות צפות, השתמש בשיטת EEPROM.put (), וכדי לקרוא, השתמש ב- EEPROM.get ().
בהליך ההתקנה (), אנו כותבים תחילה את מספר הנקודה הצפה f. ואז אנו נעים לפי מספר תאי הזיכרון שתופס הצף, וכותבים מחרוזת char עם קיבולת של 20 תאים.
בהליך הלולאה () נקרא את כל תאי הזיכרון וננסה לפענח אותם תחילה כסוג "float", ולאחר מכן כסוג "char" ונפיק את התוצאה ליציאה הטורית.
אתה יכול לראות שהערך בתאים 0 עד 3 הוגדר נכון כמספר נקודה צפה, והחל מה -4 - כמחרוזת.
הערכים המתקבלים ovf (גלישה) ו- nan (לא מספר) מצביעים על כך שלא ניתן להמיר את המספר כהלכה למספר נקודה צפה. אם אתה יודע בדיוק איזה סוג נתונים תאי הזיכרון תופסים, לא תהיה לך שום בעיה.
שלב 5
תכונה נוחה מאוד היא התייחסות לתאי זיכרון כאלמנטים במערך EEPROM. בסקיצה זו, בהליך ההתקנה (), נכתוב תחילה את הנתונים ל -4 הבתים הראשונים, ובנוהל הלולאה (), כל דקה נקרא נתונים מכל התאים ונפיק אותם ליציאה הטורית.