这里是一个在Arduino平台下将常用的代码以库的形式封装的示例。
第一步:在Arduino的安装目录下的对应目录建立文件夹 C:\Program Files (x86)\Arduino\libraries\CMRConfig
第二部:添加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 == '\n') break; result += c; } return result; } void CMRConfig::setString(String value, int start, int maxLength) { if(!(value.endsWith("\n") && value.length() <= maxLength)) { value = value.substring(0, maxLength - 1) + '\n'; } 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: }