這裡是一個在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: }