Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4263401
  • 博文数量: 776
  • 博客积分: 13014
  • 博客等级: 上将
  • 技术积分: 10391
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-22 17:00
文章分类

全部博文(776)

文章存档

2015年(55)

2014年(43)

2013年(147)

2012年(20)

2011年(82)

2010年(429)

分类: 其他平台

2013-11-18 15:51:37


有的时候我们需要将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

  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即可。
阅读(4363) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~