7450浏览
查看: 7450|回复: 0

[入门] Arduino中利用EEPROM存储double和float类型的数据(使用共用体)

[复制链接]
本帖最后由 大连林海 于 2015-9-5 14:12 编辑

Arduino中利用EEPROM存储double和float类型的数据(使用共用体)

有的时候我们需要将float或者double类型的数据存到EEPROM中以备下次利用,比如制作电子称存储皮重等信息时。
但是Arduino的EEPROM仅仅能以8bit一位存储1024位。
在网上查了一下,貌似使用共用体的方法很火,于是写了个代码:

数据拆分存储部分:

  1.   dvalue.v = 169600.00;
  2.   unsigned char *dpointer;
  3.   dpointer = dvalue.dchar;
  4.   for(int i = 0; i < 8; i++) {
  5.     EEPROM.write(i,*dpointer);
  6.     dpointer++;
  7.   }
复制代码

数据读取部分:

  1.   for(int i = 0; i < 8; i++) dvalue.dchar[i] = EEPROM.read(i);
  2.   Serial.println(dvalue.v);
复制代码

完整示例代码:

  1. #include <EEPROM.h>
  2. union data {
  3.   double v;
  4.   unsigned char dchar[8];
  5. } dvalue;
  6. void setup() {
  7.   Serial.begin(9600);
  8.   
  9.   //数据拆分
  10.   dvalue.v = 169600.00;
  11.   unsigned char *dpointer;
  12.   dpointer = dvalue.dchar;
  13.   for(int i = 0; i < 8; i++) {
  14.     EEPROM.write(i,*dpointer);
  15.     dpointer++;
  16.   }
  17. }
  18. void loop()
  19. {
  20.   //数据还原
  21.   for(int i = 0; i < 8; i++) dvalue.dchar[i] = EEPROM.read(i);
  22.   Serial.println(dvalue.v);
  23.   delay(1000);
  24. }
复制代码

当仅仅要存取float类型时,只需要把v前面的double改为float,把循环和声明dchar中的8改为4即可。






EEPROM库中貌似还有个put方法可以存各种数据类型,
http://www.arduino.cc/en/Reference/EEPROM


相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail