วิธีเก็บข้อมูลใน Arduino

สารบัญ:

วิธีเก็บข้อมูลใน Arduino
วิธีเก็บข้อมูลใน Arduino

วีดีโอ: วิธีเก็บข้อมูลใน Arduino

วีดีโอ: วิธีเก็บข้อมูลใน Arduino
วีดีโอ: #25 สอน Arduino Tutorial : Arduino บันทึกข้อมูลลง EEPROM 2024, อาจ
Anonim

บอร์ด Arduino มีหน่วยความจำหลายประเภท อย่างแรกคือ RAM แบบคงที่ (หน่วยความจำเข้าถึงโดยสุ่ม) ซึ่งใช้ในการจัดเก็บตัวแปรระหว่างการทำงานของโปรแกรม ประการที่สอง เป็นหน่วยความจำแฟลชที่เก็บภาพสเก็ตช์ที่คุณเขียนไว้ และประการที่สาม เป็น EEPROM ที่สามารถใช้เก็บข้อมูลได้อย่างถาวร หน่วยความจำประเภทแรกมีความผันผวน และจะสูญเสียข้อมูลทั้งหมดหลังจากรีบูต Arduino หน่วยความจำสองประเภทที่สองเก็บข้อมูลไว้จนกว่าจะถูกเขียนทับด้วยหน่วยความจำใหม่ แม้จะปิดเครื่องแล้วก็ตาม หน่วยความจำประเภทสุดท้าย - EEPROM - ช่วยให้สามารถเขียน จัดเก็บ และอ่านข้อมูลได้ตามต้องการ เราจะพิจารณาความทรงจำนี้ในตอนนี้

การจัดเก็บข้อมูลใน EEPROM Arduino
การจัดเก็บข้อมูลใน EEPROM Arduino

จำเป็น

  • - Arduino;
  • - คอมพิวเตอร์.

คำแนะนำ

ขั้นตอนที่ 1

EEPROM ย่อมาจากหน่วยความจำแบบอ่านอย่างเดียวที่ตั้งโปรแกรมได้ที่สามารถลบได้ด้วยไฟฟ้า เช่น หน่วยความจำแบบอ่านอย่างเดียวที่ลบได้ด้วยไฟฟ้า ข้อมูลในหน่วยความจำนี้สามารถเก็บไว้ได้หลายสิบปีหลังจากปิดเครื่อง จำนวนรอบการเขียนใหม่อยู่ในลำดับหลายล้านครั้ง

จำนวนหน่วยความจำ EEPROM ใน Arduino ค่อนข้างจำกัด: สำหรับบอร์ดที่ใช้ไมโครคอนโทรลเลอร์ ATmega328 (เช่น Arduino UNO และ Nano) จำนวนหน่วยความจำคือ 1 KB สำหรับบอร์ด ATmega168 และ ATmega8 - 512 ไบต์ สำหรับ ATmega2560 และ ATmega1280 - 4 กิโลไบต์

ขั้นตอนที่ 2

ในการทำงานกับ EEPROM สำหรับ Arduino ได้มีการเขียนไลบรารีพิเศษขึ้น ซึ่งรวมอยู่ใน Arduino IDE โดยค่าเริ่มต้น ห้องสมุดมีคุณสมบัติดังต่อไปนี้

อ่าน (ที่อยู่) - อ่าน 1 ไบต์จาก EEPROM; ที่อยู่ - ที่อยู่ที่อ่านข้อมูลจาก (เซลล์เริ่มต้นจาก 0);

เขียน (ที่อยู่, ค่า) - เขียนค่าของค่า (1 ไบต์, หมายเลขจาก 0 ถึง 255) ไปยังหน่วยความจำตามที่อยู่;

อัปเดต (ที่อยู่, ค่า) - แทนที่ค่าที่อยู่หากเนื้อหาเก่าแตกต่างจากเนื้อหาใหม่

รับ (ที่อยู่, ข้อมูล) - อ่านข้อมูลประเภทที่ระบุจากหน่วยความจำตามที่อยู่;

ใส่ (ที่อยู่, ข้อมูล) - เขียนข้อมูลประเภทที่ระบุไปยังหน่วยความจำตามที่อยู่;

EEPROM [ที่อยู่] - อนุญาตให้คุณใช้ตัวระบุ "EEPROM" เป็นอาร์เรย์เพื่อเขียนข้อมูลไปและอ่านจากหน่วยความจำ

ในการใช้ไลบรารีในแบบร่าง เรารวมไลบรารีไว้ด้วยคำสั่ง #include EEPROM.h

ขั้นตอนที่ 3

ลองเขียนจำนวนเต็มสองจำนวนไปที่ EEPROM แล้วอ่านจาก EEPROM และส่งออกไปยังพอร์ตอนุกรม

ไม่มีปัญหากับตัวเลขตั้งแต่ 0 ถึง 255 โดยจะใช้หน่วยความจำเพียง 1 ไบต์และเขียนไปยังตำแหน่งที่ต้องการโดยใช้ฟังก์ชัน 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

การเขียนจำนวนเต็มไปยัง EEPROM Arduino
การเขียนจำนวนเต็มไปยัง EEPROM Arduino

ขั้นตอนที่ 4

ในการเขียนเลขทศนิยมและสตริง ให้ใช้เมธอด EEPROM.put () และหากต้องการอ่าน ให้ใช้ EEPROM.get ()

ในขั้นตอนการตั้งค่า () เราจะเขียนเลขทศนิยม f ก่อน จากนั้นเราจะย้ายตามจำนวนเซลล์หน่วยความจำที่ประเภท float ครอบครอง และเขียนสตริงอักขระที่มีความจุ 20 เซลล์

ในโพรซีเดอร์ลูป () เราจะอ่านเซลล์หน่วยความจำทั้งหมดและพยายามถอดรหัสเซลล์เหล่านั้นก่อนเป็นประเภท "ลอย" จากนั้นเป็นประเภท "ถ่าน" และส่งออกผลลัพธ์ไปยังพอร์ตอนุกรม

คุณจะเห็นว่าค่าในเซลล์ 0 ถึง 3 ถูกกำหนดอย่างถูกต้องเป็นตัวเลขทศนิยม และเริ่มจากค่าที่ 4 - เป็นสตริง

ค่าผลลัพธ์ ovf (ล้น) และน่าน (ไม่ใช่ตัวเลข) บ่งชี้ว่าไม่สามารถแปลงตัวเลขเป็นตัวเลขทศนิยมได้อย่างถูกต้อง ถ้าคุณรู้แน่ชัดว่าข้อมูลประเภทใดที่เซลล์หน่วยความจำใช้อยู่ คุณจะไม่มีปัญหาใดๆ

การเขียนตัวเลขและสตริงทศนิยมไปยัง EEPROM Arduino
การเขียนตัวเลขและสตริงทศนิยมไปยัง EEPROM Arduino

ขั้นตอนที่ 5

คุณลักษณะที่สะดวกมากคือการอ้างถึงเซลล์หน่วยความจำเป็นองค์ประกอบของอาร์เรย์ EEPROM ในภาพร่างนี้ ในขั้นตอนการตั้งค่า () เราจะเขียนข้อมูลลงใน 4 ไบต์แรกก่อน และในขั้นตอนวนรอบ () เราจะอ่านข้อมูลจากเซลล์ทั้งหมดและส่งออกไปยังพอร์ตอนุกรมทุกนาที

แนะนำ: