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

2015-09-051.4万
AI 快速预览详细 收起
本文介绍了如何在Arduino中使用共用体将double和float类型的数据拆分存储到EEPROM中。通过具体代码示例,展示了如何将169600.00这样的大数值存储到EEPROM中,并在需要时读取。这种方法适用于需要存储大数值的应用场景,如电子称存储皮重。


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


创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -