Lưu Các Giá Trị Double, Float, Int… Vào Bộ Nhớ EEPROM Của Arduino

Skip to content
  • Arduino / Lập trình
  • 2
Lưu các giá trị double, float, int… vào bộ nhớ EEPROM của arduino

by Chapichuse · Published 19/04/2017 · Updated 21/04/2017

Trong tất cả các chíp AVR đều có bộ nhớ eeprom, người dùng có thể lưu trữ các giá trị nhất định như các giá trị setting hệ thống, các hằng số, các biến số... mà khi thiết bị khởi động lại không bị mất các giá trị đó (giống như khi lưu vào ổ cứng máy tính).Trong thư viện EEPROM.h của arduino cho phép thực hiện được việc lưu trữ này. Tuy nhiên, các hàm trong thư viện EEPROM.h chỉ cho phép đọc, ghi giá trị của 1 byte nào đó thôi. Đối với các dữ liệu khác byte như float, double, int ... hoặc tất cả các dữ liệu dài hơn 1 byte thì người dùng cần phải viết code để có thể read() and write() các giá trị đó.

Ví dụ : một số float 823.5 bao gồm 4 byte như bản dưới. Để lưu trữ hoặc đọc ra  giá trị float này cần đọc, ghi 4 byte đó.

Float (823.5)

01000100

01001101

11100000

00000000

Byte [3]

Byte [2]

Byte [1]

Byte [0]

Để thuận tiện trong quá trình sử dụng lưu trữ, đọc dũ liệu từ epprom người ta đã tạo ra thư viện eeprom mở rộng: http://playground.arduino.cc/Code/EEPROMex

Thư viện này có thêm nhiều tính năng rất hay mà người lập trình arduino có thể sử dụng ngay:

Ví dụ muốn ghi một giá trị Interger vào vị trí nào đó thì chỉ cần gọi lệnh:

EEPROM.writeInt(addressInt,input);

Trong đó:

  •  addressInt là địa chỉ trên eeprom cần ghi;
  • input là giá trị interger cần ghi.

Sau này cần đọc giá trị này ra sử dụng ta chỉ cần gọi lệnh:

int output = EEPROM.readInt(addressInt);

Chú ý: Trước khi lưu một gía trị nào đó vào eeprom cần nhớ địa chỉ và kích thước (size) của kiễu dữ liệu của nó. Địa chỉ ở đây là địa chỉ của byte đầu tiên, các byte tiếp theo sẽ chiếm vị trí (địa chỉ) tiếp theo. Muốn lưu giá trị khác thì phải tránh những địa chỉ này.

Để sử dụng thư viện này chúng ta cần thực hiện các bước sau:

  • Tải thư viện về gồm 3 file: EEPROMex.cpp; EEPROMex.h và EEPROMVar.h
  • Copy vào vị trí file: ino (file lập trình chính cho arduino)
  • Include vào chương trình chính, và khai báo biến, khai báo vị trí lưu dữ liệu trên eeprom

#include <EEPROMex.h>

int addressInt = 30; // vị trí lưu biến Int

int value;

  • trong phần setup

Void Setup()

{

EEPROM.setMemPool(0, 1024); //vị tri dau tien và dung luong cua eeprom EEPROM.setMaxAllowedWrites(1024); // số byte cho phép lưu

}

và trong chương trình ta thêm vào dòng lệnh đọc, hoặc ghi giá trị là được:

int input = 30000; int output = 0; EEPROM.writeInt(addressInt,input); // lưu input vào eeprom output = EEPROM.readInt(addressInt); // đọc int từ eeprom tại địa chỉ addressInt, lưu vào output

//phan debug

Serial.print("adress: "); Serial.println(addressInt); Serial.print("input: "); Serial.println(input); Serial.print("output: "); Serial.println(output); Serial.println("");

Kết quả thu được của đoạn chương trình trên là: adress: 30 input: 30000 output: 30000

Để sử dụng thêm tính năng cần đọc file example hoặc các file .cpp, .h  của thư viện

Chapichuse

Đam mê công nghệ

You may also like...

  • common/common-define.chunk 0

    common/common-define.chunk

    25/10/2024

    by Mr.Phan · Published 25/10/2024

  • 0

    C# Đưa chương trình vào Tray Icon khi Form ở chế độ Minimize

    17/10/2015

    by Chapichuse · Published 17/10/2015 · Last modified 12/03/2017

  • 0

    Nạp ESP8266-E12 và ESP32-CAM từ ESP8266 E12 NodeMCU

    05/05/2021

    by Chapichuse · Published 05/05/2021 · Last modified 02/01/2022

