Arduino 封裝庫

Old發表於2014-03-14

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

}

  

相關文章