Arduino 封装库

这里是一个在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:

}

  

posted @ 2014-03-14 14:24  Old  阅读(3892)  评论(0编辑  收藏  举报