这里是一个在Arduino平台下将常用的代码以库的形式封装的示例。
第一步:在Arduino的安装目录下的对应目录建立文件夹 C:\Program Files (x86)\Arduino\libraries\CMRConfig
第二部:添加2个文件 CMRConfig.h CMRConfig.cpp, 代码如下。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
/* * 配置类,数据保存在 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 |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 |
#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)); }} |
第三步:使用示例,代码如下。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
#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:} |
原文:http://www.cnblogs.com/bruceleeliya/p/3600501.html