这里是一个在Arduino平台下将常用的代码以库的形式封装的示例。
第一步:在Arduino的安装目录下的对应目录建立文件夹 C:Program Files (x86)ArduinolibrariesCMRConfig
第二部:添加2个文件 CMRConfig.h CMRConfig.cpp, 代码如下。
/*
* 配置类,数据保存在 Mega2560 的EEPROM中。
*
* [0,63] 保存集中器的CID
* [64,127] 保存集中器上访的ServerIP地址和端口
* [2048,4095] 保存从机的ID列表
*/
#ifndef CONFIG_H
#define CONFIG_H
#include <Arduino.h>
#include <EEPROM.h>
class CMRConfig {
public:
String getCID();
void setCID(String value);
String getMBusIds();
void setMBusIds(String value);
String getServerInfo();
void setServerInfo(String value);
private:
String getString(int start, int end);
void setString(String value, int start, int end);
};
#endif
#include "CMRConfig.h"
String CMRConfig::getCID()
{
return getString(0, 64);
}
void CMRConfig::setCID(String value)
{
setString(value, 0, 64);
}
String CMRConfig::getMBusIds()
{
return getString(2048, 2048);
}
void CMRConfig::setMBusIds(String value)
{
setString(value, 2048, 2048);
}
String CMRConfig::getServerInfo()
{
return getString(64, 64);
}
void CMRConfig::setServerInfo(String value)
{
setString(value, 64, 64);
}
String CMRConfig::getString(int start, int maxLength)
{
String result = "";
for (int i = start; i < start + maxLength; i++) {
char c = (char)EEPROM.read(i);
if (c == '
') break;
result += c;
}
return result;
}
void CMRConfig::setString(String value, int start, int maxLength)
{
if(!(value.endsWith("
") && value.length() <= maxLength))
{
value = value.substring(0, maxLength - 1) + '
';
}
int len = value.length();
for (int i = start; i < start + len; i++) {
EEPROM.write(i, value.charAt(i));
}
}
第三步:使用示例,代码如下。
#include <CMRConfig.h>
#include <EEPROM.h>
CMRConfig cfg;
void setup() {
Serial.begin(9600);
String cid = "im cid";
cfg.setCID(cid);
Serial.println(cfg.getCID());
}
void loop() {
// put your main code here, to run repeatedly:
}