2 Responses

  • Comments2
  • Pingbacks0
  1. Reed Noel viết: 16/03/2018 lúc 11:51 chiều

    mình theo hướng dẫn bị lỗi, nhờ giúp đỡ: ‘struct EEPROMClass’ has no member named ‘WriteInt’

    Bình luận
  2. Chapichuse viết: 17/03/2018 lúc 11:44 chiều

    Bạn thử làm theo các bước sau: 1. Download thu viện về: https://github.com/thijse/Arduino-EEPROMEx/archive/master.zip 2. Vào Aruino menu > Sketch > Include library > Add .Zip library, Chọn file Zip vừa tải về 3. Chạy thử đoạn code sau:

    #include // Chỉ cần Include file này

    int address = 0; //địa chỉ cần ghi vào double input = 100.12; //Giá trị cần ghi vào EEprom double output = 0;// Giá trị cần đọc ra từ EEprom

    void setup() { Serial.begin(9600); EEPROM.writeDouble(address, input); output = EEPROM.readDouble(address); Serial.print(address); Serial.print("\t"); Serial.print(output); Serial.println(); }

    void loop() { }

    Bình luận

Để lại một bình luận Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Bình luận *

Tên *

Email *

Trang web

Δ

Follow:

Bài viết mới

  • common/common-define.chunk
  • builtin/uniforms/cc-global.chunk
  • Cấu hình user riêng cho từng website trên server Nginx, PHP 8.1 trên Ubuntu 22.04 LTS x64
  • Hướng dẫn cài đặt và cấu hình Fail2Ban trên CentOS 7
  • Kết nối và sử dụng MongoDB bằng `mongosh`
  • Cài đặt và sử dụng MongoDB trên macOS
  • Ngày Đế Thích giáng hạ
  • Tính giờ xuất hành theo Lý Thuần Phong
  • Bài 2. Cài đặt môi trường và tạo dự án ionic đầu tiên

Bình luận gần đây

  • SKI trong Bài 3: Các cổng logic : AND, OR, NAND, XOR, NOT
  • Phương trong Phần mềm từ điển, dịch cả đoạn văn bản nhiều thứ tiếng
  • Xuân Hoàng trong Phần mềm quang học Zemax – Một số khái niệm quan trọng
  • xuan phi trong Phần mềm quang học Zemax – Một số khái niệm quan trọng
  • Duong trong Bài 3: Các cổng logic : AND, OR, NAND, XOR, NOT
  • Hùng trong Phần mềm quang học Zemax – Một số khái niệm quan trọng
  • An Phạm trong Phần mềm quang học Zemax – Một số khái niệm quan trọng
  • Phương Anh trong Phần mềm quang học Zemax – Một số khái niệm quan trọng
  • QUY trong Bài 3: Các cổng logic : AND, OR, NAND, XOR, NOT

More

  • Next story Set bootloader cho AVR atmega328
  • Previous story Bẻ khóa mật khẩu file Excel
Tìm kiếm cho:

Danh mục

Danh mục Chọn danh mục Database (2) Error & Warning (2) Lập trình (25) Blockchain (3) Cocos Creator (2) CSS + HTML (1) Flutter (2) ionic (2) Javascript (1) KeystoneJS (2) Laravel (1) NodeJs (3) PHP (1) React Native (1) Xử lý ảnh (1) Phong tục (2) Quang học (7) Thiết kế (1) Tin học (57) Bảo mật (4) Linux (19) Ubuntu (2) Phần mềm (9) Uncategorized (4) Xây dựng (5) Điện tử (23) Arduino (7) FPGA không chuyên (15) Tháng mười hai 2024
H B T N S B C
1
2345678
9101112131415
16171819202122
23242526272829
3031
« Th10

Thẻ

android Arduino ASIC Bảo mật CentOS Cocos Creator Database Debug DirectAdmin Flutter FPGA Giờ tốt ionic ios Laravel Linux Lập trình macOS MariaDB mobile app MongoDB MySQL Nginx Ngôn ngữ mô tả phần cứng Office Password Permission Phong tục PHP phpMyAdmin Quang học screen reader Security Server Shader Software Timezone Tin học Ubuntu Verilog HDL VHDL VPS Warning Xuất hành Xử lý ảnh số

Meta

  • Đăng ký
  • Đăng nhập
  • RSS bài viết
  • RSS bình luận
  • WordPress.org

Từ khóa » Cách Sử Dụng Eeprom Trong Arduino