添加Float函数进入EEPROM

在网上看了很多存储的float到eeprom的例子不过感觉都不是很便捷 下面介绍一种十分有效的方式

 

float a = 2.3;

float b = 0;

EEPROM_Write((uint8*)&a, 0x00,sizeof(float));

EEPROM_Read((uint8*)&b, 0x00, sizeof(float));

因为float是占用四个字节,而eeprom每次可以放置1个字节。 所以必须得把float a的地址变成字节地址, 写四次写入eeprom。

转载于:https://www.cnblogs.com/shwzh1990/p/10929532.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是操作EEPROM,完成INA219的校准参数、5个电压线性修正系数、产品序列号、产品lic各个部分独立的读取/修改函数的代码示例: ```c #include <Wire.h> #include <EEPROM.h> #include <Adafruit_INA219.h> #define INA219_ADDR x40 #define CALIBRATION_VALUE 4096. Adafruit_INA219 ina219(INA219_ADDR); // 校准参数在EEPROM中的地址 #define CALIBRATION_ADDR // 5个电压线性修正系数在EEPROM中的地址 #define VOLTAGE_CORRECTION_ADDR 2 // 产品序列号在EEPROM中的地址 #define SERIAL_NUMBER_ADDR 12 // 产品lic在EEPROM中的地址 #define LIC_ADDR 22 // 读取校准参数 float read_calibration_value() { uint16_t value; EEPROM.get(CALIBRATION_ADDR, value); return value / CALIBRATION_VALUE; } // 写入校准参数 void write_calibration_value(float value) { uint16_t eeprom_value = value * CALIBRATION_VALUE; EEPROM.put(CALIBRATION_ADDR, eeprom_value); } // 读取电压线性修正系数 float read_voltage_correction(int index) { uint16_t value; EEPROM.get(VOLTAGE_CORRECTION_ADDR + index * 2, value); return value / CALIBRATION_VALUE; } // 写入电压线性修正系数 void write_voltage_correction(int index, float value) { uint16_t eeprom_value = value * CALIBRATION_VALUE; EEPROM.put(VOLTAGE_CORRECTION_ADDR + index * 2, eeprom_value); } // 读取产品序列号 String read_serial_number() { char buffer[10]; EEPROM.get(SERIAL_NUMBER_ADDR, buffer); return String(buffer); } // 写入产品序列号 void write_serial_number(String serial_number) { char buffer[10]; serial_number.toCharArray(buffer, 10); EEPROM.put(SERIAL_NUMBER_ADDR, buffer); } // 读取产品lic String read_lic() { char buffer[10]; EEPROM.get(LIC_ADDR, buffer); return String(buffer); } // 写入产品lic void write_lic(String lic) { char buffer[10]; lic.toCharArray(buffer, 10); EEPROM.put(LIC_ADDR, buffer); } void setup() { Serial.begin(960); Wire.begin(); ina219.begin(); } void loop() { float shunt_voltage = ina219.getShuntVoltage_mV(); float bus_voltage = ina219.getBusVoltage_V(); float current = ina219.getCurrent_mA(); float power = ina219.getPower_mW(); Serial.print("Shunt voltage: "); Serial.print(shunt_voltage); Serial.print(" mV, Bus voltage: "); Serial.print(bus_voltage); Serial.print(" V, Current: "); Serial.print(current); Serial.print(" mA, Power: "); Serial.print(power); Serial.println(" mW"); delay(100); } ``` 以上代码示例实现了对EEPROM中校准参数、5个电压线性修正系数、产品序列号、产品lic各个部分的读取和修改。其中,校准参数和电压线性修正系数需要使用INA219进行校准,然后写入EEPROM中,以便下次使用时进行修正。产品序列号和产品lic可以在生产时写入EEPROM中,以便后续使用时进行识别和授权。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值