shenhaiyu 发表于 2012-10-28 21:57:14

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

本帖最后由 shenhaiyu 于 2015-6-4 13:11 编辑

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

数据拆分存储部分:dvalue.v = 169600.00;
unsigned char *dpointer;
dpointer = dvalue.dchar;
for(int i = 0; i < 8; i++) {
    EEPROM.write(i,*dpointer);
    dpointer++;
}数据读取部分:for(int i = 0; i < 8; i++) dvalue.dchar = EEPROM.read(i);
Serial.println(dvalue.v);完整示例代码:#include <EEPROM.h>

union data {
double v;
unsigned char dchar;
} dvalue;

void setup() {
Serial.begin(9600);

//数据拆分
dvalue.v = 169600.00;
unsigned char *dpointer;
dpointer = dvalue.dchar;
for(int i = 0; i < 8; i++) {
    EEPROM.write(i,*dpointer);
    dpointer++;
}
}

void loop()
{
//数据还原
for(int i = 0; i < 8; i++) dvalue.dchar = EEPROM.read(i);
Serial.println(dvalue.v);
delay(1000);
}
当仅仅要存取float类型时,只需要把v前面的double改为float,把循环和声明dchar中的8改为4即可。






EEPROM库中貌似还有个put方法可以存各种数据类型,感谢18# 葱拌豆腐 提供
http://www.arduino.cc/en/Reference/EEPROM

MicroCao 发表于 2012-10-28 22:41:26

收下了,非常感谢

test01 发表于 2012-10-29 13:16:11

有点问题吧
double类型在avr-gcc里和float一样是4字节的

test01 发表于 2012-10-29 17:31:00

是呢
8位16位单片机的C,实型数很薄弱
连库不少浮点函数都没

zsj008od 发表于 2013-3-7 16:49:01

这个不错,学习了

fangtaonj 发表于 2013-5-14 14:19:57

太好了!马上要用到!

fangtaonj 发表于 2013-5-14 14:20:18

哦,刚忘了说:谢谢楼主!

kingone 发表于 2013-11-17 20:21:50

本帖最后由 kingone 于 2013-11-17 22:39 编辑

不知道怎么办,processing中尽然不能定义union共用体,不知道processing是怎么搞的?

shenhaiyu 发表于 2013-11-18 11:20:04

kingone 发表于 2013-11-17 20:21 static/image/common/back.gif
不知道怎么办,processing中尽然不能定义union共用体,不知道processing是怎么搞的?

呃,这个,我也不了解proccessing

wangchenxicool 发表于 2013-11-18 15:49:21

不错!收藏了!谢谢楼主!:)

shenhaiyu 发表于 2013-11-19 11:51:51

wangchenxicool 发表于 2013-11-18 15:49 static/image/common/back.gif
不错!收藏了!谢谢楼主!:)

谢谢支持~~

鲫鱼鲫鱼 发表于 2014-12-11 14:54:31

楼主请问下,要是我要保存日期时间的?例如:2014,12,11,14,53,00。具体到秒

shenhaiyu 发表于 2014-12-12 09:26:51

鲫鱼鲫鱼 发表于 2014-12-11 14:54 static/image/common/back.gif
楼主请问下,要是我要保存日期时间的?例如:2014,12,11,14,53,00。具体到秒

时间本身就是double型的吧。最笨的办法分解时间分别存储

鲫鱼鲫鱼 发表于 2014-12-12 23:17:43

刚刚接触

shenhaiyu 发表于 2014-12-12 09:26 static/image/common/back.gif
时间本身就是double型的吧。最笨的办法分解时间分别存储

我是接触这种单片机的,懂你的意思,但不知道怎么搞额

shenhaiyu 发表于 2015-3-7 19:38:38

鲫鱼鲫鱼 发表于 2014-12-12 23:17 static/image/common/back.gif
我是接触这种单片机的,懂你的意思,但不知道怎么搞额

那就靠你自己设计了
页: [1] 2
查看完整版本: Arduino中利用EEPROM存储double和float类型的数据(使用共用体)