本帖最后由 大连林海 于 2015-9-5 14:12 编辑
Arduino中利用EEPROM存储double和float类型的数据(使用共用体)
有的时候我们需要将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[i] = EEPROM.read(i);
- Serial.println(dvalue.v);
复制代码
完整示例代码:
- #include <EEPROM.h>
-
- union data {
- double v;
- unsigned char dchar[8];
- } 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[i] = EEPROM.read(i);
- Serial.println(dvalue.v);
- delay(1000);
- }
复制代码
当仅仅要存取float类型时,只需要把v前面的double改为float,把循环和声明dchar中的8改为4即可。
EEPROM库中貌似还有个put方法可以存各种数据类型,
http://www.arduino.cc/en/Reference/EEPROM
|
|
|
|
|
|